JPA の実装として eclipselink を使用していますが、EntityManagerFactory が「生きている」かどうかを確認できるかどうかを知りたいです。
たとえば、接続パラメーターが無効な場合、EMF を作成すると、トランザクションを開始するまで例外は発生しません。
ありがとう
JPA の実装として eclipselink を使用していますが、EntityManagerFactory が「生きている」かどうかを確認できるかどうかを知りたいです。
たとえば、接続パラメーターが無効な場合、EMF を作成すると、トランザクションを開始するまで例外は発生しません。
ありがとう
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>
EclipseLink の遅延デプロイは、サーバーの起動時間を改善するためにデフォルトで行われます。
次を使用して、サーバーの起動時に展開が行われるように構成できます。
"eclipselink.deploy-on-startup"="true"
persistence.xml で。
今のところ、次のコードを使用します。
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();
}
}
私はあなたの提案を試してみますありがとう