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修改就不行了?