EJB:为什么我在JNDI查找中遇到这个错误?
问题描述:
InitialContext ctx = new InitialContext();
StatelessInterogareRemote beanStatelessRemote = (StatelessInterogareRemote) ctx
.lookup("java:global/ShopEAP/ShopEJB/StatelessInterogare!shop.StatelessInterogareRemote");
StatefulShopCartLocal beanStateful = (StatefulShopCartLocal) ctx
.lookup("java:global/ShopEAP/ShopEJB/StatefulShopCart!shop.StatefulShopCartLocal");
当我运行应用程序,第二查询后出现的错误:EJB:为什么我在JNDI查找中遇到这个错误?
[[[ Error ]]]: Lookup failed for 'java:global/ShopEAP/ShopEJB/StatelessInterogare' in SerialContext
INFO: [Ljava.lang.StackTraceElement;@89708c
WARNING: "IOP00100006: (BAD_PARAM) Class com.sun.ejb.containers.EJBLocalObjectInvocationHandlerDelegate 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: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)
...
答
嗯,它看起来像之一:
- 实施
StatelessInterogareRemote
类是不可序列或 - 接口
StatelessInterogareRemote
中的某些方法具有(递归)参数或不可序列化的返回类型
只是要清楚:一个可序列化的对象是一个实现了Serializable
接口;和递归地我的意思是说对象,它的属性,它的属性的属性等等,它们都必须是可序列化的。
由于您指出EJB是无状态的,因此应该清楚它不得有属性,但以防万一:EJB中的所有属性也必须是可序列化的,或者在它们不能被序列化。
似乎序列化是问题。有一个Statefull bean和2个属性:private transient HashMap qty; si私有ArrayList 产品;该类实现了Serializable,但仍然无法工作。 –
Emanuel
检查ProdusDTO是否可序列化,并且其属性是否可序列化等 –
@Oscar:WHy是否实现了StatelessInterogareRemote a.k.a EJB bean需要可序列化? – Victor