0

我有一个使用 EJB 的 Java EE 应用程序,并通过无状态 EJB 执行大部分功能。

我要求所有用户也有一个活动会话,我想知道使用 bean 的最佳方式是什么。

目前,我有一个命令行客户端,除了使用有状态 bean 登录系统外,它还直接使用无状态 bean。

我想知道是否应该让客户端通过有状态 bean 执行所有功能,这样除非存在活动会话,否则无法执行任何功能。
这对我个人来说更有意义。

我只是不太确定什么设计是“正确的”或者什么是更好的设计。
如果我继续让客户端使用无状态 bean,那么我将不得不为这些无状态 bean 提供一种方法来检查客户端是否具有活动会话。

4

2 回答 2

0

即使您只调用无状态 bean,会话仍然存在。是否调用无状态或有状态 bean 的选择应该只与您是否需要在方法调用之间保持状态有关。尝试注入SessionContext并注意会有一个主体,即使它是匿名的。

于 2013-08-25T10:54:10.337 回答
0

如果您的要求是经过身份验证的用户,那么无状态会话 bean 就可以了:

  • 您可以调用SessionContext.getCallerPrincipal()EJB(用于日志记录等)
  • 您可以以声明方式强加授权(使用@RolesAllowedEJB 方法上的注释)

所以我看不到切换到有状态会话 bean 的理由。它可能不相关,但有状态会话 bean 会消耗服务器端的资源,因此应该有一个令人信服的理由这样做。

一个相关问题何时在无状态会话 bean 上使用有状态会话 bean?到目前为止没有收到任何答案,我认为在这种情况下没有答案也是一个答案

于 2013-08-25T12:07:47.313 回答