Nullpointer при переходе в спящий режим - PullRequest
5 голосов
/ 06 декабря 2010

Я использую 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. Память, кажется, также в порядке, когда происходит исключение nullpointer. Мне кажется, что что-то протекает, но я не знаю что. Возможно ли, что пул соединений думает, что у него 75 сеансов, и пытается увеличить его - в то же время сервер БД имеет только 20 соединений?

Я не смог воспроизвести его в среде разработки. Я пытался убить / отключить сеансы, разорвать сетевые подключения. У меня есть разные исключения, но нет нулевого исключения. Может ли кто-нибудь дать мне подсказку, что расследовать, на чем сосредоточиться?

Ответы [ 2 ]

2 голосов
/ 06 декабря 2010

Похоже, вы используете org.hibernate.transaction.JDBCTransactionFactory в среде JTA.

Возможно, вам нужно org.hibernate.transaction.JTATransactionFactory:

<prop key="hibernate.transaction.factory_class">
    org.hibernate.transaction.JTATransactionFactory
</prop>
1 голос
/ 10 декабря 2010

Проблема заключалась в том, что была часть кода, где закрытие сеанса не было в блоке finally. Если программа выдает ошибку гибернации, сеанс остается открытым.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...