在有状态EJB 3.1 bean中保持会话?

Seb*_*ebi 7 java ejb java-ee java-ee-6 ejb-3.1

我正在尝试结合以下技术的Java webapp:

  • Java EE 6
  • CDI
  • JSF 2
  • EJB 3.1
  • 春季安全

我为我的JSF页面提供了基于CDI的后台bean(@ViewScoped,@ Name).

我使用@Stateless EJB bean来完成实际工作.

我只需要很少的会话信息,如jSessionCookie(由容器管理),内部用户名和一些其他内部ID.现在,我想知道在哪里放置这个会话信息,以便我可以在JSF的支持bean中访问它,还可以将它提供给无状态EJB?我应该使用@Stateful EJB会话bean还是应该使用@SessionScoped和@Named创建基于CDI的POJO?

有没有最佳做法?

Arj*_*jms 8

对于您的特定用例,有状态会话bean不是一个好的选择.

请注意,与人们可能声称的相反,有状态会话bean肯定不是您通常应该避免的.但是,它们适用于高级用例,例如在处理JPA的扩展持久性上下文时.

有状态会话bean在这里不起作用的原因是它们不会自动与HTTP会话相关联,这似乎是您最关心的问题.您可以向它们添加@SessionScoped注释,但是您也可以使用常规托管bean.您不会使用SFSB的任何特定功能.

见alo:

您可以使用会话范围的CDI bean注入无状态EJB,但是您必须意识到在同一个应用程序中,您的EJB bean将依赖于HTTP会话(有时您希望避免这种情况,例如,如果您的bean必须被调用)从其他情况来看).