/*
* Hibernate OGM, Domain model persistence for NoSQL datastores
*
* 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.ogm.util.impl;
import org.hibernate.Session;
import org.hibernate.engine.spi.SessionImplementor;
import org.hibernate.ogm.dialect.impl.EmptyTransactionContext;
import org.hibernate.ogm.dialect.impl.IdentifiableDriver;
import org.hibernate.ogm.dialect.impl.TransactionContextImpl;
import org.hibernate.ogm.dialect.spi.TransactionContext;
import org.hibernate.resource.transaction.TransactionCoordinator;
import org.hibernate.resource.transaction.TransactionCoordinator.TransactionDriver;
/**
* @author Davide D'Alto
*/
public final class TransactionContextHelper {
private TransactionContextHelper() {
}
/**
* Return a transaction context given the session; it never returns {@code null}.
*
* @param session current {@link Session}
* @return the {@link TransactionContext}
*/
public static TransactionContext transactionContext(Session session) {
return transactionContext( (SessionImplementor) session );
}
/**
* Return a transaction context given the session implementor; it never returns {@code null}.
*
* @param session current {@link SessionImplementor}
* @return the {@link TransactionContext}
*/
public static TransactionContext transactionContext(SessionImplementor session) {
TransactionCoordinator transactionCoordinator = session.getTransactionCoordinator();
if ( transactionCoordinator != null && transactionCoordinator.getTransactionDriverControl() != null ) {
TransactionDriver driver = transactionCoordinator.getTransactionDriverControl();
if ( driver instanceof IdentifiableDriver ) {
return new TransactionContextImpl( (IdentifiableDriver) driver );
}
}
return EmptyTransactionContext.INSTANCE;
}
}