Я нахожусь на проекте, который использует реализацию EclipseLink JPA, чтобы говорить с базой данных PostgreSQL. У меня есть задача, для которой PostgreSQL УВЕДОМЛЯЮТ/СЛУШАЮТ, походит на идеальное соответствие. К сожалению, я - JPA newb и изо всех сил пытаюсь выяснить, как заставить его работать. Таким образом, я предполагаю, что у меня действительно есть два вопроса; ответ на любой сделает меня счастливым.
1) Каков лучший способ для меня овладеть прямым соединением JDBC к базе данных? (Который я искренне надеюсь, окажется типа org.postgresql.PGConnection
.)
ИЛИ
2) Каков лучший способ для меня эмулировать/получать доступ org.postgresql.PGConnection.getNotifications()
через EclipseLink JPA?
Большое спасибо за Вашу справку.
Получение соединения JDBC из EntityManager
в EclipseLink отвечает в вики EclipseLink.
Способ отличается в зависимости от версии JPA API. Вот выдержка из вики:
JPA 2.0
entityManager.getTransaction().begin();
java.sql.Connection connection = entityManager.unwrap(java.sql.Connection.class);
...
entityManager.getTransaction().commit();
JPA 1.0
entityManager.getTransaction().begin();
UnitOfWorkImpl unitOfWork = (UnitOfWorkImpl)((JpaEntityManager)entityManager.getDelegate()).getActiveSession();
unitOfWork.beginEarlyTransaction();
java.sql.Connection connection = unitOfWork.getAccessor().getConnection();
...
entityManager.getTransaction().commit();
необходимо смочь получить его от org.eclipse.persistence.internal.jpa. EntityManagerImpl
, который возвращается EntityManager.getDelegate ()
:
java.sql.Connection conn = ((EntityManagerImpl)(em.getDelegate())).getServerSession().getAccessor().getConnection();