我有一个无状态 session bean,其中包含一个公共(public)方法,几个私有(private)方法和一些实例级变量。下面是一个伪代码示例。
private int instanceLevelVar
public void methodA(int x) {
this.instanceLevelVar = x;
methodB();
}
private void methodB() {
System.out.println(instanceLevelVar);
}
我看到的是methodB正在打印未传递给MethodA的值。最好的说来,它是从同一bean的其他实例打印值。是什么原因造成的?
我应该指出代码在99.9%的时间内都能正常工作。但是,.01%对我造成了一些严重的问题/担忧。
我知道,如果我使用不同的公共(public)方法,则两次调用之间可能无法获得相同的bean,这将导致这种行为。但是,在这种情况下,唯一的调用是对单个public方法的调用。容器(在这种情况下为Glasfish)是否仍将在私有(private)方法调用之间交换Bean?
(编辑)我将“类级别”重命名为“实例级别”,因为这引起了一些困惑。
最佳答案
我完全不会在无状态 session bean中使用实例变量。无论您遇到问题的原因是什么,无论如何您可能都不希望这样做。只需尝试使用局部变量或在您从无状态 session bean业务方法调用的帮助器类中定义实例变量即可。