【问题标题】:Jboss 6.3: Stateful bean: cannot get the container to hold conversational stateJboss 6.3:Stateful bean:无法让容器保持会话状态
【发布时间】:2015-06-12 05:00:41
【问题描述】:

场景:用户点击“生成列表”,系统显示列表。然后,用户输入一个电子邮件地址并点击“发送列表”。

有两个客户端服务器请求,所以为了避免两次读取数据库,我设置了一个 EJB3 有状态 bean。问题是我无法让 bean 跨多个客户端服务器请求保持会话状态。

代码:本地接口

@Local
public interface IList{

    public void setList(Collection<String> list);

    public Collection<String> getList();

    public void remove();


}

代码:豆

@Stateful
public class List implements IList{

    private Collection<String> list;

    @Override
    public void setList(Collection<String> list) {

        this.list= list;

    }

    @Override
    public Collection<String> getList() {

        return this.list;

    }

    @Remove
    @Override
    public void remove(){

    }
}

代码:ejb-jar.xml:为简单起见,只有会话标签封装的数据

<session>
    <ejb-name>List</ejb-name>
    <ejb-class>com.lists.List</ejb-class>
</session>

这就是我查找 bean 并设置列表的方式

InitialContext ic = new InitialContext();
IList irc = (IList)ic.lookup("java:global/rdb/rdb.jar/List!com.lists.IList");
irc.setList(list);

在下一个请求时,我再次查找并调用 getList()

InitialContext ic = new InitialContext();
IList irc = (IList)ic.lookup("java:global/rdb/rdb.jar/List!com.lists.IList");
list = irc.getList();

注意: 我已经更改了类名和方法名以及查找名称,因为我无法向您显示实际代码。

没有记录错误。调试代码显示数据不可用。

我的系统上有另一个有状态的 bean,它的编码完全相同,并且有效。不知道为什么这不起作用。

【问题讨论】:

    标签: java ejb-3.0 stateful


    【解决方案1】:

    每次对有状态 EJB bean 执行程序化 JNDI 查找时,您都会收到该 EJB 的全新实例。这意味着在您的情况下它按预期工作。 您需要做的是在某处存储对您的 SFSB 的引用,例如在 HttpSession 对象中。然后在后续请求中,您将获得与之前请求相同的 SFSB 实例。

    我的系统上有另一个有状态 bean,它的编码完全相同,并且可以正常工作

    这很有趣。您确定它们的编码完全相同吗?可以分享一段代码吗?

    【讨论】:

    • 我 100% 确定,它与此相同。区别仅在于类名及其方法名。另外,我还没有将它存储在 HttpSession 中。澄清:如果同一个客户端再次查找它,容器是否不会将有状态 bean 保留在其 bean 池中并返回先前创建的确切 bean。参考这个问题stackoverflow.com/questions/5153012/…
    • 不,有状态的 bean 没有被池化。
    • 那么,如果不在会话中存储对接口的引用,就不可能实现我的场景吗?
    • 我怀疑在不存储某些东西(例如会话)的情况下是否可行。顺便说一句,你能显示另一个有状态 bean 的代码吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-23
    • 2011-03-31
    • 2012-08-17
    • 2011-01-02
    • 2019-09-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多