关于sessionbean开发购物车的错误,(在线等)

panda00 2004-06-07 05:18:47
1.要传递的对象的基类:(product)

package music_javabean;

import java.io.*;

/**
* <p>Title: </p>
* <p>Description: </p>
* <p>Copyright: Copyright (c) 2004</p>
* <p>Company: </p>
* @author not attributable
* @version 1.0
*/

public class product implements Serializable{

private String product_id;
private java.math.BigDecimal product_price;
private int product_amout;
public product() {
}
public String getProduct_id() {
return product_id;
}
public void setProduct_id(String product_id) {
this.product_id = product_id;
}
public java.math.BigDecimal getProduct_price() {
return product_price;
}
public void setProduct_price(java.math.BigDecimal product_price) {
this.product_price = product_price;
}
public int getProduct_amout() {
return product_amout;
}
public void setProduct_amout(int product_amout) {
this.product_amout = product_amout;
}
private void writeObject(ObjectOutputStream oos) throws IOException {
oos.defaultWriteObject();
}
private void readObject(ObjectInputStream ois) throws ClassNotFoundException, IOException {
ois.defaultReadObject();
}
}


************************************************
2.传递前的网页中的核心代码:(生成要传递的对象)
<
注:
rs_product.getString("product_id"),

rs_product.getBigDecimal("price")均为从数据库中取出的数据,这里没有出错
>
<%
//生成新的产品信息,供客户查看和购买

new_product=new product();

new_product.setProduct_id(rs_product.getString("product_id"));

new_product.setProduct_amout(1);
new_product.setProduct_price(rs_product.getBigDecimal("price"));
//将产品对象放到session中,然后在下一个网页中可以取出
session.setAttribute("new_product",new_product);
%>
*****************************************************
3.从上一网页得到对象的代码:
<%
product new_product=new product();
new_product=(product)session.getAttribute("new_product");
//得到sessionbean的对象
Handle cart_handle=(Handle)session.getAttribute("cart_handle");
Cart_session cart_session=(Cart_session)javax.rmi..PortableRemoteObject.narrow(cart_handle.getEJBObject(),Cart_session.class);
cart_session.add_product(product);//就是这一句出错了

%>



*******************************************************
4.出错信息:

系统提示的是没有正确的反序列化,这点我很迷惑,请高手指教,我看过简单的购物车,他们做的时候物品信息只有一项,所以直接添加就可以了,但是我的这个物品(product)做成了一个类,所以添加时就提示不能反序列化!
<2004-6-7 下午15时26分56秒 CST> <Error> <HTTP> <BEA-101020> <[ServletContext(id=
12188848,name=music,context-path=/music)] Servlet failed with Exception
java.io.InvalidClassException: music_javabean.product; class invalid for deseria
lization
at java.io.ObjectStreamClass.initNonProxy(ObjectStreamClass.java:483)
at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:152
1)
at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1435)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1
626)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1274)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:324)
at weblogic.rmi.internal.CBVInputStream.readObjectInternal(CBVInputStrea
m.java:67)
at weblogic.rmi.internal.CBVInputStream.readObject(CBVInputStream.java:6
1)
at weblogic.rmi.internal.ServerRequest.copy(ServerRequest.java:241)
at weblogic.rmi.internal.ServerRequest.sendReceive(ServerRequest.java:15
8)
at weblogic.rmi.internal.BasicRemoteRef.invoke(BasicRemoteRef.java:138)
at music_online.Cart_session_4nck8y_EOImpl_811_WLStub.add_product(Unknow
n Source)
at jsp_servlet.__add_product._jspService(__add_product.java:171)
at weblogic.servlet.jsp.JspBase.service(JspBase.java:33)
at weblogic.servlet.internal.ServletStubImpl$ServletInvocationAction.run
(ServletStubImpl.java:1053)
at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubIm
pl.java:387)
at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubIm
pl.java:431)
at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubIm
pl.java:305)
at weblogic.servlet.internal.WebAppServletContext$ServletInvocationActio
n.run(WebAppServletContext.java:6310)
at weblogic.security.acl.internal.AuthenticatedSubject.doAs(Authenticate
dSubject.java:317)
at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:
118)
at weblogic.servlet.internal.WebAppServletContext.invokeServlet(WebAppSe
rvletContext.java:3622)
at weblogic.servlet.internal.ServletRequestImpl.execute(ServletRequestIm
pl.java:2569)
at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:197)
at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:170)
--------------- nested within: ------------------
weblogic.rmi.extensions.RemoteRuntimeException: Unexpected Exception - with nest
ed exception:
[java.io.InvalidClassException: music_javabean.product; class invalid for deseri
alization]
at music_online.Cart_session_4nck8y_EOImpl_811_WLStub.add_product(Unknow
n Source)
at jsp_servlet.__add_product._jspService(__add_product.java:171)
at weblogic.servlet.jsp.JspBase.service(JspBase.java:33)
at weblogic.servlet.internal.ServletStubImpl$ServletInvocationAction.run
(ServletStubImpl.java:1053)
at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubIm
pl.java:387)
at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubIm
pl.java:431)
at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubIm
pl.java:305)
at weblogic.servlet.internal.WebAppServletContext$ServletInvocationActio
n.run(WebAppServletContext.java:6310)
at weblogic.security.acl.internal.AuthenticatedSubject.doAs(Authenticate
dSubject.java:317)
at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:
118)
at weblogic.servlet.internal.WebAppServletContext.invokeServlet(WebAppSe
rvletContext.java:3622)
at weblogic.servlet.internal.ServletRequestImpl.execute(ServletRequestIm
pl.java:2569)
at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:197)
at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:170)
>
...全文
243 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
panda00 2004-06-13
  • 打赏
  • 举报
回复
问题发出去很久了,还是没有解决,大家给个面子
panda00 2004-06-10
  • 打赏
  • 举报
回复
给我回答啊,着急
panda00 2004-06-09
  • 打赏
  • 举报
回复
还是没有解决,期待中
panda00 2004-06-09
  • 打赏
  • 举报
回复
我说同志们啊,帮帮我啊
panda00 2004-06-09
  • 打赏
  • 举报
回复
怎么还是没有解决的啊?人多力量大嘛,各位多给点意见啊!
davidbeckham23 2004-06-09
  • 打赏
  • 举报
回复
大家怎么了,关注一下嘛,你看这位兄弟着急的,呼吁大伙都来看
hq1305018 2004-06-08
  • 打赏
  • 举报
回复

cart_session.add_product(product);这句是不是应该是这样:

cart_session.add_product(new_product);
panda00 2004-06-08
  • 打赏
  • 举报
回复
我去掉过,还是不行啊,其实那个product类传递到页面并没有出错,甚至我还打印出了信息,主要就是在添加到cart_session中时出的错误,不知道怎么解决!
hq1305018 2004-06-08
  • 打赏
  • 举报
回复
你试试把product类的
private void writeObject(ObjectOutputStream oos) throws IOException {
oos.defaultWriteObject();
}
private void readObject(ObjectInputStream ois) throws ClassNotFoundException, IOException {
ois.defaultReadObject();
}
这两个方法去掉试试。
panda00 2004-06-08
  • 打赏
  • 举报
回复
FlyPig1983(飞天猪) :我看过你以前发的帖子,我跟你做的不太一样,我是直接在jsp页面里调用的sessionbean,我把整个购物车就做成了一个sessionbean,这样在用户点击购买的时候就可以一一对应了,方便起见我把sessionbean的实现部分也拿上来吧,给我解决一下啊,万分感谢!

代码如下:
package music_online;

import javax.ejb.SessionBean;
import javax.ejb.SessionContext;
import javax.ejb.CreateException;
import java.util.Vector;
import music_javabean.product;

public class Cart_sessionBean
implements SessionBean {
SessionContext sessionContext;
String user_id;
Vector product_list=new Vector();


public void ejbCreate(String userid) throws CreateException {
this.user_id=userid;
}

public void ejbRemove() {
}

public void ejbActivate() {
}

public void ejbPassivate() {
}

public void setSessionContext(SessionContext sessionContext) {
this.sessionContext = sessionContext;
}







public Vector getProduct_list() {
return product_list;
}

public String getUser_id() {
return user_id;
}

public boolean add_product(product one) {
if(product_list.contains(one))
return false;
product_list.addElement(one);
if(product_list.contains(one))
return true;
else
return false;
}

public boolean delete_product(product one) {
if(product_list.contains(one))
{
product_list.removeElement(one);
return true;
}
else
return false;
}

public void make_form() {
}

public void clear_cart() {
}

}
FlyPig1983 2004-06-08
  • 打赏
  • 举报
回复
你的add_product方法怎么弄得?
panda00 2004-06-08
  • 打赏
  • 举报
回复
我很着急啊,怎么没有人回答啊?郁闷,谁要是解决了,我把我自己所有的分都给他!!!!!!!!!!!!!!!!!
panda00 2004-06-08
  • 打赏
  • 举报
回复
To goober88(花生):我都试过N次了,还是不行啊,还有没有别的方法啊?一定要用sessionbean做啊,要不就不是ejb的了,我的课题就是ejb啊,大家多关照啊
goober88 2004-06-08
  • 打赏
  • 举报
回复
试着把你的工程整体编译一遍,然后重新部署,再看看
panda00 2004-06-08
  • 打赏
  • 举报
回复
我顶,再顶!
panda00 2004-06-08
  • 打赏
  • 举报
回复
着急啊,自己顶
panda00 2004-06-08
  • 打赏
  • 举报
回复
之前我试过传递字符串,可以的。但是变为自己定义的类对象就不可以了,出错信息就是上面的那个了,(是反序列化失败)。我不能只用字符串的,因为我还得保存很多信息啊,包括产品名,产品数量、价格等等,所以我就自己定义了一个实现了序列化的类。
至于用调用Handle的方法来取,是因为每个用户都有自己的购物车(cart_session),所以要维护它的状态就得保证得到的是用户自己的那个购物车,别的方法我不知道,还请明示啊,楼上所说的传统方式调用是指用cart_sessionhome的find方法查找,然后调用吗?但是我不能每次调用的时候都生成一个新的会话bean吧?
SoccerLight 2004-06-08
  • 打赏
  • 举报
回复
我想问一下,贴主为什么在这里得Handle来调用
Cart_session cart_session=(Cart_session)javax.rmi..PortableRemoteObject.narrow(cart_handle.getEJBObject(),Cart_session.class);

用传统方式调可以吗?
flyingWithJava 2004-06-08
  • 打赏
  • 举报
回复
学习中
SoccerLight 2004-06-08
  • 打赏
  • 举报
回复
你先改成传一个字符串变量试试。
加载更多回复(2)

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧