我是 ejbs 的新手。我写了一个作用域为@SessionScoped 的有状态会话bean。然后我将 ejb 注入到我的 servlet 中。
@Local
@SessionScoped
@Statueful
public class CartServiceImpl implements CartService {
private int i = 0;
public int getI() {
return i++;
}
}
在我的小服务程序中
@Inject
private CartService cartService;
.
.
.
out.print(cartService.getI());
然后我打开了两个浏览器(IE、FF)并点击了 servlet。在 IE 中,我看到从 0 到 n 的输出。在 Firefox 中,我也看到从 0 到 n 的输出。
然后我创建了一个耳朵,它有一个罐子和一个战争。jar 包含所有 ejb。war 包含 servlet。
这就是我将 ejb 注入 servlet 的方式
@Resource(lookup = "java:app/ejb-beginner-ejb/CartServiceImpl")
private CartService cartService;
然后我尝试从 IE 和 FF 请求相同的 servlet,我得到了意外的输出。
输出如下
在 IE 中我第一次请求,我得到 0 作为输出。然后我刷新了页面,我得到 1 作为输出。然后我转到 FF,第一次发送请求,我得到 2 作为输出而不是 0。然后我转到 IE 并刷新页面,我得到 3 作为输出而不是 2。
我的理解是应用服务器只创建有状态 ejb 的一个实例。我怎样才能解决这个问题?
将war中的ejb打包和单独打包在jar模块中有什么区别?