今天遇到一个很奇怪的问题:在Eclipse3.3.1版本中出现的WebLogic服务器构件路径问题。百思不得其解,呵呵!http://www.javaeye.com/post/388849页面中也提到了这个问题。将其记录下来,防止再出现这个问题,不知道如何解决。
使用WebLogic9.1版本,在建立JNDI数据源后MySqlDataSource,然后查询获取数据库连接的时候出现了以下异常信息:
Exception in thread "main" weblogic.rmi.extensions.RemoteRuntimeException: Unexpected Exception
at weblogic.jdbc.common.internal.RmiDataSource_910_WLStub.getConnection(Unknown Source)
at org.sang.virtual.JDBCPoolDemo.main(JDBCPoolDemo.java:34)
Caused by: weblogic.rjvm.PeerGoneException: ; nested exception is:
weblogic.utils.NestedException: java.lang.NoClassDefFoundError: com/bea/xml/XmlException
at weblogic.rjvm.ResponseImpl.unmarshalReturn(ResponseImpl.java:191)
at weblogic.rmi.cluster.ClusterableRemoteRef.invoke(ClusterableRemoteRef.java:315)
at weblogic.rmi.cluster.ClusterableRemoteRef.invoke(ClusterableRemoteRef.java:250)
... 2 more
Caused by: weblogic.utils.NestedException: java.lang.NoClassDefFoundError: com/bea/xml/XmlException
at weblogic.rjvm.RJVMImpl.gotExceptionReceiving(RJVMImpl.java:897)
at weblogic.rjvm.ConnectionManager.gotExceptionReceiving(ConnectionManager.java:1001)
at weblogic.rjvm.MsgAbbrevJVMConnection.gotExceptionReceiving(MsgAbbrevJVMConnection.java:441)
at weblogic.rjvm.t3.MuxableSocketT3.hasException(MuxableSocketT3.java:367)
at weblogic.socket.SocketMuxer.deliverExceptionAndCleanup(SocketMuxer.java:734)
at weblogic.socket.SocketMuxer.deliverHasException(SocketMuxer.java:687)
at weblogic.socket.JavaSocketMuxer.processSockets(JavaSocketMuxer.java:307)
at weblogic.socket.SocketReaderRequest.run(SocketReaderRequest.java:29)
at weblogic.work.ExecuteRequestAdapter.execute(ExecuteRequestAdapter.java:21)
at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:145)
at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:117)
Caused by: java.lang.NoClassDefFoundError: com/bea/xml/XmlException
at weblogic.diagnostics.instrumentation.InstrumentationLibrary.loadInstrumentationEngineConfiguration(InstrumentationLibrary.java:119)
at weblogic.diagnostics.instrumentation.InstrumentationLibrary.getInstrumentationLibrary(InstrumentationLibrary.java:96)
at weblogic.diagnostics.instrumentation.InstrumentationManager.getAvailableMonitors(InstrumentationManager.java:248)
at weblogic.diagnostics.instrumentation.InstrumentationManager.<init>(InstrumentationManager.java:105)
at weblogic.diagnostics.instrumentation.InstrumentationManager.getInstrumentationManager(InstrumentationManager.java:121)
at weblogic.diagnostics.instrumentation.InstrumentationSupport.getMonitor(InstrumentationSupport.java:44)
at weblogic.jdbc.rmi.SerialConnection.<clinit>(SerialConnection.java)
at sun.misc.Unsafe.ensureClassInitialized(Native Method)
at sun.reflect.UnsafeFieldAccessorFactory.newFieldAccessor(Unknown Source)
at sun.reflect.ReflectionFactory.newFieldAccessor(Unknown Source)
at java.lang.reflect.Field.acquireFieldAccessor(Unknown Source)
at java.lang.reflect.Field.getFieldAccessor(Unknown Source)
at java.lang.reflect.Field.getLong(Unknown Source)
at java.io.ObjectStreamClass.getDeclaredSUID(Unknown Source)
at java.io.ObjectStreamClass.access$700(Unknown Source)
at java.io.ObjectStreamClass$2.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.io.ObjectStreamClass.<init>(Unknown Source)
at java.io.ObjectStreamClass.lookup(Unknown Source)
at java.io.ObjectStreamClass.initNonProxy(Unknown Source)
at java.io.ObjectInputStream.readNonProxyDesc(Unknown Source)
at java.io.ObjectInputStream.readClassDesc(Unknown Source)
at java.io.ObjectInputStream.readObject0(Unknown Source)
at java.io.ObjectInputStream.readObject(Unknown Source)
at weblogic.rjvm.ClassTableEntry.readExternal(ClassTableEntry.java:36)
at java.io.ObjectInputStream.readExternalData(Unknown Source)
at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
at java.io.ObjectInputStream.readObject0(Unknown Source)
at java.io.ObjectInputStream.readObject(Unknown Source)
at weblogic.rjvm.InboundMsgAbbrev.readObject(InboundMsgAbbrev.java:65)
at weblogic.rjvm.InboundMsgAbbrev.read(InboundMsgAbbrev.java:37)
at weblogic.rjvm.MsgAbbrevJVMConnection.readMsgAbbrevs(MsgAbbrevJVMConnection.java:214)
at weblogic.rjvm.MsgAbbrevInputStream.init(MsgAbbrevInputStream.java:169)
at weblogic.rjvm.MsgAbbrevJVMConnection.dispatch(MsgAbbrevJVMConnection.java:424)
at weblogic.rjvm.t3.MuxableSocketT3.dispatch(MuxableSocketT3.java:362)
at weblogic.socket.AbstractMuxableSocket.dispatch(AbstractMuxableSocket.java:359)
at weblogic.socket.SocketMuxer.readReadySocketOnce(SocketMuxer.java:851)
at weblogic.socket.SocketMuxer.readReadySocket(SocketMuxer.java:787)
at weblogic.socket.JavaSocketMuxer.processSockets(JavaSocketMuxer.java:283)
... 4 more
问题的关键之处在于:你是通过何种方式添加的weblogic.jar?
1. 如果直接将weblogic.jar复制到项目下,再将其添加到构建路径下,这样是不行,会出现上述异常信息。
2. 如果是建立用户库的方式也是不行的,结果同上。
3. 只有直接通过添加外部JAR包的方式将C:\BEA\weblogic91\server\lib路径下的weblogic.jar添加到构建路径下,才会避免出现异常。
4. 如果是weblogic.jar包复制到其他目录下,再通过3的方式添加到构建路径下的话,也是不行的。
以前一直认为项目所使用的JAR包,以何种方式来添加,效果都是一样的,现在才发现出了问题!不过我还是觉得,以何种方式添加效果都是一样的。但是为什么会出现这种情况,我想可能是Eclipse3.31中weblogic9.1的定义配置文件固有BUG,也可能是weblogic9.1服务器自身的问题。