/*
* Hibernate, Relational Persistence for Idiomatic Java
*
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
* See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
*/
package org.hibernate.test.jpa.txn;
import org.hibernate.Session;
import org.hibernate.cfg.AvailableSettings;
import org.hibernate.cfg.Configuration;
import org.hibernate.engine.spi.SessionImplementor;
import org.hibernate.resource.transaction.backend.jdbc.internal.JdbcResourceLocalTransactionCoordinatorBuilderImpl;
import org.hibernate.resource.transaction.backend.jdbc.internal.JdbcResourceLocalTransactionCoordinatorImpl;
import org.hibernate.resource.transaction.backend.jta.internal.JtaTransactionCoordinatorImpl;
import org.hibernate.testing.TestForIssue;
import org.hibernate.testing.jta.TestingJtaBootstrap;
import org.hibernate.testing.junit4.ExtraAssertions;
import org.hibernate.test.jpa.AbstractJPATest;
import org.junit.Test;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
/**
* @author Steve Ebersole
*/
public class ResourceLocalTransactionJoiningTest extends AbstractJPATest {
@Override
public void configure(Configuration cfg) {
super.configure( cfg );
TestingJtaBootstrap.prepare( cfg.getProperties() );
cfg.setProperty(
AvailableSettings.TRANSACTION_COORDINATOR_STRATEGY,
JdbcResourceLocalTransactionCoordinatorBuilderImpl.class.getName()
);
}
@Test
@TestForIssue( jiraKey = "HHH-9859" )
public void testExpectations() {
// JPA spec is very vague on what should happen here. It does vaguely
// imply that javax.persistence.EntityManager.joinTransaction() should only be used
// for JTA EMs, however it does not enforced that nor does the TCK check that.
// And the TCK in fact does test calls to javax.persistence.EntityManager.isJoinedToTransaction()
// from resource-local EMs, so lets make sure those work..
Session session = sessionFactory().openSession();
JdbcResourceLocalTransactionCoordinatorImpl tc = ExtraAssertions.assertTyping(
JdbcResourceLocalTransactionCoordinatorImpl.class,
( (SessionImplementor) session ).getTransactionCoordinator()
);
assertFalse( tc.isJoined() );
session.beginTransaction();
tc = ExtraAssertions.assertTyping(
JdbcResourceLocalTransactionCoordinatorImpl.class,
( (SessionImplementor) session ).getTransactionCoordinator()
);
assertTrue( tc.isJoined() );
session.getTransaction().rollback();
session.close();
}
}