freemarker+webwork+ebj2+Hibernate3开发对象传递问题

07-05-23 weigbo
项目中用freemarker+webwork+ejb2.0+Hibernate3的开发架构。

主要流程是通过在webwork中调用ejb的SessionBean(remote方式).然后在ejb中调用dao操作hibernate.相当于用hibernate代替CMP.在开发过程中有个问题一直困扰我,希望各位给些意见。

ejb布署在weblogic9,ejb启动时就初始化好了所有东西,主要是一些通用的jar包和业务实现,包括hibernate的配置文件。web层(freemarker+webwork)是在tomcat5中开发和布署。

我是这样操作的,先在webwork的action中通过id取出要修改的对象dbProduct,然后把修改后的product(界面修改的)一一付值给dbProduct,最后调用sessionbean的modifyProduct(Product dbProduct)方法时经常会抛出一个这样原因的异常。

java.rmi.MarshalException: CORBA MARSHAL 0 No; nested exception is:

org.omg.CORBA.MARSHAL: vmcid: 0x0 minor code: 0 completed: No

at com.sun.corba.se.impl.javax.rmi.CORBA.Util.mapSystemException(Util.java:197)

at javax.rmi.CORBA.Util.mapSystemException(Util.java:67)

at com.dmx.cbill.spi._Product_Stub.modifyPackageProduct(Unknown Source)

at com.dmx.cbill.backoffice.product.ProductManagerAction.modifyPackage(ProductManagerAction.java:1000)

at com.dmx.cbill.backoffice.product.ProductManagerAction.execute(ProductManagerAction.java:211)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)

at sun.reflect.DelegatingMethodAccessorImpl.invoke

.....中间一大堆就删了,不是主要的信息。

Caused by: org.omg.CORBA.MARSHAL: vmcid: 0x0 minor code: 0 completed: No

at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)

at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)

at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)

at java.lang.reflect.Constructor.newInstance(Constructor.java:494)

at java.lang.Class.newInstance0(Class.java:350)

at java.lang.Class.newInstance(Class.java:303)

at com.sun.corba.se.impl.protocol.giopmsgheaders.MessageBase.getSystemException(MessageBase.java:897)

at com.sun.corba.se.impl.protocol.giopmsgheaders.ReplyMessage_1_2.getSystemException(ReplyMessage_1_2.java:99)

at com.sun.corba.se.impl.protocol.CorbaMessageMediatorImpl.getSystemExceptionReply(CorbaMessageMediatorImpl.java:572)

at com.sun.corba.se.impl.protocol.CorbaClientRequestDispatcherImpl.processResponse(CorbaClientRequestDispatcherImpl.java:430)

at com.sun.corba.se.impl.protocol.CorbaClientRequestDispatcherImpl.marshalingComplete(CorbaClientRequestDispatcherImpl.java:326)

at com.sun.corba.se.impl.protocol.CorbaClientDelegateImpl.invoke(CorbaClientDelegateImpl.java:129)

at org.omg.CORBA.portable.ObjectImpl._invoke(ObjectImpl.java:457)

... 73 more

2007-05-15 16:17:14 INFO EJBInitInterceptor:70 - EJBHome接口初始化状态:true

2007-05-15 16:17:14 INFO LoadResourceInterceptor:37 - LoadResourceInterceptor is beginning

2007-05-15 16:17:14 INFO LoadResourceInterceptor:58 - LoadResourceInterceptor is ended

我在ejb的modify...方法的第一行log信息,但weblogic没有打印任何东西。

后来在一位同事的帮助下,改了改。异常就不出现了。还是在action中调用sessionbean的modify方法,但这回直接传product(界面修改的)过去,然后在ejb的方法中再通过id取出要修改的对象dbProduct,然后把修改后的product一一付值给dbProduct,最后修改.

是不是因为两个容器(一个weblogic9,一个tomcat5.)的原因?也就是说tomcat通过ejb取出weblogic中hibernate session关联的对象再传回weblogic修改就不行了?

猜你喜欢