SettingsFactory.java中的NullPointerException:159-Hibernate3、Oracle10g、Websphere6.1
我正在WebSphereApplicationServer6.1中使用Hibernate3。 我正在使用JNDI连接到我的数据源。我在管理控制台中检查了连接,连接成功。但当我在服务器上部署我的项目并使用JNDI连接到数据源时,我得到了下面的错误消息SettingsFactory.java中的NullPointerException:159-Hibernate3、Oracle10g、Websphere6.1,hibernate,oracle10g,websphere-6.1,Hibernate,Oracle10g,Websphere 6.1,我正在WebSphereApplicationServer6.1中使用Hibernate3。 我正在使用JNDI连接到我的数据源。我在管理控制台中检查了连接,连接成功。但当我在服务器上部署我的项目并使用JNDI连接到数据源时,我得到了下面的错误消息 Caused by: java.lang.NullPointerException at org.hibernate.cfg.SettingsFactory.buildSettings(SettingsFactory.java:159)
Caused by: java.lang.NullPointerException
at org.hibernate.cfg.SettingsFactory.buildSettings(SettingsFactory.java:159)
at org.hibernate.cfg.Configuration.buildSettingsInternal(Configuration.java:2163)
at org.hibernate.cfg.Configuration.buildSettings(Configuration.java:2159)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1383)
at org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:954)
它显示原因:null
我使用Oracle10g数据库
我在日志中看到了更多的异常。这与这个问题有关吗
00000027 RegisteredRes E WTRN0078E: An attempt by the transaction manager to call start on a transactional resource has resulted in an error. The error code was XAER_RMERR. The exception stack trace follows: oracle.jdbc.xa.OracleXAException
at oracle.jdbc.xa.OracleXAResource.checkError(OracleXAResource.java:1157)
at oracle.jdbc.xa.client.OracleXAResource.start(OracleXAResource.java:295)
at com.ibm.ws.rsadapter.spi.WSRdbXaResourceImpl.start(WSRdbXaResourceImpl.java:1324)
at com.ibm.ejs.j2c.XATransactionWrapper.start(XATransactionWrapper.java:1467)
at com.ibm.ws.Transaction.JTA.JTAResourceBase.start(JTAResourceBase.java:141)
at com.ibm.ws.Transaction.JTA.RegisteredResources.startRes(RegisteredResources.java:1103)
at com.ibm.ws.Transaction.JTA.RegisteredResources.enlistResource(RegisteredResources.java:525)
at com.ibm.ws.Transaction.JTA.TransactionImpl.enlistResource(TransactionImpl.java:3219)
at com.ibm.ws.Transaction.JTA.TranManagerSet.enlist(TranManagerSet.java:396)
at com.ibm.ejs.j2c.XATransactionWrapper.enlist(XATransactionWrapper.java:693)
at com.ibm.ejs.j2c.ConnectionManager.lazyEnlist(ConnectionManager.java:1723)
at com.ibm.ws.rsadapter.spi.WSRdbManagedConnectionImpl.lazyEnlist(WSRdbManagedConnectionImpl.java:2109)
at com.ibm.ws.rsadapter.jdbc.WSJdbcConnection.beginTransactionIfNecessary(WSJdbcConnection.java:600)
at com.ibm.ws.rsadapter.jdbc.WSJdbcConnection.getMetaData(WSJdbcConnection.java:1533)
at org.hibernate.cfg.SettingsFactory.buildSettings(SettingsFactory.java:116)
at org.hibernate.cfg.Configuration.buildSettingsInternal(Configuration.java:2163)
at org.hibernate.cfg.Configuration.buildSettings(Configuration.java:2159)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1383)
at org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:954)
另一个例外是
00000027 XATransaction E J2CA0030E: Method enlist caught javax.transaction.SystemException: XAResource start association error:XAER_RMERR
at com.ibm.ws.Transaction.JTA.RegisteredResources.startRes(RegisteredResources.java:1154)
at com.ibm.ws.Transaction.JTA.RegisteredResources.enlistResource(RegisteredResources.java:525)
at com.ibm.ws.Transaction.JTA.TransactionImpl.enlistResource(TransactionImpl.java:3219)
at com.ibm.ws.Transaction.JTA.TranManagerSet.enlist(TranManagerSet.java:396)
at com.ibm.ejs.j2c.XATransactionWrapper.enlist(XATransactionWrapper.java:693)
at com.ibm.ejs.j2c.ConnectionManager.lazyEnlist(ConnectionManager.java:1723)
at com.ibm.ws.rsadapter.spi.WSRdbManagedConnectionImpl.lazyEnlist(WSRdbManagedConnectionImpl.java:2109)
at com.ibm.ws.rsadapter.jdbc.WSJdbcConnection.beginTransactionIfNecessary(WSJdbcConnection.java:600)
at com.ibm.ws.rsadapter.jdbc.WSJdbcConnection.getMetaData(WSJdbcConnection.java:1533)
at org.hibernate.cfg.SettingsFactory.buildSettings(SettingsFactory.java:116)
at org.hibernate.cfg.Configuration.buildSettingsInternal(Configuration.java:2163)
at org.hibernate.cfg.Configuration.buildSettings(Configuration.java:2159)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1383)
at org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:954)
Caused by: oracle.jdbc.xa.OracleXAException
at oracle.jdbc.xa.OracleXAResource.checkError(OracleXAResource.java:1157)
at oracle.jdbc.xa.client.OracleXAResource.start(OracleXAResource.java:295)
at com.ibm.ws.rsadapter.spi.WSRdbXaResourceImpl.start(WSRdbXaResourceImpl.java:1324)
at com.ibm.ejs.j2c.XATransactionWrapper.start(XATransactionWrapper.java:1467)
at com.ibm.ws.Transaction.JTA.JTAResourceBase.start(JTAResourceBase.java:141)
at com.ibm.ws.Transaction.JTA.RegisteredResources.startRes(RegisteredResources.java:1103)
while trying to enlist resources from datasource jdbc/OracleData with the Transaction Manager for the current transaction, and threw a ResourceException.
下面是我的hibernate配置文件:
<hibernate-configuration>
<session-factory>
<property name="dialect">
org.hibernate.dialect.Oracle10gDialect
</property>
<property name="hibernate.transaction.factory_class">
org.hibernate.transaction.JTATransactionFactory
</property>
<property name="hibernate.transaction.manager_lookup_class">
xxx.xxx.xxx.WebSphereExtendedJTATransactionLookup
</property>
<property name="jta.UserTransaction">
java:comp/UserTransaction
</property>
</session-factory>
</hibernate-configuration>
不幸的是,如果不看一下您的配置文件,我不能说太多,但我会尝试一下。此错误似乎是应用程序和JNDI池之间的连接配置有问题
- 确保部署描述符(web.xml)包含JNDI连接的配置,例如:
<resource-ref> <description>Your New DataSource</description> <res-ref-name>jdbc/mysqlblogpostdataref</res-ref-name> <res-type>javax.sql.DataSource</res-type> <res-auth>Container</res-auth> </resource-ref>
您的新数据源 jdbc/mysqlblogpostdataref javax.sql.DataSource 容器
- 并在hibernate.cfg(假设您没有使用Spring)上查找配置问题,下面是另一个例子:
线
假的
java:comp/env/jdbc/mysqlblogpostdataref
真的
org.hibernate.dialogue.mysqldialogue
另外,请确保在这里引用的context.xml文件中验证配置
其他示例的来源:
编辑
根据您的更新,我可以做一些研究,看看我发现了什么:
(发件人:)
错误是事务管理器无法将事务转换为XA事务。具体来说,Oracle返回了一个错误XAER_RMERR,错误代码为65535。ORA-65535不是有效的错误代码,Xaerrmerr本质上意味着XA出了问题。这表明您的Oracle数据库未配置为支持XA事务。因此,当websphereapplicationserver事务管理器指示Oracle事务管理器参与这个XA事务时,Oracle无法遵守并抛出这个异常
另外,请确保在使用WS时查看context.xml和web.xml文件,我以前忘记了配置这些文件。Hi,我正确地给出了数据源jndi名称。当我给出hibernate.cfg文件本身的所有配置(如数据库服务器url、用户名、密码)时,同样的项目也可以工作。但是当我对jndi做同样的事情时,它失败了。我想在MQ和oracle数据库之间使用websphere全局事务(XA)。我在日志中看到了更多的异常。我已经在问题中更新了它们。请看一看。
<resource-ref>
<description>Your New DataSource</description>
<res-ref-name>jdbc/mysqlblogpostdataref</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
<property name="current_session_context_class">thread</property>
<property name="hibernate.bytecode.use_reflection_optimizer">false</property>
<property name="hibernate.connection.datasource">java:comp/env/jdbc/mysqlblogpostdataref</property>
<property name="show_sql">true</property>
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>