我使用eclipselink作为JPA的实现,我想知道是否可以检查我的EntityManagerFactory是否是" alive"
例如,如果连接参数无效,当我创建EMF时,在开始交易之前我没有任何异常
由于
答案 0 :(得分:2)
使用entityManagerFactory,您只能获取EntityManager并向数据库发送检查查询,但在这种情况下,我认为最佳解决方案是使用验证器配置连接池。
这样,通过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>
答案 1 :(得分:2)
EclipseLink lazy默认部署以改善服务器启动时间。
您可以使用
配置在服务器启动时进行部署“eclipselink.deploy-上启动”= “真”
在persistence.xml中。
答案 2 :(得分: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();
}
}
我会尝试你的建议 感谢