我有一个有状态会话Bean(SFSB),它充当身份验证模块.在SFSB中,我存储了当前登录的用户.此外,我还有一些外观(无状态会话Bean(SLSB))处理我的实体的JPA / sql内容.为了检查当前用户的访问权限,我尝试从SLSB中调用SFSB.但是当从SLSB调用时,当前用户字段始终为“null”.直接调用SFSB时,正确设置当前用户字段…为了调用我使用@EJB注释.
任何想法可能是什么问题?这是某种上下文问题吗?通常是否可以从SLSB调用SFSB来保留它的状态?
提前谢谢了!
解决方法
您不应该从无状态会话bean调用有状态会话bean.
这是一些阅读:JEE6 Tutorial – Session Beans
无状态bean对您的会话一无所知.无论何时你打电话,它都是无国籍的.然后它调用有状态会话bean.毫不奇怪,它没有任何与客户端会话状态相关的上下文,因为它是从无状态对象调用的.
我不知道它是否会起作用,但你可能会尝试通过使用@EJB表示法进行JNDI查找而不是DI来获取上下文.无状态ejb中的这样的东西可能会起作用.你可能不得不玩它,我无法保证任何东西.它应该获取客户端调用无状态ejb的上下文.客户端需要具有会话上下文/范围或忘记它.
@Resource SessionContext sessionContext; MyStatefulBean msb = (MyStatefulBean)sessionContext.lookup("ejb/MyStatefulBean"); msb.doSomething(fubar);
最好从具有会话范围的客户端或另一个有状态ejb调用有状态会话bean.无国籍和有状态的人有不同的理由.