gpt4 book ai didi

java - hibernate 时的空指针开始事务

转载 作者:搜寻专家 更新时间:2023-10-31 20:23:45 34 4
gpt4 key购买 nike

我正在使用带连接池数据源的 hibernate

<bean id="dataSource" class="oracle.jdbc.pool.OracleDataSource"  destroy-method="close">
<property name="connectionCachingEnabled" value="true" />
<property name="URL">
<value>${jdbc.url}</value>
</property>
<property name="user">
<value>${jdbc.username}</value>
</property>
<property name="password">
<value>${jdbc.password}</value>
</property>
<property name="connectionCacheProperties">
<value>
MinLimit:10
MaxLimit:75
InitialLimit:10
ConnectionWaitTimeout:120
InactivityTimeout:180
ValidateConnection:true
MaxStatementsLimit:0
</value>
</property>
</bean>



<bean id="hibernatePropertyConfigurer"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location" value="hibernate.properties"/>
</bean>

<!-- Database Property -->
<bean id="hibernatePropertiesPearl"
class="org.springframework.beans.factory.config.PropertiesFactoryBean">
<property name="properties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.Oracle9Dialect</prop>
<prop key="hibernate.cache.provider_class">MyCacheProvider</prop>
<prop key="hibernate.show_sql">false</prop>
<prop key="hibernate.max_fetch_depth">0</prop>
<prop key="hibernate.jdbc.batch_size">0</prop>
<prop key="hibernate.cache.use_query_cache">true</prop>
<prop key="hibernate.query.factory_class">org.hibernate.hql.classic.ClassicQueryTranslatorFactory
</prop>
<prop key="hibernate.connection.autocommit">false</prop>
<prop key="hibernate.transaction.manager_lookup_class">
org.hibernate.transaction.JBossTransactionManagerLookup
</prop>
<prop key="hibernate.transaction.factory_class">org.hibernate.transaction.JDBCTransactionFactory</prop>
<prop key="hibernate.transaction.auto_close_session">false</prop>
</props>
</property>
</bean>

我可以看到,连接已在数据库中成功打开并且工作正常,但过了一会儿我在日志中收到以下错误消息并且服务器刚刚死机:

 21:48:20,700 ERROR [RentalAgreementServlet] Generic exception occurred
java.lang.NullPointerException
at org.hibernate.transaction.JDBCTransaction.begin(JDBCTransaction.java:85)
at org.hibernate.impl.SessionImpl.beginTransaction(SessionImpl.java:1354)
at HibernateUtil.currentSession(HibernateUtil.java:116)

数据库中的连接数似乎没问题。最大值为 75,但实际上它永远不会超过 20。部署在 JBOSS 4.2 中的应用程序。当空指针异常发生时,内存似乎也没有问题。在我看来,有什么东西在泄漏,但我不知道是什么。连接池是否有可能认为它有 75 个 session 并尝试增加它 - 同时数据库服务器只有 20 个连接?

我无法在开发环境中复制它。我试图终止/断开 session ,断开网络连接。我得到了不同的异常,但没有空指针异常。任何人都可以提示我要调查的重点是什么吗?

最佳答案

看起来您正在 JTA 环境中使用 org.hibernate.transaction.JDBCTransactionFactory

也许你需要org.hibernate.transaction.JTATransactionFactory:

<prop key="hibernate.transaction.factory_class">
org.hibernate.transaction.JTATransactionFactory
</prop>

关于java - hibernate 时的空指针开始事务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4368368/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com