2015-10-28 27 views
1

我對我的一個會話bean有問題,這可能是因爲我對EntityManagers缺乏瞭解。我正在使用JBoss EAP 6.2和Oracle。JBossEAP 6.2 EntityManager和連接恢復

我有一個對象(稱爲Maintainer)註釋爲@Singleton和@Startup。在實例化時,會注入一個@Stateless會話bean(Repository),它本身是通過一個EntityManager注入的。

@Singleton 
@Startup   @Stateless  @PersistenceContext() 
Maintainer ----> Repository ----> EntityManager 

在維護者的@PostConstruct方法,它會創建一個定期運行,從使用存儲庫數據庫中獲取對象的線程。此線程適用於應用程序的生命。檢索對象的代碼使用看起來像這樣本機查詢:

Query query = entityManager.createNativeQuery(SQL_QUERY_ALL); 
    query.setParameter(DATE_PARAM_NAME, sinceLastUpdateDate); 
    List<Object[]> resultList = query.getResultList(); 

我遇到的問題是,當應用程序失去連接到數據庫,線程開始投擲「java.sql.SQLRecoverableException:封閉連接「異常。即使在數據庫恢復後,它也不會重新連接,我必須關閉並重新啓動我的應用程序。

我確定連接恢復內置到底層庫中,所以我猜測問題出在我的代碼以及我對EntityManager如何管理其與數據庫的連接的理解(或缺乏)。

任何事情都可以讓我明白這一點。我在做什麼?

謝謝。

+0

看看http://stackoverflow.com/questions/128527/is-還有,任何單向的到了最JBoss的連接池重新連接到Oracle的時候,康恩 –

回答

0

也許爲時已晚,但根據記錄,您可以在數據源這樣添加驗證上匹配:

<validation> 
    <valid-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.oracle.OracleValidConnectionChecker"/> 
    <validate-on-match>true</validate-on-match> 
    </validation>