NotSerializableException in EJB

Status
Nicht offen für weitere Antworten.

AlexSolo

Mitglied
Hallo,

ich programmiere mit NetBeans 4.1 und Sun Applications Server 8.1 eine J2EE Client-Server Anwendung. Als Datenbank verwende ich MySQL 4.1. Im Moment, wann der Client über SessionBean ein EntityBean-Object bekommen will, bekomme ich die folgende Fehlermeldung:

[#|2005-05-27T14:42:31.942+0200|WARNING|sun-appserver-pe8.1|javax.enterprise.resource.corba._CORBA_.util|_ThreadID=43;|"IOP00100006: (BAD_PARAM) Class com.sun.ejb.containers.EJBLocalObjectInvocationHandler is not Serializable"
org.omg.CORBA.BAD_PARAM: vmcid: OMG minor code: 6 completed: Maybe
at com.sun.corba.ee.impl.logging.OMGSystemException.notSerializable(OMGSystemException.java:989)
at com.sun.corba.ee.impl.logging.OMGSystemException.notSerializable(OMGSystemException.java:1004)
at com.sun.corba.ee.impl.orbutil.ORBUtility.throwNotSerializableForCorba(ORBUtility.java:718)
at com.sun.corba.ee.impl.encoding.CDROutputStream_1_0.write_abstract_interface(CDROutputStream_1_0.java:652)
at com.sun.corba.ee.impl.encoding.CDROutputStream.write_abstract_interface(CDROutputStream.java:259)
at com.sun.corba.ee.impl.javax.rmi.CORBA.Util.writeAbstractObject(Util.java:462)
at javax.rmi.CORBA.Util.writeAbstractObject(Util.java:129)
at com.sun.corba.ee.impl.io.IIOPOutputStream.writeObjectField(IIOPOutputStream.java:724)
at com.sun.corba.ee.impl.io.IIOPOutputStream.outputClassFields(IIOPOutputStream.java:790)
at com.sun.corba.ee.impl.io.IIOPOutputStream.defaultWriteObjectDelegate(IIOPOutputStream.java:204)
at com.sun.corba.ee.impl.io.IIOPOutputStream.outputObject(IIOPOutputStream.java:573)
at com.sun.corba.ee.impl.io.IIOPOutputStream.simpleWriteObject(IIOPOutputStream.java:159)
at com.sun.corba.ee.impl.io.ValueHandlerImpl.writeValueInternal(ValueHandlerImpl.java:225)
at com.sun.corba.ee.impl.io.ValueHandlerImpl.writeValueWithVersion(ValueHandlerImpl.java:207)
at com.sun.corba.ee.impl.io.ValueHandlerImpl.writeValue(ValueHandlerImpl.java:147)
at com.sun.corba.ee.impl.encoding.CDROutputStream_1_0.writeRMIIIOPValueType(CDROutputStream_1_0.java:801)
at com.sun.corba.ee.impl.encoding.CDROutputStream_1_0.write_value(CDROutputStream_1_0.java:850)
at com.sun.corba.ee.impl.encoding.CDROutputStream_1_0.write_value(CDROutputStream_1_0.java:864)
at com.sun.corba.ee.impl.encoding.CDROutputStream.write_value(CDROutputStream.java:242)
at com.sun.corba.ee.impl.copyobject.ORBStreamObjectCopierImpl.copy(ORBStreamObjectCopierImpl.java:39)
at com.sun.corba.ee.impl.copyobject.FallbackObjectCopierImpl.copy(FallbackObjectCopierImpl.java:34)
at com.sun.corba.ee.impl.javax.rmi.CORBA.Util.copyObject(Util.java:718)
at javax.rmi.CORBA.Util.copyObject(Util.java:314)
at com.sun.corba.ee.impl.presentation.rmi.DynamicMethodMarshallerImpl.copyResult(DynamicMethodMarshallerImpl.java:414)
at com.sun.corba.ee.impl.presentation.rmi.StubInvocationHandlerImpl.invoke(StubInvocationHandlerImpl.java:169)
at com.sun.corba.ee.impl.presentation.rmi.bcel.BCELStubBase.invoke(Unknown Source)
at wts.ejb._EmployeeHistoryFacadeRemote_DynamicStub.ejbGetObject(_EmployeeHistoryFacadeRemote_DynamicStub.java)
at wts.web.EmployeeHistoryMethods.getEmployeeHistory(EmployeeHistoryMethods.java:40)
at wts.web.WTS_Login.processRequest(WTS_Login.java:49)
at wts.web.WTS_Login.doPost(WTS_Login.java:108)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:767)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:860)
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:324)
at org.apache.catalina.security.SecurityUtil$1.run(SecurityUtil.java:249)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAsPrivileged(Subject.java:500)
at org.apache.catalina.security.SecurityUtil.execute(SecurityUtil.java:282)
at org.apache.catalina.security.SecurityUtil.doAsPrivilege(SecurityUtil.java:165)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:257)
at org.apache.catalina.core.ApplicationFilterChain.access$000(ApplicationFilterChain.java:55)
at org.apache.catalina.core.ApplicationFilterChain$1.run(ApplicationFilterChain.java:161)
at java.security.AccessController.doPrivileged(Native Method)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:263)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:551)
at org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:225)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:173)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:551)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:161)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:551)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:132)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:551)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:933)
at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:184)
at com.sun.enterprise.web.connector.grizzly.ProcessorTask.process(ProcessorTask.java:653)
at com.sun.enterprise.web.connector.grizzly.ProcessorTask.process(ProcessorTask.java:534)
at com.sun.enterprise.web.connector.grizzly.ProcessorTask.doTask(ProcessorTask.java:403)
at com.sun.enterprise.web.connector.grizzly.WorkerThread.run(WorkerThread.java:55)

Wenn der Client einen EntityBean-Attribut bekommen will, funktioniert es einwandfrei.

Wer kann mir helfen?

Danke im voraus.
 

Bleiglanz

Gesperrter Benutzer
ein client kann nicht "über eine Session an eine EJB" kommen

entweder er holt sich das Home der EJB selber (wenn diese ein Remote Home hat!)

oder von der Session Bean ein Value Object?!

willst du etwa ein EJBHandle oder die gefundene Referenz von der SessionBean an den Client zurückgeben?!!

Merke: ALLE PARAMETER UND RÜCKGABEWERTE MÜSSEN SERIALISIERBAR SEIN ODER ....(nochn paar andere erlaubt)

zeig mal den code
 

AlexSolo

Mitglied
Ich möchte ein Beispiel schreiben:

1.
//
// NotSerializableException
//
public EmployeeLocal getEmployeeByUUID(String uuid ) {
EmployeeLocal employee = EmployeeLocalHome.findByPrimaryKey(uuid);
return employee;
}


2.
//
// Geht in Ordnung
//
public String getEmployeeFirstNameByUUID(String uuid) {
EmployeeLocal employee = EmployeeLocalHome.findByPrimaryKey(uuid);
return employee.getFirstName();
}
 

Bleiglanz

Gesperrter Benutzer
ist dein client zufällig ein Remote Client???

der String ist natürlich serialisierbar und kann ohne probleme übers netz geschickt werden.

aber ein lokales Interface auf keinen Fall, ist doch nur eine Referenz auf etwas anderes

mach entweder den Employee selber Remote (indem du ihm ein RemoteInterface und ein RemoteHome verpasst) oder schick dem Client ein ValueObject

wobei letzteres aus verschiedenen gründen besser ist
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen

Ähnliche Java Themen

Neue Themen


Oben