Set isolation level in eclipselink

I would like to set the isolation level using the eclipse link.
I tried these 2 ways to do this:

  • java.sql.Connection

    mgr = EMF.get().createEntityManager();
    tx = mgr.getTransaction();
    tx.begin();
    
    java.sql.Connection connection = mgr.unwrap(java.sql.Connection.class);
    connection.setTransactionIsolation(java.sql.Connection.TRANSACTION_READ_COMMITTED);
    System.out.println("Connection: "+connection.getTransactionIsolation());
    //prints TRANSACTION_READ_COMMITED as expected
    
    org.eclipse.persistence.sessions.DatabaseLogin databaseLogin = new DatabaseLogin();
    System.out.println("DatabaseLoging: "+databaseLogin.getTransactionIsolation());
    //prints -1, representing transaction isolation is not set
    
  • DatabaseLogin method setTransationIsolation

    mgr = EMF.get().createEntityManager();
    tx = mgr.getTransaction();
    tx.begin();
    
    org.eclipse.persistence.sessions.DatabaseLogin databaseLogin = new DatabaseLogin();
    databaseLogin.setTransactionIsolation(DatabaseLogin.TRANSACTION_READ_COMMITTED);
    System.out.println("DatabaseLoging: "+databaseLogin.getTransactionIsolation());
    //prints TRANSACTION_READ_COMMITED as expected
    
    java.sql.Connection connection = mgr.unwrap(java.sql.Connection.class);
    System.out.println("Connection: "+connection.getTransactionIsolation());
    //prints TRANSACTION_REPEATABLE_READ
    

As you can see, there are some inconsistencies between the return values ​​of the getTransacationIsolation () method. My question is, what transaction isolation is really set in both cases? I know that the eclipse link uses a different connection for read and write operations, DatabaseLogin.setTransactionIsolation must set the isolation level for both connections, so why does Connection.getTransactionIsolation still return a different isolation level?

Application EntopedManager, JPA 2.0, EclipseLink 2.5.2.
, , .

+4
2

eclipse , .
@Chris , DatabaseLogin, . eclipse , Session SessionCustomizer, . :

package com.filip.blabla;
import org.eclipse.persistence.sessions.DatabaseLogin;
import org.eclipse.persistence.sessions.Session;
import org.eclipse.persistence.sessions.factories.SessionCustomizer;

public class DFSessionCustomizer implements SessionCustomizer {
        @Override
        public void customize(Session session) throws Exception {
            DatabaseLogin databaseLogin = (DatabaseLogin) session.getDatasourceLogin();
            databaseLogin.setTransactionIsolation(DatabaseLogin.TRANSACTION_READ_COMMITTED);
        }

}

SessionCustomizer persistence.xml

<property name="eclipselink.session.customizer" value="com.filip.blabla.DFSessionCustomizer"/>
+5

databaseLogin - , EclipseLink , . , , DatabaseLogin.

DatabaseLoging , . DatabaseLogin, EntityManager/EMF.

+1

Source: https://habr.com/ru/post/1599646/


All Articles