初学EJB 。用一个普通的测试stateless状态的EJb,运行结果千奇百怪,很是迷惑,用的jboss版本是5.0GA。测试stateful的时候没有一点问题。。将生成的jar包删除重新部署还是同样问题,每次重启jboss结果都不一样,有时候正常,但运行几次后结果就出现0 。。。请高手解决!!!
接口类:
package com.ejb;
import javax.ejb.Remote;
@Remote
public interface StatelessEjb {
public void computer(int i);
public int getResult();
}
实现类:
package com.ejb;
import javax.ejb.Stateless;
@Stateless
public class StatelessEjbBean implements StatelessEjb {
private int state;
public void computer(int i) {
state =state+i;
}
public int getResult() {
return state;
}
}
测试类:Java project:
package com.ejb;
import javax.naming.InitialContext;
public class StatelessEjbClient {
public static void main(String[] args) throws Exception {
InitialContext context=new InitialContext();
StatelessEjb ejb1=(StatelessEjb)context.lookup("StatelessEjbBean/remote");
System.out.println(ejb1.getResult());
ejb1.computer(1);
System.out.println(ejb1.getResult());
ejb1.computer(1);
System.out.println(ejb1.getResult());
ejb1.computer(1);
System.out.println(ejb1.getResult());
ejb1.computer(1);
System.out.println(ejb1.getResult());
ejb1.computer(1);
System.out.println(ejb1.getResult());
StatelessEjb ejb2=(StatelessEjb)context.lookup("StatelessEjbBean/remote");
System.out.println(ejb2.getResult());
ejb2.computer(1);
System.out.println(ejb2.getResult());
ejb2.computer(1);
System.out.println(ejb2.getResult());
ejb2.computer(1);
System.out.println(ejb2.getResult());
ejb2.computer(1);
System.out.println(ejb2.getResult());
ejb2.computer(1);
System.out.println(ejb2.getResult());
}
}
运行结果:0 0 0 0 0 0 ……
重启jboss后有时候运行结果正确,有时候是0 1 2 3 0 0 0 0 0或0 1 2 3 4 5 5 5 5 5 ,各种结果都有。很迷惑,,,statefull状态时没有什么问题,求高手解决!!!
------解决方案--------------------
这是正常的啊~~因为你用的会话是无状态的啊!不说性能,其实这就是无状态和有状态会话的区别~无状态的每次调用都会从会话池中随机拿出一个Session Bean,不一定是上次刚使用过的...
------解决方案--------------------