2012-04-11 6 views
2

Я использую EclipseLink как реализацию JPA, и я хотел бы знать, если это возможно, чтобы проверить, если мой EntityManagerFactory является «живым»проверка EntityManagerFactory

, например, если параметры соединения являются недействительными, когда я создаю EMF у меня нет каких-либо исключений, пока я не начать транзакцию

Благодаря

+0

Вы можете разместить исключение на сделки начинаются –

ответ

2

с EntityManagerFactory вы можете получить только EntityManager и отправить чек запрос к БД, но в данном случае я думаю, что лучшее решение для настройки пула соединений с помощью валидатора.

Таким образом, каждое соединение, созданное или получаемое из пула, проверяется с помощью API JDBC или с помощью простого запроса. Например, в 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, но есть пример для каждой СУБД)

<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(); 
    } 
} 

Я попробую ваши предложения благодаря

Смежные вопросы