2012-04-11 4 views
2

私はJPAの実装としてのEclipseLinkを使用して、私が作成したときに接続パラメータは、無効である場合、私は、私のEntityManagerFactoryが「生きている」であれば、たとえばチェックのEntityManagerFactory

をチェックすることが可能であるかどうかを知りたいです私は取引にあなたが唯一のEntityManagerを取得し、DBにチェッククエリを送信することができてEntityManagerFactoryで

おかげ

+0

を始めるトランザクションで例外を投稿することができます –

答えて

2

を始めるが、この場合には、私は最善の解決策だと思うまで、私はすべての例外を持っていないEMFバリデーターを使用して接続プールを構成します。

このようにして、プールから作成または取得された各接続は、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オンスタートアップ" = "true" をあなたの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(); 
    } 
} 

関連する問題