【发布时间】: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,它的编码完全相同,并且有效。不知道为什么这不起作用。
【问题讨论】: