Странное поведение в Hibernate Transaction Management после обновления с 4.1.10 до 5.2.10

После обновления с hibernate 4.1.10 до 5.2.10 мы сталкиваемся со странным поведением. Следующий код работает над версией (4.1.10)

        Session session1 = sessionFactory.openSession();
    System.out.println("session 1 opened");
    session1.beginTransaction();
    System.out.println("Transaction 1 begin");

    /////

    Session session2 = sessionFactory.openSession();
    System.out.println("session 2 opened");
    session2.beginTransaction();
    System.out.println("Transaction 2 begin");
    session2.getTransaction().commit();
    System.out.println("Transaction 2 commit");
    session2.close();
    System.out.println("session 2 close");

    //////

    session1.getTransaction().commit();
    System.out.println("Transaction 1 commit");
    session1.close();
    System.out.println("session 1 close");

со следующим конфигом

            <property name="connection.datasource">.....</property>
    <property name="transaction.factory_class">org.hibernate.transaction.JTATransactionFactory</property>
    <property name="transaction.manager_lookup_class">org.hibernate.transaction.WeblogicTransactionManagerLookup</property>

и мы получаем фабрику сеансов, используя этот код

       Configuration configuration = new Configuration();
    configuration.configure("com/code/dal/hibernate.cfg.xml");
    ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(configuration.getProperties()).buildServiceRegistry();
    sessionFactory = configuration.buildSessionFactory(serviceRegistry);

Тот же код выдает " java.lang.IllegalStateException: транзакция уже активна" после обновления.

Новый конфиг

            <property name="connection.datasource">........</property>
    <property name="hibernate.transaction.coordinator_class">org.hibernate.resource.transaction.backend.jta.internal.JtaTransactionCoordinatorBuilderImpl</property>
    <property name="hibernate.transaction.jta.platform">org.hibernate.engine.transaction.jta.platform.internal.WeblogicJtaPlatform</property>

и теперь мы получаем фабрику сеансов, используя этот код

        StandardServiceRegistry standardRegistry = new StandardServiceRegistryBuilder().configure("com/code/dal/hibernate.cfg.xml").build();
    Metadata metadata = new MetadataSources(standardRegistry).getMetadataBuilder().build();
    sessionFactory = metadata.getSessionFactoryBuilder().build();

0 ответов

Другие вопросы по тегам