Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在有状态EJB3.1bean中保持会话?_Java_Jakarta Ee_Ejb_Java Ee 6_Ejb 3.1 - Fatal编程技术网

Java 在有状态EJB3.1bean中保持会话?

Java 在有状态EJB3.1bean中保持会话?,java,jakarta-ee,ejb,java-ee-6,ejb-3.1,Java,Jakarta Ee,Ejb,Java Ee 6,Ejb 3.1,我正在开发一个Java Web应用程序,试图结合以下技术: Java EE 6 CDI JSF2 EJB3.1 春季安全 我为我的JSF页面提供基于CDI的支持bean(@ViewScoped,@Named) 我使用@statelementejbbean来完成实际的工作 我只需要很少的会话信息,如jSessionCookie(由容器管理)、内部用户名和一些其他内部ID。现在,我想知道应该把这个会话信息放在哪里,这样我就可以在JSF的支持bean中访问它,而且还可以将它提供给无状态EJB?我应

我正在开发一个Java Web应用程序,试图结合以下技术:

  • Java EE 6
  • CDI
  • JSF2
  • EJB3.1
  • 春季安全
我为我的JSF页面提供基于CDI的支持bean(@ViewScoped,@Named)

我使用@statelementejbbean来完成实际的工作

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


有什么最佳实践吗?

@statefulejb是我尽量避免使用的。我相信行为和状态是不应该混为一谈的


我也会选择SJuan76的答案,并使用SessionScoped JSF支持bean。

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

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

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

见alo:


您可以使用会话范围的CDIBean注入无状态EJB,但您必须意识到,在同一应用程序中,您的EJB bean将依赖于HTTP会话(这是您有时想要避免的,例如,如果您的bean也必须从其他上下文调用)。

不是权威答案,但在我的例子中,我主要将它保存在一个SessionScoped JSF支持bean中。EJB几乎不使用这些信息,当他们使用这些信息时,它更加灵活(例如,在一种情况下,搜索的标准之一是用户;一些用户只能看到它的项目-他们的id作为过滤器的一部分传递-而其他人可以看到其他用户的项目-没有id作为过滤器的一部分传递)-好的,只是为了确保我正确理解它。您还会说我应该使用CDI SessionScoped bean来保存用户信息,而不是使用有状态EJB?是的,对于这个特定的用例以及您提供给我们的信息,我认为不需要有状态EJB。CDI SessionScoped bean可以注入到其他CDI bean以及(无状态)EJB bean中。好的,谢谢,只是想确保我没有误读您的答案!我不同意把状态和行为混为一谈总是一件坏事。考虑什么是OOP的本质:在一个地方(对象中)保持状态和行为。