2012-04-11 91 views
2

我將EclipseLink作爲JPA和我的實現想知道是否有可能來檢查,如果我的EntityManagerFactory的是「活着」檢查的EntityManagerFactory

例如,如果連接參數無效,當我創建了EMF我沒有任何異常,直到我開始一個事務

感謝

+0

你能在交易後開始異常 – 2012-04-11 08:32:46

回答

2

通過的entityManagerFactory你只能得到一個EntityManager的,並寄一張支票查詢到DB,但在這種情況下,我認爲最好的辦法是與驗證程序配置連接池。

以這種方式創建或從池中檢索的每個連接通過JDBC API或者與一個簡單的查詢驗證。 例如,在JBoss的數據源配置在裏面可以添加下列行:

<!-- sql to call when connection is created --> 
<new-connection-sql>some arbitrary sql</new-connection-sql> 

<!-- sql to call on an existing pooled connection when it is obtained from pool  --> 
<check-valid-connection-sql>some arbitrary sql</check-valid-connection-sql> 

或(對於Postgres的,但也有例如用於每個DBMS)

<validation> 
    <valid-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLValidConnectionChecker"></valid-connection-checker> 
    <exception-sorter class-name="org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLExceptionSorter"></exception-sorter> 
</validation> 
2

的EclipseLink懶惰展開時通過默認爲提高服務器的啓動時間。

您可以配置使用部署在服務器上開始出現時,

「eclipselink.deploy上,啓動」 =「真」

在你的persistence.xml。

0

對我使用這段代碼的時刻:

try { 
    emf = Persistence.createEntityManagerFactory(pu, properties); 
} catch (Exception e) { 
    throw new DaoException("cannot open entity manager factory", e); 
} 

EntityManager em = null; 
try { 
    em = emf.createEntityManager(); 
} catch (Exception e) { 
    throw new DaoException("cannot open entity manager", e); 
} finally { 
    if (null!=em && em.isOpen()) { 
    em.close(); 
    } 
} 

我會嘗試你的建議 感謝

相關問題