Java EE 6:如何从无状态会话Bean调用有状态会话Bean?

前端之家收集整理的这篇文章主要介绍了Java EE 6:如何从无状态会话Bean调用有状态会话Bean?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个有状态会话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.无国籍和有状态的人有不同的理由.

猜你在找的Java相关文章