freemarker+webwork+ebj2+Hibernate3開發物件傳遞問題

weigbo發表於2007-05-23
專案中用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修改就不行了?

相關文章