[size=large]大家好,我是EJB新手,之前一直用Struts 1做Web开发。现在想学习EJB,但是遇到了一些问题。在Struts的Action中,调用无状态会话Bean正常。但是调用有状态会话Bean时出现了一些问题,描述如下:
使用action_1调用一个有状态会话Bean,把前台传过来的一些参数存入有状态会话Bean的变量中,这时一切正常。然后转向一个页面,但是在紧接着使用action_2调用相同的有状态会话Bean时,发现之前存的那些变量值为空了。按照有状态会话Bean的定义,它应该维护会话状态啊,也就是在其生命周期内,我的客户端之前存储的那些变量应该都在同一个Bean中啊,我在两个Action中并没有调用Remove方法。
另外,我不知道现在的学习方向在哪里,是用EJB3呢,还是用Spring+Hibernate,还望老手指点迷津,谢谢![/size]
[color=indigo]一般用session这种会话机制处理已经很普遍了啊
如果怕占用服务器资源 不是可以设定超时时间么
http://topic.csdn.net/t/20051110/14/4384688.html
其实就个人而言 的确session有缺点 但是用了这么久 到现在还是感觉它的这种处理机制还是很方便的。我们现在用C/S的 还是沿用这种session会话机制,只是我们自己实现的,不是web的。呵呵[/color]
你仔细检查一下呀!Bean是不是中断来了!
对象的状态由实例变量的值描述。对于有状态会话Bean,实例变量描述了客户程序与Bean的会话的状态。鉴于客户程序与Bean的交互关系,Bean的状态信息通常称为会话状态。
在客户程序与Bean交互期间,状态信息一直有效。如果客户程序运行结束或拆除了Bean,则会话结束,状态信息也不再保留。然而,状态信息的这种临时性并不成为问题,因为当客户程序与Bean之间的会话终止,状态信息也就没有必要再。、
现在项目用得多的是Spring+Hibernate
ejb3比较少,
[color=indigo]Spring+Hibernate用的人多,而且研究深入的比较多,EJB3的确很好,但是在JAVAEYE上用的人比较少 我个人觉得 还是先用Spring+Hibernate 等用明白了 再弄EJB3 自然而然你就会用了 呵呵 加油[/color]
[color=indigo]如果bean有状态了 还被action共享 个人感觉应该会有问题的 你也可以用过某种标识来标识 是action1或者是action2来调用这个bean的。
比如说用个标识位 当action1调用的时候走哪个逻辑
Test{
void a(String s,int flag);
if(flag = 0){
//dosomething
}else{
//dosomething
}
}
在action调用的时候传入标识参数
因为我对ejb了解有限,这只是我自己的见解 希望对你有帮助[/color]
[color=indigo]spring和struts结合其实就是相当于把struts在spring容器里进行了托管,进行统一的管理,但是真正进行浏览器会话的时候,还是用到的是session,也就是你以前用的那么种维护session的方式。[/color]