Pergunta

Estou em um projeto que usa a implementação do JPA Eclipselink para conversar com um banco de dados PostgreSQL. Eu tenho uma tarefa para a qual o PostgreSQL notificar/ouvir parece ser um ajuste perfeito. Infelizmente, sou um JPA Newb e estou lutando para descobrir como fazê -lo funcionar. Então, acho que realmente tenho duas perguntas; Responder qualquer um vai me deixar feliz.

1) Qual é a melhor maneira de conseguir a conexão direta do JDBC com o banco de dados? (Que eu sinceramente espero que seja do tipo org.postgresql.PGConnection.)

OU

2) Qual é a melhor maneira de eu imitar/acessar org.postgresql.PGConnection.getNotifications() via EclipSelink JPA?

Muito obrigado pela sua ajuda.


Editar: Duas soluções de trabalho! Eu amo este site. Se alguém tiver algo a dizer sobre o Hidden Gotchas/benefícios que tornariam a solução de Pascal ou Balus melhor do que a outra antes de distribuir a marca de seleção, gostaria de ouvi -la.

Foi útil?

Solução

Obtendo uma conexão JDBC de um EntityManager no eclipselink é respondido no Eclipselink Wiki.

A maneira difere por versão da API JPA. Aqui está um extrato do wiki:

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

Outras dicas

Você deve ser capaz de obtê -lo de org.eclipse.persistence.internal.jpa.EntityManagerImpl que é devolvido por EntityManager.getDelegate():

java.sql.Connection conn = ((EntityManagerImpl)(em.getDelegate())).getServerSession().getAccessor().getConnection();
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top