以下是我在初始化任何ejb对象时获得的异常。 任何人都可以告诉我们下面的例外是什么原因以及如何解决它?
是应用程序异常还是环境异常 ???
先谢谢......等待回复...
[7/12/10 5:05:24:226 EDT] 00000037 ExceptionUtil E CNTR0020E: EJB threw an unexpected (non-declared) exception during invoc
ation of method "init" on bean "BeanId(RDxEAR#vs-tle-beans-server.jar#VLSContextHome, C5E6CBE5-0129-4000-E000-C9DF093361B8)".
Exception data: java.rmi.RemoteException
at com.versata.tl.vls.ejb.VLSContextBean.init(VLSContextBean.java:298)
at com.versata.tl.vls.ejb.EJSRemoteStatefulVLSContextHome_acff79a1.init(Unknown Source)
at com.versata.tl.vls.ejb._EJSRemoteStatefulVLSContextHome_acff79a1_Tie.init(_EJSRemoteStatefulVLSContextHome_acff79a
1_Tie.java:2119)
at com.versata.tl.vls.ejb._EJSRemoteStatefulVLSContextHome_acff79a1_Tie._invoke(_EJSRemoteStatefulVLSContextHome_acff
79a1_Tie.java:395)
at com.ibm.CORBA.iiop.ServerDelegate.dispatchInvokeHandler(ServerDelegate.java:621)
at com.ibm.CORBA.iiop.ServerDelegate.dispatch(ServerDelegate.java:474)
at com.ibm.rmi.iiop.ORB.process(ORB.java:503)
at com.ibm.CORBA.iiop.ORB.process(ORB.java:1571)
at com.ibm.rmi.iiop.Connection.respondTo(Connection.java:2703)
at com.ibm.rmi.iiop.Connection.doWork(Connection.java:2577)
at com.ibm.rmi.iiop.WorkUnitImpl.doWork(WorkUnitImpl.java:62)
at com.ibm.ejs.oa.pool.PooledThread.run(ThreadPool.java:118)
at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1473)
[7/12/10 5:05:24:231 EDT] 00000037 LocalTranCoor E WLTC0017E: Resources rolled back due to setRollbackOnly() being called.
答案 0 :(得分:0)
看起来'由'引起'的信息不存在,但是在堆栈跟踪的一部分看来,与EJBHome.create()方法对应的Stateful bean的@Init方法抛出了RuntimeException。 “资源回滚”消息可能不是问题的原因,而只是承载它的容器,它是在运行时异常后清理的工作。
要做的第一件事是: 1.使用捕获并记录RuntimeException的东西包围init()方法的主体,以便您可以查看问题的真正来源,或更好... 2.将异常日志记录放入拦截器中,以便将来可以轻松地在任何其他bean上重用它。
如果确实找到了RuntimeException并确定它是一个异常,那么你可以在没有事务回滚或者你的bean实例被销毁的情况下进行抛出,你可以在异常类上使用@ApplicationException注释将它变成一个安全的异常投掷。如果它是内置异常,您可以在ejb-jar.xml文件中标记它。但请注意,这会影响异常类型的所有用法,因此请务必小心,避免执行java.lang.RuntimeException等操作。最好标记RuntimeException的非常具体的子类,以避免在意外异常后完全禁用容器清理的能力。