2010-12-06 27 views
5

başlamak bağlantı havuza veri kaynağıNullpointer Birlikte hazırda bekleme kullanıyorum işlem

<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> 

Görebildiğim

, bağlantıları veritabanında başarıyla açılır ve bu ok çalışıyor olduğunu ancak Bir süre sonra, aşağıdaki hata iletisini günlüklerde alıyorum ve sunucu sadece ölüyor:

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) 

Veritabanı içindeki bağlantı sayısı doğru görünüyor. Maksimum 75, ama neredeyse hiç bitmez 20. JBOSS 4.2'de uygulanan uygulama. Nullpointer yürütme gerçekleştiğinde bellek de tamam gibi görünüyor. Sanki bir şey sızıyor, ama ne olduğunu bilmiyorum. Bağlantı havuzunun 75 seans olduğunu ve bunu artırmaya çalıştığını düşünüyoruz - aynı zamanda db sunucusunda sadece 20 bağlantı var mı?

Bunu geliştirme ortamında çoğaltmadım. Oturumları öldürmeyi/kesmeyi, ağ bağlantılarını kesmeyi denedim. Farklı istisnalar aldım, ama nullpointerexception yok. Herkes, nelere odaklanacağımı araştırmam için bana bir ipucu verebilir mi?

+0

@Boris Pavlović - Bence yorumunuz yorumunuzu anlamsız kılıyor mu? :) – willcodejavaforfood

+0

Boris - referansı kaldırsa bile, yorumda firmanın adını tekrar ettiniz! – CodeClimber

+0

Teşekkürler. Referansı kaldırdım – HamoriZ

cevap

1

sorun seans kapanış nihayet engellemek değildi kod parçası olduğunu oldu. Program hazırda bekleme hatası veriyorsa, oturum açık bırakıldı.

2

JTA ortamında org.hibernate.transaction.JDBCTransactionFactory kullanıyorsunuz.

Belki org.hibernate.transaction.JTATransactionFactory gerekir:

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

Bu, JBOSS ortamında dağıtılan eski bir uygulamadır, ancak bir web sunucusu olarak kullanılır, böylece oturumda/işlem açma/kapama uygulamada uygulanır. – HamoriZ

+0

@Zoltan: O zaman neden hibernate.transaction.manager_lookup_class' öğesine ihtiyacınız var, JTA'ya özgü bir özellik. – axtavt

+0

Sadece eski bir parça - JTA ile bazı deneyler vardı, ama hiçbir yerde kullanılmıyor. Bu kaldırılabilir. – HamoriZ

İlgili konular