Search code examples
javajpajdbcjava-ee-6

How to get DataSource or Connection from JPA2 EntityManager in Java EE 6


I have a working application where I use Java EE 6 with EclipseLink for persistence and a PostgreSQL database.

For the User-Registration I want to set the password in PostgreSQL to:

... password = crypt('inputPassword',gen_salt('bf')) ...

As I cant use DigestUtils for this, I have to insert the user manually into the DB. To keep my application configurable I do not want to query the DataSource with an InitialContextInstance.lookup(dataSource) but to extract it (or the Connection) somehow from the EntityManager like:

DataSource ds = entityManagerInstance.someFunctionThatReturnsADataSourceOrConnection();

Or would it be possible to use createNativeQuery or something similar in conjuntion with a prepared statement to protect against injections?


Solution

  • sometimes it just takes another run in google:

    entityManager.getTransaction().begin();
    java.sql.Connection connection = entityManager.unwrap(java.sql.Connection.class);
    ...
    entityManager.getTransaction().commit();
    

    as described in the Eclipse Link Documentation