Java 有状态会话bean,返回对象
我在glassfish上部署了一个有状态会话bean,并有一个名为Java 有状态会话bean,返回对象,java,jakarta-ee,ejb-3.0,Java,Jakarta Ee,Ejb 3.0,我在glassfish上部署了一个有状态会话bean,并有一个名为getCars的方法,该方法返回Car类的对象集合。Car类在bean项目和客户机项目中定义(实际上是同一个类)。我有一个客户机(不是应用程序客户机),在其中我获得了对bean远程接口的引用,如前所述。但我的当事人却有这样的例外 Exception in thread "main" javax.ejb.EJBException: java.rmi.MarshalException: CORBA BAD_PARAM 13304463
getCars
的方法,该方法返回Car
类的对象集合。Car类在bean项目和客户机项目中定义(实际上是同一个类)。我有一个客户机(不是应用程序客户机),在其中我获得了对bean远程接口的引用,如前所述。但我的当事人却有这样的例外
Exception in thread "main" javax.ejb.EJBException: java.rmi.MarshalException: CORBA BAD_PARAM 1330446342 Maybe; nested exception is:
java.io.NotSerializableException: ----------BEGIN server-side stack trace----------
org.omg.CORBA.BAD_PARAM: vmcid: OMG minor code: 6 completed: Maybe
at com.sun.corba.ee.impl.logging.OMGSystemException.notSerializable(OMGSystemException.java:990)
at com.sun.corba.ee.impl.logging.OMGSystemException.notSerializable(OMGSystemException.java:1005)
at com.sun.corba.ee.impl.orbutil.ORBUtility.throwNotSerializableForCorba(ORBUtility.java:753)
at com.sun.corba.ee.impl.encoding.CDROutputStream_1_0.write_abstract_interface(CDROutputStream_1_0.java:765)
at com.sun.corba.ee.impl.encoding.CDROutputObject.write_abstract_interface(CDROutputObject.java:709)
at com.sun.corba.ee.impl.javax.rmi.CORBA.Util.writeAbstractObject(Util.java:501)
at com.sun.corba.ee.impl.io.IIOPOutputStream.writeObjectOverride(IIOPOutputStream.java:197)
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:326)
at java.util.ArrayList.writeObject(ArrayList.java:570)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at com.sun.corba.ee.impl.io.IIOPOutputStream.invokeObjectWriter(IIOPOutputStream.java:760)
at com.sun.corba.ee.impl.io.IIOPOutputStream.outputObject(IIOPOutputStream.java:716)
at com.sun.corba.ee.impl.io.IIOPOutputStream.simpleWriteObject(IIOPOutputStream.java:227)
at com.sun.corba.ee.impl.io.ValueHandlerImpl.writeValueInternal(ValueHandlerImpl.java:268)
at com.sun.corba.ee.impl.io.ValueHandlerImpl.writeValueWithVersion(ValueHandlerImpl.java:240)
at com.sun.corba.ee.impl.io.ValueHandlerImpl.writeValue(ValueHandlerImpl.java:193)
at com.sun.corba.ee.impl.encoding.CDROutputStream_1_0.callWriteValue(CDROutputStream_1_0.java:932)
at com.sun.corba.ee.impl.encoding.CDROutputStream_1_0.writeRMIIIOPValueType(CDROutputStream_1_0.java:917)
at com.sun.corba.ee.impl.encoding.CDROutputStream_1_0.write_value(CDROutputStream_1_0.java:1044)
at com.sun.corba.ee.impl.encoding.CDROutputStream_1_0.write_value(CDROutputStream_1_0.java:1057)
at com.sun.corba.ee.impl.encoding.CDROutputStream_1_0.write_value(CDROutputStream_1_0.java:774)
at com.sun.corba.ee.impl.encoding.CDROutputObject.write_value(CDROutputObject.java:681)
at com.sun.corba.ee.impl.presentation.rmi.DynamicMethodMarshallerImpl$14.write(DynamicMethodMarshallerImpl.java:394)
at com.sun.corba.ee.impl.presentation.rmi.DynamicMethodMarshallerImpl.writeResult(DynamicMethodMarshallerImpl.java:490)
at com.sun.corba.ee.impl.presentation.rmi.ReflectiveTie._invoke(ReflectiveTie.java:180)
at com.sun.corba.ee.impl.protocol.CorbaServerRequestDispatcherImpl.dispatchToServant(CorbaServerRequestDispatcherImpl.java:682)
at com.sun.corba.ee.impl.protocol.CorbaServerRequestDispatcherImpl.dispatch(CorbaServerRequestDispatcherImpl.java:216)
at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.handleRequestRequest(CorbaMessageMediatorImpl.java:1841)
at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.handleRequest(CorbaMessageMediatorImpl.java:1695)
at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.handleInput(CorbaMessageMediatorImpl.java:1078)
at com.sun.corba.ee.impl.protocol.giopmsgheaders.RequestMessage_1_2.callback(RequestMessage_1_2.java:221)
at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.handleRequest(CorbaMessageMediatorImpl.java:797)
at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.dispatch(CorbaMessageMediatorImpl.java:561)
at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.doWork(CorbaMessageMediatorImpl.java:2558)
at com.sun.corba.ee.impl.orbutil.threadpool.ThreadPoolImpl$WorkerThread.performWork(ThreadPoolImpl.java:492)
at com.sun.corba.ee.impl.orbutil.threadpool.ThreadPoolImpl$WorkerThread.run(ThreadPoolImpl.java:528)
线程“main”javax.ejb.EJBException中的异常:java.rmi.marshallexception:CORBA BAD_PARAM 1330446342可能;嵌套异常是:
java.io.NotSerializableException:------------开始服务器端堆栈跟踪----------
org.omg.CORBA.BAD_参数:vmcid:omg次要代码:6已完成:可能
位于com.sun.corba.ee.impl.logging.OMGSystemException.notSerializable(OMGSystemException.java:990)
位于com.sun.corba.ee.impl.logging.OMGSystemException.notSerializable(OMGSystemException.java:1005)
位于com.sun.corba.ee.impl.orbutil.ORBUtility.throwNotSerializableForCorba(ORBUtility.java:753)
在com.sun.corba.ee.impl.encoding.CDROutputStream_1_0.write_abstract_接口(CDROutputStream_1_0.java:765)
在com.sun.corba.ee.impl.encoding.CDROutputObject.write_abstract_接口(CDROutputObject.java:709)
com.sun.corba.ee.impl.javax.rmi.corba.Util.WriteAstractObject(Util.java:501)
在com.sun.corba.ee.impl.io.iioOutputStream.writeObjectOverride(iioOutputStream.java:197)
位于java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:326)
位于java.util.ArrayList.writeObject(ArrayList.java:570)
在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处
位于sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)中
位于java.lang.reflect.Method.invoke(Method.java:597)
在com.sun.corba.ee.impl.io.iioOutputStream.invokeObjectWriter上(iioOutputStream.java:760)
在com.sun.corba.ee.impl.io.iioOutputStream.outputObject(iioOutputStream.java:716)上
在com.sun.corba.ee.impl.io.IIOPOutputStream.simpleWriteObject上(IIOPOutputStream.java:227)
位于com.sun.corba.ee.impl.io.ValueHandlerImpl.writeValueInternal(ValueHandlerImpl.java:268)
位于com.sun.corba.ee.impl.io.ValueHandlerImpl.writeValueWithVersion(ValueHandlerImpl.java:240)
位于com.sun.corba.ee.impl.io.ValueHandlerImpl.writeValue(ValueHandlerImpl.java:193)
在com.sun.corba.ee.impl.encoding.CDROutputStream_1_0.callWriteValue(CDROutputStream_1_0.java:932)
在com.sun.corba.ee.impl.encoding.CDROutputStream_1_0.writeRMIIIOPValueType(CDROutputStream_1_0.java:917)
位于com.sun.corba.ee.impl.encoding.CDROutputStream_1_0.write_value(CDROutputStream_1_0.java:1044)
位于com.sun.corba.ee.impl.encoding.CDROutputStream_1_0.write_value(CDROutputStream_1_0.java:1057)
位于com.sun.corba.ee.impl.encoding.CDROutputStream_1_0.write_value(CDROutputStream_1_0.java:774)
com.sun.corba.ee.impl.encoding.CDROutputObject.write_值(CDROutputObject.java:681)
在com.sun.corba.ee.impl.presentation.rmi.DynamicMethodMarshallerImpl$14.write上(DynamicMethodMarshallerImpl.java:394)
在com.sun.corba.ee.impl.presentation.rmi.DynamicMethodMarshallerImpl.writeResult上(DynamicMethodMarshallerImpl.java:490)
在com.sun.corba.ee.impl.presentation.rmi.ReflectVetie._调用(reflectVetie.java:180)
位于com.sun.corba.ee.impl.protocol.CorbaServerRequestDispatcherImpl.dispatchToServant(CorbaServerRequestDispatcherImpl.java:682)
位于com.sun.corba.ee.impl.protocol.CorbaServerRequestDispatcherImpl.dispatch(CorbaServerRequestDispatcherImpl.java:216)
位于com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.HandlerRequest(CorbaMessageMediatorImpl.java:1841)
位于com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.handleRequest(CorbaMessageMediatorImpl.java:1695)
位于com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.handleInput(CorbaMessageMediatorImpl.java:1078)
com.sun.corba.ee.impl.protocol.giopmsgheaders.RequestMessage_1_2.callback(RequestMessage_1_2.java:221)
位于com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.HandlerRequest(CorbaMessageMediatorImpl.java:797)
com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.dispatch(CorbaMessageMediatorImpl.java:561)
com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.doWork(CorbaMessageMediatorImpl.java:2558)
位于com.sun.corba.ee.impl.orbutil.threadpool.ThreadPoolImpl$WorkerThread.performWork(ThreadPoolImpl.java:492)
位于com.sun.corba.ee.impl.orbutil.threadpool.ThreadPoolImpl$WorkerThread.run(ThreadPoolImpl.java:528)
我认为问题在于Car类对象的编组。如何使用对象编组解决此问题?Car类必须实现
java.io.Serializable
,以便可以“在线”序列化和传输
还要确保
Car
类的所有字段都是可序列化的类型。例如,Car
可能有一个private Engine
字段<代码>引擎也必须可序列化。(或者标记为transient
,如果在序列化过程中忽略它)我已经将其序列化,但它再次抛出此异常。不,Car类有2个attr为int,1个为String,1个为java.sql.Date。它们都是可序列化的,然后确保已成功重新部署新版本。嗯,如果我的方法签名具有返回类型集合(集合不可序列化),但在方法getCars中,我创建ArrayList并返回它。它会导致这样的问题吗?所有集合都是可序列化的,这不是问题