2011-08-19 20 views
1

當我們的應用程序啓動時,它似乎無法連接到websphere 6.1上的數據庫(使用JNDI)。SQL連接在websphere 6.1上不可用(spring/hibernate/oracle)

在hibernate初始化連接提供程序之前,日誌中沒有錯誤;它掛起180秒(我猜這是連接超時的數據源中設置),然後:

[2011-08-19 10:48:27,585] INFO [SoapConnectorThreadPool : 1] [o.h.c.ConnectionProviderFactory] Initializing connection provider: org.springframework.orm.hibernate3.LocalDataSourceConnectionProvider µ 
[2011-08-19 10:51:27,628] DEBUG [SoapConnectorThreadPool : 1] [o.h.util.JDBCExceptionReporter] SQL Exception com.ibm.websphere.ce.cm.ConnectionWaitTimeoutException: Connection not available, Timed out waiting for 180029 
      at com.ibm.ws.rsadapter.AdapterUtil.toSQLException(AdapterUtil.java:1362) ~[com.ibm.ws.runtime_6.1.0.jar:na] 
      at com.ibm.ws.rsadapter.jdbc.WSJdbcDataSource.getConnection(WSJdbcDataSource.java:462) ~[com.ibm.ws.runtime_6.1.0.jar:na] 
      at com.ibm.ws.rsadapter.jdbc.WSJdbcDataSource.getConnection(WSJdbcDataSource.java:418) ~[com.ibm.ws.runtime_6.1.0.jar:na] 
      at org.springframework.orm.hibernate3.LocalDataSourceConnectionProvider.getConnection(LocalDataSourceConnectionProvider.java:81) ~[spring-orm-3.0.5.RELEASE.jar:3.0.5.RELEASE] 
      at org.hibernate.cfg.SettingsFactory.buildSettings(SettingsFactory.java:113) [hibernate-core-3.6.5.Final.jar:3.6.5.Final] 
      at org.hibernate.cfg.Configuration.buildSettingsInternal(Configuration.java:2863) [hibernate-core-3.6.5.Final.jar:3.6.5.Final] 
      at org.hibernate.cfg.Configuration.buildSettings(Configuration.java:2859) [hibernate-core-3.6.5.Final.jar:3.6.5.Final] 
      at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1870) [hibernate-core-3.6.5.Final.jar:3.6.5.Final] 
      at org.springframework.orm.hibernate3.LocalSessionFactoryBean.newSessionFactory(LocalSessionFactoryBean.java:860) [spring-orm-3.0.5.RELEASE.jar:3.0.5.RELEASE] 
      at org.springframework.orm.hibernate3.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:779) [spring-orm-3.0.5.RELEASE.jar:3.0.5.RELEASE] 
      at org.springframework.orm.hibernate3.AbstractSessionFactoryBean.afterPropertiesSet(AbstractSessionFactoryBean.java:211) [spring-orm-3.0.5.RELEASE.jar:3.0.5.RELEASE] 
      at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1477) [spring-beans-3.0.5.RELEASE.jar:3.0.5.RELEASE] 
      at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1417) [spring-beans-3.0.5.RELEASE.jar:3.0.5.RELEASE] 
      at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519) [spring-beans-3.0.5.RELEASE.jar:3.0.5.RELEASE] 
      at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456) [spring-beans-3.0.5.RELEASE.jar:3.0.5.RELEASE] 
      at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:291) [spring-beans-3.0.5.RELEASE.jar:3.0.5.RELEASE] 
      at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) [spring-beans-3.0.5.RELEASE.jar:3.0.5.RELEASE] 
      at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:288) [spring-beans-3.0.5.RELEASE.jar:3.0.5.RELEASE] 
      at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:190) [spring-beans-3.0.5.RELEASE.jar:3.0.5.RELEASE] 
      at org.springframework.beans.factory.support.DefaultListableBeanFactory.findAutowireCandidates(DefaultListableBeanFactory.java:844) [spring-beans-3.0.5.RELEASE.jar:3.0.5.RELEASE] 
      at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:786) [spring-beans-3.0.5.RELEASE.jar:3.0.5.RELEASE] 
      at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:703) [spring-beans-3.0.5.RELEASE.jar:3.0.5.RELEASE] 
      at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:474) [spring-beans-3.0.5.RELEASE.jar:3.0.5.RELEASE] 
      at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:84) [spring-beans-3.0.5.RELEASE.jar:3.0.5.RELEASE] 
      at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:282) [spring-beans-3.0.5.RELEASE.jar:3.0.5.RELEASE] 
      at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1074) [spring-beans-3.0.5.RELEASE.jar:3.0.5.RELEASE] 
      at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:517) [spring-beans-3.0.5.RELEASE.jar:3.0.5.RELEASE] 
      at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456) [spring-beans-3.0.5.RELEASE.jar:3.0.5.RELEASE] 
      at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:291) [spring-beans-3.0.5.RELEASE.jar:3.0.5.RELEASE] 
      at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) [spring-beans-3.0.5.RELEASE.jar:3.0.5.RELEASE] 
      at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:288) [spring-beans-3.0.5.RELEASE.jar:3.0.5.RELEASE] 
      at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:190) [spring-beans-3.0.5.RELEASE.jar:3.0.5.RELEASE] : 

數據庫本身是好的,同一個應用程序(我們可以使用DB工具連接到它)有時在不改變任何代碼或配置的情況下工作。另外,在我們的本地WAS應用程序運行沒有問題,但在這裏我們確實使用了不同的預言器。

對這個問題的任何暗示或想法都是值得歡迎的。

UPDATE:
經過進一步調查,似乎上面的錯誤是因爲有在池中沒有其他的可用連接。我不知道我們的代碼是否存在問題(我期望Hibernate處理此問題)或配置問題,還是在websphere安裝程序中存在問題...

回答

2

解決

到底這是與池耗盡連接的問題;耳內的應用程序(戰爭)從其上下文中遺漏了Spring的<tx:annotation-driven ... />,因此每次調用數據庫都會創建一個新的連接。添加這個解決了這個問題。

1

在Websphere中,您可以在執行「test connection」設置數據源。那樣有用嗎? 也是類路徑上的ojdbc4.jar?在管理控制檯 - > jdbc提供程序中可見。並確保此項的參數是正確的(環境 - > WebSphere變量)

+0

Tx。 「測試連接」工作正常,ojdbc5.jar位於類路徑中。 –

+0

可能是完全愚蠢的,但你檢查了ojdbc.jar的版本是否與websphere正常工作?我聽說過ojdbc.jar和某些websphere fixpacks不匹配的故事。超時真的讓我覺得有一個jar衝突的地方,在這種情況下,Websphere一直是我的常見嫌疑犯,但也可能是hibernate/spring。 –

+0

@Jerry:這個jar很好,經過進一步調查,似乎池中沒有更多的連接可用,因爲連接永遠不會關閉。據我們所知,我們的代碼/配置沒問題,但我們會進一步研究。你可能現在這是一個websphere配置? –