相关疑难解决方法(0)

为什么池无状态会话bean?

Java中的无状态bean不会在客户端的两次调用之间保持状态.因此,简而言之,我们可能会将它们视为具有业务方法的对象.每个方法都接受参数并返回结果.调用该方法时,会在执行堆栈中创建一些局部变量.当方法返回时,将从堆栈中删除本地,如果分配了一些临时对象,则无论如何都会对它们进行垃圾回收.

从我的观点来看,它与通过单独的线程调用同一单个实例的方法没有区别.那么为什么容器不能使用bean的一个实例而不是汇集其中的一个?

java ejb stateless-session-bean pooling

27
推荐指数
1
解决办法
1万
查看次数

具有实例变量的无状态会话bean

我有一个无状态会话bean,它包含一个公共方法,几个私有方法和一些实例级变量.下面是一个伪代码示例.

private int instanceLevelVar

public void methodA(int x) { 
  this.instanceLevelVar = x;
  methodB();
}

private void methodB() {
  System.out.println(instanceLevelVar);
}
Run Code Online (Sandbox Code Playgroud)

我所看到的是,methodB正在打印未传递给MethodA的值.最好我可以告诉它从同一个bean的其他实例打印值.什么会导致这个?

我应该指出代码在99.9%的时间内按预期工作.但是,.01%对我来说是一个严重的问题/担忧.

我明白,如果我有不同的公共方法,那么我可能不会在调用之间获得相同的bean,这会导致这种行为.但是,在这种情况下,唯一的调用是单个公共方法.容器(在这种情况下是Glassfish)是否仍会在私有方法调用之间交换bean?

(编辑)我将"类级别"重命名为"实例级别",因为这引起了一些混乱.

java glassfish stateless-session-bean java-ee

15
推荐指数
3
解决办法
2万
查看次数

标签 统计

java ×2

stateless-session-bean ×2

ejb ×1

glassfish ×1

java-ee ×1

pooling ×1