/*
* 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.datastore.neo4j.transaction.impl;
import javax.transaction.Status;
import javax.transaction.Synchronization;
import org.hibernate.resource.transaction.spi.TransactionStatus;
/**
* {@link Synchronization} implementation for Neo4j.
*
* @author Davide D'Alto
*/
public class Neo4jSynchronization implements Synchronization {
private BaseNeo4jJtaTransactionCoordinator delegate;
public Neo4jSynchronization(BaseNeo4jJtaTransactionCoordinator transactionCoordinator) {
this.delegate = transactionCoordinator;
}
@Override
public void beforeCompletion() {
TransactionStatus status = delegate.getTransactionDriverControl().getStatus();
if ( status == TransactionStatus.MARKED_ROLLBACK ) {
delegate.failure();
}
else {
delegate.success();
}
}
@Override
public void afterCompletion(int status) {
if ( delegate.isTransactionOpen() ) {
if ( status != Status.STATUS_COMMITTED ) {
delegate.failure();
}
else {
delegate.success();
}
}
}
}