Java WebLogic-通过JNDI的JDBC数据源导致从WebLogic.JDBC.rm.SerialConnection.prepareStatement(字符串)返回null PreparedStatement
你好,谢谢你的帮助 我正在使用Weblogic 10.3.0.0,其JDBC数据源配置为使用oracle.JDBC.OracleDriver中的精简驱动程序。驱动程序库是ojdbc6.jar,驱动程序版本是11.1.0.6.0-Production。在我的本地客户端上,我使用的是11.2.0.3.0版本,但我也尝试了与服务器相同的版本,但没有效果 问题的症状以两种NullPointerException的形式出现:Java WebLogic-通过JNDI的JDBC数据源导致从WebLogic.JDBC.rm.SerialConnection.prepareStatement(字符串)返回null PreparedStatement,java,oracle,jdbc,weblogic,datasource,Java,Oracle,Jdbc,Weblogic,Datasource,你好,谢谢你的帮助 我正在使用Weblogic 10.3.0.0,其JDBC数据源配置为使用oracle.JDBC.OracleDriver中的精简驱动程序。驱动程序库是ojdbc6.jar,驱动程序版本是11.1.0.6.0-Production。在我的本地客户端上,我使用的是11.2.0.3.0版本,但我也尝试了与服务器相同的版本,但没有效果 问题的症状以两种NullPointerException的形式出现: java.lang.NullPointerException at weblog
java.lang.NullPointerException
at weblogic.utils.wrapper.WrapperFactory.getCachedWrapperClass(WrapperFactory.java:44)
at weblogic.utils.wrapper.WrapperFactory.getWrapperClass(WrapperFactory.java:195)
at weblogic.utils.wrapper.WrapperFactory.getWrapperClass(WrapperFactory.java:183)
at weblogic.utils.wrapper.WrapperFactory.createWrapper(WrapperFactory.java:168)
at weblogic.jdbc.wrapper.JDBCWrapperFactory.getWrapper(JDBCWrapperFactory.java:186)
at weblogic.jdbc.rmi.internal.PreparedStatementStub.readResolve(PreparedStatementStub.java:48)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at java.io.ObjectStreamClass.invokeReadResolve(ObjectStreamClass.java:1104)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1805)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1348)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:370)
at weblogic.utils.io.ChunkedObjectInputStream.readObject(ChunkedObjectInputStream.java:197)
at weblogic.rjvm.MsgAbbrevInputStream.readObject(MsgAbbrevInputStream.java:564)
at weblogic.utils.io.ChunkedObjectInputStream.readObject(ChunkedObjectInputStream.java:193)
at weblogic.rmi.internal.ObjectIO.readObject(ObjectIO.java:62)
at weblogic.rjvm.ResponseImpl.unmarshalReturn(ResponseImpl.java:240)
at weblogic.rmi.internal.BasicRemoteRef.invoke(BasicRemoteRef.java:223)
at weblogic.jdbc.rmi.internal.ConnectionImpl_weblogic_jdbc_wrapper_PoolConnection_oracle_jdbc_driver_T4CConnection_1030_WLStub.prepareStatement(Unknown Source)
at weblogic.jdbc.rmi.SerialConnection.prepareStatement(SerialConnection.java:228)
at org.hibernate.jdbc.AbstractBatcher.getPreparedStatement(AbstractBatcher.java:534)
at org.hibernate.jdbc.AbstractBatcher.getPreparedStatement(AbstractBatcher.java:452)
at org.hibernate.jdbc.AbstractBatcher.prepareQueryStatement(AbstractBatcher.java:161)
at org.hibernate.loader.Loader.prepareQueryStatement(Loader.java:1573)
at org.hibernate.loader.Loader.doQuery(Loader.java:696)
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:259)
at org.hibernate.loader.Loader.doList(Loader.java:2228)
at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2125)
at org.hibernate.loader.Loader.list(Loader.java:2120)
at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:401)
at org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:361)
at org.hibernate.engine.query.HQLQueryPlan.performList(HQLQueryPlan.java:196)
at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1148)
at org.hibernate.impl.QueryImpl.list(QueryImpl.java:102)
at org.hibernate.ejb.QueryImpl.getResultList(QueryImpl.java:67)
及
在weblogic.jdbc.rmi.SerialConnection.prepareStatement之前,我已经完成了所有工作,因为该源代码不是公共的。问题似乎是,这将返回一个null PreparedStatement,然后将其传递给引发NPE的两个方法
数据源被声明为Spring bean URL,为了安全起见,凭据已被删除:
<bean id="datasource" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName">
<value>jdbc/DS</value>
</property>
<property name="resourceRef">
<value>true</value>
</property>
<property name="jndiEnvironment">
<props>
<prop key="java.naming.factory.initial">weblogic.jndi.WLInitialContextFactory</prop>
<prop key="java.naming.provider.url">t3://000.00.00.000:15031/</prop>
<prop key="java.naming.security.principal">principal</prop>
<prop key="java.naming.security.credentials">credentials</prop>
</props>
</property>
</bean>
我还在本地运行的WebLogic实例的JNDI树中设置了相同的精确数据源,该数据源运行良好,没有异常。请务必注意,我的本地WebLogic版本是10.3.2:
<bean id="datasource" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName">
<value>jdbc/DS</value>
</property>
<property name="resourceRef">
<value>true</value>
</property>
<property name="jndiEnvironment">
<props>
<prop key="java.naming.factory.initial">weblogic.jndi.WLInitialContextFactory</prop>
<prop key="java.naming.provider.url">t3://localhost:7001/</prop>
<prop key="java.naming.security.principal">principal</prop>
<prop key="java.naming.security.credentials">credentials</prop>
</props>
</property>
</bean>
最后,通过在Springbean中直接声明数据源而不引用JNDI,我还使它工作得很好:
<bean id="datasource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="oracle.jdbc.OracleDriver" />
<property name="username" value="username" />
<property name="password" value="password" />
<property name="url" value="jdbc:oracle:thin:@username.com.com:1530:service_name" />
</bean>
非常感谢您的帮助,如有必要,我非常乐意提供更多细节。谢谢你抽出时间 我通过Junit代码面临同样的问题。你还记得你是否能够解决这个问题吗?6年前?提前谢谢。
<bean id="datasource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="oracle.jdbc.OracleDriver" />
<property name="username" value="username" />
<property name="password" value="password" />
<property name="url" value="jdbc:oracle:thin:@username.com.com:1530:service_name" />
</bean>