日期:2014-05-19  浏览次数:20871 次

一个普通测试EJB stateless的问题,很迷惑不解,请高手解决!!感激不尽!!!
初学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,不一定是上次刚使用过的...
------解决方案--------------------
探讨

接口你加@Remote干啥

实现类里才加@Remote(StatelessEjb.class)

@Remote(StatelessEjb.class)
@Stateless

ps:拍脑袋学EJB么?