从无状态Bean返回有状态Java Bean?

时间:2012-04-27 18:12:37

标签: java java-ee ejb javabeans

我想按如下方式处理登录方案:

  1. 客户端连接到无状态Java Bean(SLJB)并尝试登录;
  2. 如果登录成功,SLJB会向用户返回有状态Java Bean(SFJB),以便客户端可以继续使用该应用程序。
  3. 我目前正在做第二步:

    return new StatefulBean(some params);
    

    这是正确的方法吗?在我看来并不是因为我得到了例外:

    Class org.eclipse.persistence.internal.jpa.EntityManagerImpl is not Serializable
    

    运行我的应用程序时,我认为它与所描述的方法有关。

    将对SFJB的引用从SLJB返回给客户端的正确方法是什么?

2 个答案:

答案 0 :(得分:3)

首先,这是完全错误的:

new StatefulBean(some params)

EJB容器负责创建和销毁bean的实例,不应该手动创建它们。

在你的场景中,我会颠倒流程:客户端连接到有状态bean,它可能是无状态会话bean作为帮助器。无需传递bean,客户端总是使用相同的bean。

答案 1 :(得分:1)

正如Tomasz所提到的,你可能需要重新思考你的流程。

也就是说,您可以通过使用我们在启动时分配给每个bean的可移植JNDI名称进行JNDI查找来获取新的有状态实例。