●用一个jsp显示所有图书的目录,如果客户在图书点击加入“购物蓝”jsp就调用远端的(stateful)session bean,如果再向“购物蓝”放入另一 提示:两次调用时,根本就不是一个bean,而是两个不同的bean。你最好用用一个序列化的类包装你这个stateful session,并且增加一个属性javax.ejb.Handle,通过这个javax.ejb.Handle来获取这个session.具体实现方法我就不说了!!! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 zmj1977(浪子) ------------很可能不是同一个bean实例,但是却不该丢失会话的状态信息啊,ejbPassivate()和ejbActivate()不就是干这个的吗? 要保证两次调用使用的是同一个stateful session bean,你就需要把stateful session bean的handle保存下来,比如保存到session里面,然后下次使用的时候用这个handle得到SSB的remote接口.以你的例子为例:Handle handle = mycart.getHandle();session.setAttribute("cart",handle);取出来的时候就是:Handle handle = (Handle)session.getAttribute("cart");Object obj = handle.getRemoteObject();mycart = PortableRemoteObject.narrow(obj,mycart.class); zmj1977(浪子):西 兄的:“提示:两次调用时,根本就不是一个bean,而是两个不同的bean。你最好用用一个序列化的类包装你这个stateful session”??????如何用一个序列化的类包装这个stateful session呢?????? 能否给个例子,分不够可以在发帖! 谢谢! 谢谢各位!!!!! 如定义一个Helper类包装stateful session://使用Local与LocalHome接口public class MyCartClientHelper implements java.io.Serializable { private mycart cart = null; public MyCartClientHelper () { try { InitialContext ic = new InitialContext(); Object o = ic.lookup("mycart"); mycartHome home =(mycartHome)o; cart = home.create(); } catch (javax.ejb.CreateException cx) { throw new RuntimeException("Failed to Create CartClientHelper: caught " + cx); } catch (javax.naming.NamingException nx) { throw new RuntimeException("Failed to Create CartClientHelper: caught " + nx); } } /** * Return a collection of CartItems */ public Collection getItems() { return cart.getItems(java.util.Locale.getDefault()); } public HashMap getDetails() { return cart.getDetails(); } public void deleteItem(String itemId) { cart.deleteItem(itemId); } public void addItem(String itemId) { cart.addItem(itemId); } public void addItem(String itemId, int quantity) { cart.addItem(itemId, quantity); } public void empty() { cart.empty(); }} 用statefull session bean有没有考虑过性能?如果你的网站同时有几千个上万个用户在访问的话,考虑过吗?建议还是将客户信息存放在session中,调用stateless session bean。随意说说,如果不对,请不必在意。 同上,用个ArrayList相似的类包装一下,放入session。这样很简单就完成购物车的操作了。 如客户在图书点击加入“购物蓝”,就先判断是否存在session,如无则建立,有加入新增if(session.getAttribute("cart")==null){//不存在 MyCartClientHelper my=new MyCartClientHelper(); my.addItem(itemId); session.setAttribute("cart",my);}else{//存在 my=(MyCartClientHelper)session.getAttribute("cart"); my.addItem(itemId); session.setAttribute("cart",my);} DWR如何自动生成util.js engine.js 工作了 都常用哪些类? struts2日期类型转换问题 liferay权限问题 JS提交表单的问题! 请问下request.getSession()和encodeUrl()的问题。 在UNIX下不同用户之间的文件访问!! 一个简单的EJB问题 这样的错误是怎么回事?急,是不是好jboss配置不正确 idea用maven创建项目报错Unable to import maven project: See logs for details 请教高手,hibernate初始化问题 关于struts的问题,在网上下载了原码。。。。。。
------------
很可能不是同一个bean实例,但是却不该丢失会话的状态信息啊,ejbPassivate()和ejbActivate()不就是干这个的吗?
以你的例子为例:
Handle handle = mycart.getHandle();
session.setAttribute("cart",handle);
取出来的时候就是:
Handle handle = (Handle)session.getAttribute("cart");
Object obj = handle.getRemoteObject();
mycart = PortableRemoteObject.narrow(obj,mycart.class);
能否给个例子,分不够可以在发帖!
谢谢!
谢谢各位!!!!!
public class MyCartClientHelper implements java.io.Serializable { private mycart cart = null; public MyCartClientHelper () {
try {
InitialContext ic = new InitialContext();
Object o = ic.lookup("mycart");
mycartHome home =(mycartHome)o;
cart = home.create();
} catch (javax.ejb.CreateException cx) {
throw new RuntimeException("Failed to Create CartClientHelper: caught " + cx);
} catch (javax.naming.NamingException nx) {
throw new RuntimeException("Failed to Create CartClientHelper: caught " + nx);
}
} /**
* Return a collection of CartItems
*/
public Collection getItems() {
return cart.getItems(java.util.Locale.getDefault());
} public HashMap getDetails() {
return cart.getDetails();
} public void deleteItem(String itemId) {
cart.deleteItem(itemId);
} public void addItem(String itemId) {
cart.addItem(itemId);
} public void addItem(String itemId, int quantity) {
cart.addItem(itemId, quantity);
} public void empty() {
cart.empty();
}
}
是否存在session,如无则建立,有加入新增
if(session.getAttribute("cart")==null){//不存在
MyCartClientHelper my=new MyCartClientHelper();
my.addItem(itemId);
session.setAttribute("cart",my);
}else{//存在
my=(MyCartClientHelper)session.getAttribute("cart");
my.addItem(itemId);
session.setAttribute("cart",my);
}