Skip to content

Commit

Permalink
HHH-8189 - Rollback audit records on flushed transaction rollback
Browse files Browse the repository at this point in the history
  • Loading branch information
lukasz-antoniak committed Apr 17, 2013
1 parent 76fe91c commit bbe408f
Show file tree
Hide file tree
Showing 2 changed files with 48 additions and 14 deletions.
Expand Up @@ -27,6 +27,7 @@

import org.hibernate.Transaction;
import org.hibernate.action.spi.AfterTransactionCompletionProcess;
import org.hibernate.action.spi.BeforeTransactionCompletionProcess;
import org.hibernate.engine.spi.SessionImplementor;
import org.hibernate.envers.revisioninfo.RevisionInfoGenerator;
import org.hibernate.event.spi.EventSource;
Expand All @@ -53,7 +54,16 @@ public AuditProcess get(EventSource session) {
auditProcess = new AuditProcess(revisionInfoGenerator, session);
auditProcesses.put(transaction, auditProcess);

session.getActionQueue().registerProcess(auditProcess);
session.getActionQueue().registerProcess(
new BeforeTransactionCompletionProcess() {
public void doBeforeTransactionCompletion(SessionImplementor session) {
final AuditProcess process = auditProcesses.get( transaction );
if ( process != null ) {
process.doBeforeTransactionCompletion( session );
}
}
}
);

session.getActionQueue().registerProcess(new AfterTransactionCompletionProcess() {
public void doAfterTransactionCompletion(boolean success, SessionImplementor session) {
Expand Down
@@ -1,19 +1,19 @@
package org.hibernate.envers.test.integration.basic;

import java.util.List;

import javax.persistence.EntityManager;

import org.hibernate.envers.test.BaseEnversJPAFunctionalTestCase;
import org.hibernate.envers.test.entities.IntTestEntity;
import org.junit.Assert;
import org.junit.Test;

import org.hibernate.envers.test.BaseEnversJPAFunctionalTestCase;
import org.hibernate.envers.test.entities.IntTestEntity;
import org.hibernate.testing.TestForIssue;

/**
* @author Tomasz Dziurko (tdziurko at gmail dot com)
*/
public class TransactionRollbackBehaviour extends BaseEnversJPAFunctionalTestCase {

@Test
public void testAuditRecordsRollback() {
// Given
Expand All @@ -32,15 +32,39 @@ public void testAuditRecordsRollback() {
em.getTransaction().commit();

// Then
List<Number> revisionsForSavedClass = getAuditReader()
.getRevisions( IntTestEntity.class, ite2Id );
Assert.assertEquals( "There should be one revision for inserted entity",
1, revisionsForSavedClass.size() );

List<Number> revisionsForRolledbackClass = getAuditReader()
.getRevisions( IntTestEntity.class, rollbackedIteId );
Assert.assertEquals( "There should be one revision for inserted entity",
0, revisionsForRolledbackClass.size() );
List<Number> revisionsForSavedClass = getAuditReader().getRevisions( IntTestEntity.class, ite2Id );
Assert.assertEquals( "There should be one revision for inserted entity.", 1, revisionsForSavedClass.size() );

List<Number> revisionsForRolledbackClass = getAuditReader().getRevisions( IntTestEntity.class, rollbackedIteId );
Assert.assertEquals( "There should be no revision for rolled back transaction.", 0, revisionsForRolledbackClass.size() );
}

@Test
@TestForIssue( jiraKey = "HHH-8189" )
public void testFlushedAuditRecordsRollback() {
// Given
EntityManager em = getEntityManager();
em.getTransaction().begin();
IntTestEntity iteToRollback = new IntTestEntity( 30 );
em.persist( iteToRollback );
em.flush();
Integer rollbackedIteId = iteToRollback.getId();
em.getTransaction().rollback();

// When
em.getTransaction().begin();
IntTestEntity ite2 = new IntTestEntity( 50 );
em.persist( ite2 );
em.flush();
Integer ite2Id = ite2.getId();
em.getTransaction().commit();

// Then
List<Number> revisionsForSavedClass = getAuditReader().getRevisions( IntTestEntity.class, ite2Id );
Assert.assertEquals( "There should be one revision for inserted entity.", 1, revisionsForSavedClass.size() );

List<Number> revisionsForRolledbackClass = getAuditReader().getRevisions( IntTestEntity.class, rollbackedIteId );
Assert.assertEquals( "There should be no revision for rolled back transaction.", 0, revisionsForRolledbackClass.size() );
}

@Override
Expand Down

0 comments on commit bbe408f

Please sign in to comment.