为不同的用户界面共享有状态EJB?

时间:2013-11-25 17:24:58

标签: java ejb

我有一个EJB问题。

考虑我们有一个有状态的bean(一个简单的购物车),用户使用简单的桌面应用程序获取其会话,而不是用户可以使用移动(另一个ui模块)或web继续其过程,所以问题是:

当会话是针对一个用户时,如何合并两个有状态会话?

我正在考虑保留所有会话,一旦用户尝试通过另一个模块继续其进程,系统将找到任何存在的会话并将其与新会话合并,但它需要很多代码并且可能使系统复杂化。有没有什么属于EJB本身呢?

另一个问题是,无状态和单例EJB有什么区别?!

1 个答案:

答案 0 :(得分:1)

  

当会话为一个会话时,我将如何合并两个有状态会话   用户?有没有什么属于EJB本身呢?

不,JEE中没有这样的合并。

但是,您可以在不同的客户端之间共享相同的有状态引用。当您使用JNDI查找或依赖注入获得对有状态会话bean的引用时,Container会生成一个新的有状态bean实例,该实例将分配一个唯一的对象标识。

ejb引用知道此唯一标识,因此您使用此引用创建的每个请求都将在同一个有状态实例中处理。

因此,不同客户通过相同引用发出的不同请求将在同一有状态实例中处理,以允许在客户端之间共享Stateful状态。

容器负责序列化并发请求,因此您不必担心并发。

您需要解决的是如何向所有客户提供此ejb参考。

  

另一个问题是,无状态和单例EJB有什么区别?!

在其他差异中,上一个问题的相关性更为相关:

  • 无状态

    • 每个请求一个实例
    • 没有会话状态
  • 的Singleton

    • 每个应用程序一个实例
    • 有会话状态
    • 状态由所有客户共享
  • 有状态

    • 每个客户一个实例(参考)
    • 有会话状态
    • 状态仅适用于他的客户