SettingsFactory.java中的NullPointerException:159-Hibernate3、Oracle10g、Websphere6.1

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)

我正在WebSphereApplicationServer6.1中使用Hibernate3。 我正在使用JNDI连接到我的数据源。我在管理控制台中检查了连接,连接成功。但当我在服务器上部署我的项目并使用JNDI连接到数据源时,我得到了下面的错误消息

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>