Writes are committed immediately during a JPA/JTA transaction in EAP

Solution In Progress - Updated -

Issue

  • A persistence unit is configured as below
    <persistence-unit name="MyTestUnit" transaction-type="JTA">
        <provider>org.hibernate.ejb.HibernatePersistence</provider>
        ...
        <properties>
            <property name="hibernate.connection.driver_class" value="..." />
            <property name="hibernate.connection.url" value="..." />
            <property name="hibernate.connection.username" value="..." />
            <property name="hibernate.connection.password" value="..." />
            <property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect" />
            ...
        </properties>
    </persistence-unit>
  • A transaction executes as below
    txMgr.begin();

    // Hook the entity manager into transaction events (e.g. commit) - not required in most environments
    entityManager.joinTransaction();

    // Write is not immediate on the persist() call, it is deferred until the first flush
    entityManager.persist(new Event("meeting"));

    // A committed write occurs in the process of executing the query below
    entityManager.createQuery("from Event").getResultList().size();

    // This rollback has no effect
    txMgr.rollback();

    // The assertion fails due to the write above
    Assert.assertEquals(0, entityManager.createQuery("from Event").getResultList().size());

Environment

  • Red Hat JBoss Enterprise Application Platform (EAP)
    • 4
    • 5
    • 6
  • Hibernate
    • 3
    • 4

Subscriber exclusive content

A Red Hat subscription provides unlimited access to our knowledgebase of over 48,000 articles and solutions.

Current Customers and Partners

Log in for full access

Log In
Close

Welcome! Check out the Getting Started with Red Hat page for quick tours and guides for common tasks.