首先贴出我的代码:
(这里为了节省空间,我省略了引入包)
●详细代码:
接口:
public interface StatelessEjb {
public void compute(int i);
public int getResult();
}
实现类:
@Stateless
@Remote
public class StatelessEjbBean implements StatelessEjb {
private int state;
@Override
public void compute(int i) {
state = state + i;
}
@Override
public int getResult() {
return state;
}
}
客户端:
public class StatelessEjbClient {
public static void main(String[] args) {
try {
InitialContext ctx = new InitialContext();
//第一次会话
StatelessEjb ejb1 = (StatelessEjb) ctx.lookup("StatelessEjbBean/remote");
System.out.println(ejb1.getResult());
ejb1.compute(1);
System.out.println(ejb1.getResult());
ejb1.compute(1);
System.out.println(ejb1.getResult());
ejb1.compute(1);
System.out.println(ejb1.getResult());
//第二次会话
StatelessEjb ejb2 = (StatelessEjb) ctx.lookup("StatelessEjbBean/remote");
System.out.println(ejb1.getResult());
ejb2.compute(1);
System.out.println(ejb1.getResult());
ejb2.compute(1);
System.out.println(ejb1.getResult());
ejb2.compute(1);
System.out.println(ejb1.getResult());
} catch (NamingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}●我的问题是:
我正确部署好以后,单步调试,可以输出结果:
0
1
2
3
3
4
5
6
但是直接运行的话输出的是不规则的结果:
0
0
0
0
1
2
1
1
这是什么原因?
着急ing~~~
(这里为了节省空间,我省略了引入包)
●详细代码:
接口:
public interface StatelessEjb {
public void compute(int i);
public int getResult();
}
实现类:
@Stateless
@Remote
public class StatelessEjbBean implements StatelessEjb {
private int state;
@Override
public void compute(int i) {
state = state + i;
}
@Override
public int getResult() {
return state;
}
}
客户端:
public class StatelessEjbClient {
public static void main(String[] args) {
try {
InitialContext ctx = new InitialContext();
//第一次会话
StatelessEjb ejb1 = (StatelessEjb) ctx.lookup("StatelessEjbBean/remote");
System.out.println(ejb1.getResult());
ejb1.compute(1);
System.out.println(ejb1.getResult());
ejb1.compute(1);
System.out.println(ejb1.getResult());
ejb1.compute(1);
System.out.println(ejb1.getResult());
//第二次会话
StatelessEjb ejb2 = (StatelessEjb) ctx.lookup("StatelessEjbBean/remote");
System.out.println(ejb1.getResult());
ejb2.compute(1);
System.out.println(ejb1.getResult());
ejb2.compute(1);
System.out.println(ejb1.getResult());
ejb2.compute(1);
System.out.println(ejb1.getResult());
} catch (NamingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}●我的问题是:
我正确部署好以后,单步调试,可以输出结果:
0
1
2
3
3
4
5
6
但是直接运行的话输出的是不规则的结果:
0
0
0
0
1
2
1
1
这是什么原因?
着急ing~~~
解决方案 »
- Struts2实现MVP模式!!!
- 救命,我要疯了
- 怎么解析webservcie 返回的 DocumentImpl
- spring 的jdbctemplate不支持getMoreResult吗?
- 面试考IQ干什么?
- 手机访问服务器的时候,服务器是如何判定是手机还是普通浏览器?
- 高分寻求一个类似csdn的blog的发表文章的样子做的文章发布页面(jsp)。
- 穷尽12个小时不能解决的问题,吐血求教!
- 急:请哪位兄台介绍几个可免费下载Java相关书籍的网址??
- spring mvc在bean注入中 使用URLClassLoader加载特点位置jar包出现NoClassDefFoundError,请大佬们帮帮忙
- struts2的拦截器如何获得post,get请求得内容
- unable to locate tools.jar
2 你不觉得你期望的结果,是有状态会话Bean的要求吗?原因:你的每个调用,服务器可能会随机分配一个Session Bean, 不一定是上次你刚使用过的。至于单步,我搞不懂,也许是每次你都很幸运,都拿到了你上次用过的那个。
首先贴出我的代码:
(这里为了节省空间,我省略了引入包)
●详细代码:
接口:
public interface StatelessEjb {
public void compute(int i);
public int getResult();
}
实现类:
@Stateless
@Remote
public class StatelessEjbBean implements StatelessEjb {
private int state;
@Override
public void compute(int i) {
state = state + i;
}
@Override
public int getResult() {
return state;
}
}
客户端:
public class StatelessEjbClient {
public static void main(String[] args) {
try {
InitialContext ctx = new InitialContext();
//第一次会话
StatelessEjb ejb1 = (StatelessEjb) ctx.lookup("StatelessEjbBean/remote");
System.out.println(ejb1.getResult());
ejb1.compute(1);
System.out.println(ejb1.getResult());
ejb1.compute(1);
System.out.println(ejb1.getResult());
ejb1.compute(1);
System.out.println(ejb1.getResult());
//第二次会话
//<上面的问题在这里有错误,应该是>System.out.println(ejb2.getResult())
StatelessEjb ejb2 = (StatelessEjb) ctx.lookup("StatelessEjbBean/remote");
System.out.println(ejb2.getResult());
ejb2.compute(1);
System.out.println(ejb2.getResult());
ejb2.compute(1);
System.out.println(ejb2.getResult());
ejb2.compute(1);
System.out.println(ejb2.getResult());
} catch (NamingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
●我的问题是:
我正确部署好以后,单步调试,可以输出结果:
0
1
2
3
3
4
5
6
但是直接运行的话输出的是不规则的结果:
0
0
0
0
1
2
1
1
这是什么原因?
着急ing~~~
谢谢1楼的回答,可是,我的session bean 是Stateless无状态的,
那我调用的ejb1和ejb2不是同一个嘛?
@Stateless
@Remote
public class StatelessEjbBean implements StatelessEjb { private int state = 0; public void compute(int i) {
state = state + i;
System.out.println("StatelessEjbBean: "+state);
} public int getResult() {
return this.state;
}}
public class StatelessTest extends Thread {
public String showName ="";
public StatelessTest(){
}
public StatelessTest(String name){
showName = name;
}
@Override
public void run() {
try{
InitialContext context = new InitialContext();
StatelessEjb ejb= (StatelessEjb) context.lookup("StatelessEjbBean/remote");
System.out.println(showName+" : "+ejb.getResult());
ejb.compute(1);
System.out.println(showName+" : "+ejb.getResult());
ejb.compute(1);
System.out.println(showName+" : "+ejb.getResult());
ejb.compute(1);
System.out.println(showName+" : "+ejb.getResult());
ejb.compute(1);
System.out.println(showName+" : "+ejb.getResult());
ejb.compute(1);
StatelessEjb ejb2= (StatelessEjb) context.lookup("StatelessEjbBean/remote");
System.out.println(showName+" : "+ejb2.getResult());
ejb2.compute(1);
System.out.println(showName+" : "+ejb2.getResult());
ejb2.compute(1);
System.out.println(showName+" : "+ejb2.getResult());
ejb2.compute(1);
System.out.println(showName+" : "+ejb2.getResult());
ejb2.compute(1);
System.out.println(showName+" : "+ejb2.getResult());
ejb2.compute(1);
} catch (Exception e) {
e.printStackTrace();
}
}
}
public class HelloWorldTest {
public static void main(String[] args) throws Exception {
StatelessTest st = new StatelessTest("ejb1");
st.start();
StatelessTest st2 = new StatelessTest("ejb2");
st2.start();
}
}得到蛋疼的结果
第一次:ejb1 : 0
ejb2 : 0
ejb1 : 0
ejb2 : 1
ejb2 : 1
ejb1 : 2
ejb2 : 2
ejb1 : 1
ejb1 : 2
ejb2 : 4
ejb2 : 2
ejb2 : 3
ejb2 : 4
ejb2 : 5
ejb2 : 6
ejb1 : 5
ejb1 : 5
ejb1 : 4
ejb1 : 8
ejb1 : 6
第二次:
ejb2 : 6
ejb1 : 9
ejb1 : 5
ejb2 : 10
ejb2 : 10
ejb1 : 6
ejb1 : 9
ejb2 : 11
ejb1 : 10
ejb2 : 12
ejb2 : 13
ejb1 : 11
ejb2 : 14
ejb1 : 11
ejb2 : 15
ejb1 : 12
ejb2 : 16
ejb1 : 8
ejb2 : 17
ejb1 : 12
JBOSS里面打印的是两次
18:20:54,980 INFO [STDOUT] StatelessEjbBean: 118:20:54,980 INFO [STDOUT] StatelessEjbBean: 118:20:54,995 INFO [STDOUT] StatelessEjbBean: 118:20:54,995 INFO [STDOUT] StatelessEjbBean: 218:20:55,012 INFO [STDOUT] StatelessEjbBean: 218:20:55,019 INFO [STDOUT] StatelessEjbBean: 318:20:55,038 INFO [STDOUT] StatelessEjbBean: 218:20:55,050 INFO [STDOUT] StatelessEjbBean: 318:20:55,064 INFO [STDOUT] StatelessEjbBean: 418:20:55,082 INFO [STDOUT] StatelessEjbBean: 518:20:55,169 INFO [STDOUT] StatelessEjbBean: 318:20:55,180 INFO [STDOUT] StatelessEjbBean: 418:20:55,190 INFO [STDOUT] StatelessEjbBean: 518:20:55,203 INFO [STDOUT] StatelessEjbBean: 618:20:55,213 INFO [STDOUT] StatelessEjbBean: 718:20:55,235 INFO [STDOUT] StatelessEjbBean: 418:20:55,263 INFO [STDOUT] StatelessEjbBean: 818:20:55,284 INFO [STDOUT] StatelessEjbBean: 618:20:55,342 INFO [STDOUT] StatelessEjbBean: 518:20:55,365 INFO [STDOUT] StatelessEjbBean: 918:21:15,758 INFO [STDOUT] StatelessEjbBean: 718:21:15,758 INFO [STDOUT] StatelessEjbBean: 1018:21:15,775 INFO [STDOUT] StatelessEjbBean: 618:21:15,777 INFO [STDOUT] StatelessEjbBean: 818:21:15,797 INFO [STDOUT] StatelessEjbBean: 918:21:15,799 INFO [STDOUT] StatelessEjbBean: 1118:21:15,809 INFO [STDOUT] StatelessEjbBean: 1018:21:15,811 INFO [STDOUT] StatelessEjbBean: 1218:21:15,823 INFO [STDOUT] StatelessEjbBean: 1118:21:15,826 INFO [STDOUT] StatelessEjbBean: 1318:21:15,872 INFO [STDOUT] StatelessEjbBean: 1418:21:15,885 INFO [STDOUT] StatelessEjbBean: 718:21:15,886 INFO [STDOUT] StatelessEjbBean: 1518:21:15,900 INFO [STDOUT] StatelessEjbBean: 1218:21:15,901 INFO [STDOUT] StatelessEjbBean: 1618:21:15,915 INFO [STDOUT] StatelessEjbBean: 818:21:15,918 INFO [STDOUT] StatelessEjbBean: 1718:21:15,942 INFO [STDOUT] StatelessEjbBean: 918:21:15,944 INFO [STDOUT] StatelessEjbBean: 1818:21:15,960 INFO [STDOUT] StatelessEjbBean: 19
各服务器之前也可能不同,反正Stateless只能执行以下获取服务器时间这种不需要缓存数据的纯业务或者计算的东西
反正刚刚接触EJB还是很美好的,没成想哎~~~
你到底有没有理解什么叫无状态BEAN 和 有状态BEAN啊 ?