[hibernate-commits] Hibernate SVN: r16503 - in core/branches/envers-hibernate-3.3/src: main/java/org/hibernate/envers/configuration and 11 other directories.

hibernate-commits at lists.jboss.org hibernate-commits at lists.jboss.org
Sun May 3 13:21:47 EDT 2009


Author: adamw
Date: 2009-05-03 13:21:46 -0400 (Sun, 03 May 2009)
New Revision: 16503

Added:
   core/branches/envers-hibernate-3.3/src/test/java/org/hibernate/envers/test/entities/PrimitiveTestEntity.java
   core/branches/envers-hibernate-3.3/src/test/java/org/hibernate/envers/test/entities/reventity/CustomDataRevEntity.java
   core/branches/envers-hibernate-3.3/src/test/java/org/hibernate/envers/test/integration/primitive/
   core/branches/envers-hibernate-3.3/src/test/java/org/hibernate/envers/test/integration/primitive/PrimitiveAddDelete.java
   core/branches/envers-hibernate-3.3/src/test/java/org/hibernate/envers/test/integration/reventity/CustomNoListener.java
   core/branches/envers-hibernate-3.3/src/test/java/org/hibernate/envers/test/integration/reventity/ExceptionListener.java
   core/branches/envers-hibernate-3.3/src/test/java/org/hibernate/envers/test/integration/reventity/ExceptionListenerRevEntity.java
   core/branches/envers-hibernate-3.3/src/test/java/org/hibernate/envers/test/integration/reventity/TestExceptionRevisionListener.java
Removed:
   core/branches/envers-hibernate-3.3/src/test/java/org/hibernate/envers/test/integration/primitive/PrimitiveAddDelete.java
Modified:
   core/branches/envers-hibernate-3.3/src/main/java/org/hibernate/envers/AuditReader.java
   core/branches/envers-hibernate-3.3/src/main/java/org/hibernate/envers/configuration/RevisionInfoConfiguration.java
   core/branches/envers-hibernate-3.3/src/main/java/org/hibernate/envers/configuration/metadata/AuditMetadataGenerator.java
   core/branches/envers-hibernate-3.3/src/main/java/org/hibernate/envers/configuration/metadata/MetadataTools.java
   core/branches/envers-hibernate-3.3/src/main/java/org/hibernate/envers/entities/mapper/SinglePropertyMapper.java
   core/branches/envers-hibernate-3.3/src/main/java/org/hibernate/envers/reader/AuditReaderImpl.java
   core/branches/envers-hibernate-3.3/src/main/java/org/hibernate/envers/revisioninfo/DefaultRevisionInfoGenerator.java
   core/branches/envers-hibernate-3.3/src/main/java/org/hibernate/envers/revisioninfo/RevisionInfoGenerator.java
   core/branches/envers-hibernate-3.3/src/main/java/org/hibernate/envers/synchronization/AuditSync.java
   core/branches/envers-hibernate-3.3/src/test/resources/testng.xml
Log:
svn merge -r 16393:16502 https://svn.jboss.org/repos/hibernate/core/trunk/envers .

Modified: core/branches/envers-hibernate-3.3/src/main/java/org/hibernate/envers/AuditReader.java
===================================================================
--- core/branches/envers-hibernate-3.3/src/main/java/org/hibernate/envers/AuditReader.java	2009-05-03 13:57:41 UTC (rev 16502)
+++ core/branches/envers-hibernate-3.3/src/main/java/org/hibernate/envers/AuditReader.java	2009-05-03 17:21:46 UTC (rev 16503)
@@ -100,6 +100,20 @@
     <T> T findRevision(Class<T> revisionEntityClass, Number revision) throws IllegalArgumentException,
             RevisionDoesNotExistException, IllegalStateException;
 
+	/**
+	 * Gets an instance of the current revision entity, to which any entries in the audit tables will be bound.
+	 * Please note the if {@code persist} is {@code false}, and no audited entities are modified in this session,
+	 * then the obtained revision entity instance won't be persisted. If {@code persist} is {@code true}, the revision
+	 * entity instance will always be persisted, regardless of whether audited entities are changed or not.
+	 * @param revisionEntityClass Class of the revision entity. Should be annotated with {@link RevisionEntity}.
+	 * @param persist If the revision entity is not yet persisted, should it become persisted. This way, the primary
+	 * identifier (id) will be filled (if it's assigned by the DB) and available, but the revision entity will be
+	 * persisted even if there are no changes to audited entities. Otherwise, the revision number (id) can be
+	 * {@code null}.
+	 * @return The current revision entity, to which any entries in the audit tables will be bound.
+	 */
+	<T> T getCurrentRevision(Class<T> revisionEntityClass, boolean persist);
+
     /**
      *
      * @return A query creator, associated with this AuditReader instance, with which queries can be

Modified: core/branches/envers-hibernate-3.3/src/main/java/org/hibernate/envers/configuration/RevisionInfoConfiguration.java
===================================================================
--- core/branches/envers-hibernate-3.3/src/main/java/org/hibernate/envers/configuration/RevisionInfoConfiguration.java	2009-05-03 13:57:41 UTC (rev 16502)
+++ core/branches/envers-hibernate-3.3/src/main/java/org/hibernate/envers/configuration/RevisionInfoConfiguration.java	2009-05-03 17:21:46 UTC (rev 16503)
@@ -76,11 +76,11 @@
 
         Element idProperty = MetadataTools.addNativelyGeneratedId(class_mapping, revisionInfoIdData.getName(),
                 revisionPropType);
-        MetadataTools.addColumn(idProperty, "REV", null);
+        MetadataTools.addColumn(idProperty, "REV", null, 0, 0, null);
 
         Element timestampProperty = MetadataTools.addProperty(class_mapping, revisionInfoTimestampData.getName(),
                 revisionInfoTimestampType, true, false);
-        MetadataTools.addColumn(timestampProperty, "REVTSTMP", null);
+        MetadataTools.addColumn(timestampProperty, "REVTSTMP", null, 0, 0, null);
 
         return document;
     }

Modified: core/branches/envers-hibernate-3.3/src/main/java/org/hibernate/envers/configuration/metadata/AuditMetadataGenerator.java
===================================================================
--- core/branches/envers-hibernate-3.3/src/main/java/org/hibernate/envers/configuration/metadata/AuditMetadataGenerator.java	2009-05-03 13:57:41 UTC (rev 16502)
+++ core/branches/envers-hibernate-3.3/src/main/java/org/hibernate/envers/configuration/metadata/AuditMetadataGenerator.java	2009-05-03 17:21:46 UTC (rev 16503)
@@ -90,7 +90,7 @@
     void addRevisionInfoRelation(Element any_mapping) {
         Element rev_mapping = (Element) revisionInfoRelationMapping.clone();
         rev_mapping.addAttribute("name", verEntCfg.getRevisionFieldName());
-        MetadataTools.addColumn(rev_mapping, verEntCfg.getRevisionFieldName(), null);
+        MetadataTools.addColumn(rev_mapping, verEntCfg.getRevisionFieldName(), null, 0, 0, null);
 
         any_mapping.add(rev_mapping);
     }
@@ -197,7 +197,7 @@
 
             Element joinKey = joinElement.addElement("key");
             MetadataTools.addColumns(joinKey, join.getKey().getColumnIterator());
-            MetadataTools.addColumn(joinKey, verEntCfg.getRevisionFieldName(), null);
+            MetadataTools.addColumn(joinKey, verEntCfg.getRevisionFieldName(), null, 0, 0, null);
         }
     }
 
@@ -337,7 +337,7 @@
                 // Adding the "key" element with all columns + the revision number column
                 Element keyMapping = mappingData.getFirst().addElement("key");
                 MetadataTools.addColumns(keyMapping, pc.getIdentifierProperty().getColumnIterator());
-                MetadataTools.addColumn(keyMapping, verEntCfg.getRevisionFieldName(), null);
+                MetadataTools.addColumn(keyMapping, verEntCfg.getRevisionFieldName(), null, 0, 0, null);
                 break;
 
             case TABLE_PER_CLASS:

Modified: core/branches/envers-hibernate-3.3/src/main/java/org/hibernate/envers/configuration/metadata/MetadataTools.java
===================================================================
--- core/branches/envers-hibernate-3.3/src/main/java/org/hibernate/envers/configuration/metadata/MetadataTools.java	2009-05-03 13:57:41 UTC (rev 16502)
+++ core/branches/envers-hibernate-3.3/src/main/java/org/hibernate/envers/configuration/metadata/MetadataTools.java	2009-05-03 17:21:46 UTC (rev 16503)
@@ -68,13 +68,23 @@
         return prop_mapping;
     }
 
-    public static Element addColumn(Element parent, String name, Integer length) {
+    public static Element addColumn(Element parent, String name, Integer length, Integer scale, Integer precision,
+									String sqlType) {
         Element column_mapping = parent.addElement("column");
 
         column_mapping.addAttribute("name", name);
         if (length != null) {
             column_mapping.addAttribute("length", length.toString());
         }
+		if (scale != 0) {
+			column_mapping.addAttribute("scale", Integer.toString(scale));
+		}
+		if (precision != 0) {
+			column_mapping.addAttribute("precision", Integer.toString(precision));
+		}
+		if (sqlType != null) {
+            column_mapping.addAttribute("sql-type", sqlType);
+        }
 
         return column_mapping;
     }
@@ -142,7 +152,8 @@
     public static void addColumns(Element any_mapping, Iterator<Column> columns) {
         while (columns.hasNext()) {
             Column column = columns.next();
-            addColumn(any_mapping, column.getName(), column.getLength());
+            addColumn(any_mapping, column.getName(), column.getLength(), column.getScale(), column.getPrecision(),
+					column.getSqlType());
         }
     }
 

Modified: core/branches/envers-hibernate-3.3/src/main/java/org/hibernate/envers/entities/mapper/SinglePropertyMapper.java
===================================================================
--- core/branches/envers-hibernate-3.3/src/main/java/org/hibernate/envers/entities/mapper/SinglePropertyMapper.java	2009-05-03 13:57:41 UTC (rev 16502)
+++ core/branches/envers-hibernate-3.3/src/main/java/org/hibernate/envers/entities/mapper/SinglePropertyMapper.java	2009-05-03 17:21:46 UTC (rev 16503)
@@ -36,7 +36,9 @@
 
 import org.hibernate.collection.PersistentCollection;
 import org.hibernate.property.Setter;
+import org.hibernate.property.DirectPropertyAccessor;
 import org.hibernate.engine.SessionImplementor;
+import org.hibernate.HibernateException;
 
 /**
  * TODO: diff
@@ -68,9 +70,27 @@
         }
 
         Setter setter = ReflectionTools.getSetter(obj.getClass(), propertyData);
-        setter.set(obj, data.get(propertyData.getName()), null);
+		Object value = data.get(propertyData.getName());
+		// We only set a null value if the field is not primite. Otherwise, we leave it intact.
+		if (value != null || !isPrimitive(setter, propertyData, obj.getClass())) {
+        	setter.set(obj, value, null);
+		}
     }
 
+	private boolean isPrimitive(Setter setter, PropertyData propertyData, Class<?> cls) {
+		if (setter instanceof DirectPropertyAccessor.DirectSetter) {
+			// In a direct setter, getMethod() returns null
+			// Trying to look up the field
+			try {
+				return cls.getDeclaredField(propertyData.getBeanName()).getType().isPrimitive();
+			} catch (NoSuchFieldException e) {
+				throw new HibernateException(e);
+			}
+		} else {
+			return setter.getMethod().getParameterTypes()[0].isPrimitive();
+		}
+	}
+
     public List<PersistentCollectionChangeData> mapCollectionChanges(String referencingPropertyName,
                                                                      PersistentCollection newColl,
                                                                      Serializable oldColl,

Modified: core/branches/envers-hibernate-3.3/src/main/java/org/hibernate/envers/reader/AuditReaderImpl.java
===================================================================
--- core/branches/envers-hibernate-3.3/src/main/java/org/hibernate/envers/reader/AuditReaderImpl.java	2009-05-03 13:57:41 UTC (rev 16502)
+++ core/branches/envers-hibernate-3.3/src/main/java/org/hibernate/envers/reader/AuditReaderImpl.java	2009-05-03 17:21:46 UTC (rev 16503)
@@ -34,10 +34,12 @@
 import org.hibernate.envers.query.AuditEntity;
 import static org.hibernate.envers.tools.ArgumentsTools.checkNotNull;
 import static org.hibernate.envers.tools.ArgumentsTools.checkPositive;
+import org.hibernate.envers.synchronization.AuditSync;
 
 import org.hibernate.NonUniqueResultException;
 import org.hibernate.Query;
 import org.hibernate.Session;
+import org.hibernate.event.EventSource;
 import org.hibernate.engine.SessionImplementor;
 import org.jboss.envers.query.VersionsQueryCreator;
 
@@ -190,7 +192,20 @@
         }
     }
 
-    public VersionsQueryCreator createQuery() {
+	@SuppressWarnings({"unchecked"})
+	public <T> T getCurrentRevision(Class<T> revisionEntityClass, boolean persist) {
+		if (!(session instanceof EventSource)) {
+			throw new IllegalArgumentException("The provided session is not an EventSource!");
+		}
+
+		// Obtaining the current audit sync
+		AuditSync auditSync = verCfg.getSyncManager().get((EventSource) session);
+
+		// And getting the current revision data
+		return (T) auditSync.getCurrentRevisionData(session, persist);
+	}
+
+	public VersionsQueryCreator createQuery() {
         return new VersionsQueryCreator(verCfg, this);
     }
 }

Modified: core/branches/envers-hibernate-3.3/src/main/java/org/hibernate/envers/revisioninfo/DefaultRevisionInfoGenerator.java
===================================================================
--- core/branches/envers-hibernate-3.3/src/main/java/org/hibernate/envers/revisioninfo/DefaultRevisionInfoGenerator.java	2009-05-03 13:57:41 UTC (rev 16502)
+++ core/branches/envers-hibernate-3.3/src/main/java/org/hibernate/envers/revisioninfo/DefaultRevisionInfoGenerator.java	2009-05-03 17:21:46 UTC (rev 16503)
@@ -63,14 +63,18 @@
         }
     }
 
-    private Object newRevision() {
-        Object revisionInfo;
+	public void saveRevisionData(Session session, Object revisionData) {
+        session.save(revisionInfoEntityName, revisionData);
+	}
+
+    public Object generate() {
+		Object revisionInfo;
         try {
             revisionInfo = revisionInfoClass.newInstance();
         } catch (Exception e) {
             throw new RuntimeException(e);
         }
-        
+
         revisionTimestampSetter.set(revisionInfo, System.currentTimeMillis(), null);
 
         if (listener != null) {
@@ -79,10 +83,4 @@
 
         return revisionInfo;
     }
-
-    public Object generate(Session session) {
-        Object revisionData = newRevision();
-        session.save(revisionInfoEntityName, revisionData);
-        return revisionData;
-    }
 }

Modified: core/branches/envers-hibernate-3.3/src/main/java/org/hibernate/envers/revisioninfo/RevisionInfoGenerator.java
===================================================================
--- core/branches/envers-hibernate-3.3/src/main/java/org/hibernate/envers/revisioninfo/RevisionInfoGenerator.java	2009-05-03 13:57:41 UTC (rev 16502)
+++ core/branches/envers-hibernate-3.3/src/main/java/org/hibernate/envers/revisioninfo/RevisionInfoGenerator.java	2009-05-03 17:21:46 UTC (rev 16503)
@@ -29,5 +29,6 @@
  * @author Adam Warski (adam at warski dot org)
  */
 public interface RevisionInfoGenerator {
-    Object generate(Session session);
+	void saveRevisionData(Session session, Object revisionData);
+    Object generate();
 }

Modified: core/branches/envers-hibernate-3.3/src/main/java/org/hibernate/envers/synchronization/AuditSync.java
===================================================================
--- core/branches/envers-hibernate-3.3/src/main/java/org/hibernate/envers/synchronization/AuditSync.java	2009-05-03 13:57:41 UTC (rev 16502)
+++ core/branches/envers-hibernate-3.3/src/main/java/org/hibernate/envers/synchronization/AuditSync.java	2009-05-03 17:21:46 UTC (rev 16503)
@@ -111,9 +111,8 @@
     }
 
     private void executeInSession(Session session) {
-        if (revisionData == null) {
-            revisionData = revisionInfoGenerator.generate(session);
-        }
+		// Making sure the revision data is persisted.
+        getCurrentRevisionData(session, true);
 
         AuditWorkUnit vwu;
 
@@ -127,31 +126,51 @@
         }
     }
 
+	public Object getCurrentRevisionData(Session session, boolean persist) {
+		// Generating the revision data if not yet generated
+		if (revisionData == null) {
+            revisionData = revisionInfoGenerator.generate();
+        }
+
+		// Saving the revision data, if not yet saved and persist is true
+		if (!session.contains(revisionData) && persist) {
+			revisionInfoGenerator.saveRevisionData(session, revisionData);
+		}
+
+		return revisionData;
+	}
+
     public void beforeCompletion() {
         if (workUnits.size() == 0 && undoQueue.size() == 0) {
             return;
         }
 
-        // see: http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4178431
-        if (FlushMode.isManualFlushMode(session.getFlushMode()) || session.isClosed()) {
-            Session temporarySession = null;
-            try {
-                temporarySession = session.getFactory().openTemporarySession();
+		try {
+			// see: http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4178431
+			if (FlushMode.isManualFlushMode(session.getFlushMode()) || session.isClosed()) {
+				Session temporarySession = null;
+				try {
+					temporarySession = session.getFactory().openTemporarySession();
 
-                executeInSession(temporarySession);
+					executeInSession(temporarySession);
 
-                temporarySession.flush();
-            } finally {
-                if (temporarySession != null) {
-                    temporarySession.close();
-                }
-            }
-        } else {
-            executeInSession(session);
+					temporarySession.flush();
+				} finally {
+					if (temporarySession != null) {
+						temporarySession.close();
+					}
+				}
+			} else {
+				executeInSession(session);
 
-            // Explicity flushing the session, as the auto-flush may have already happened.
-            session.flush();
-        }
+				// Explicity flushing the session, as the auto-flush may have already happened.
+				session.flush();
+			}
+		} catch (RuntimeException e) {
+			// Rolling back the transaction in case of any exceptions
+			session.getTransaction().rollback();
+			throw e;
+		}
     }
 
     public void afterCompletion(int i) {

Copied: core/branches/envers-hibernate-3.3/src/test/java/org/hibernate/envers/test/entities/PrimitiveTestEntity.java (from rev 16502, core/trunk/envers/src/test/java/org/hibernate/envers/test/entities/PrimitiveTestEntity.java)
===================================================================
--- core/branches/envers-hibernate-3.3/src/test/java/org/hibernate/envers/test/entities/PrimitiveTestEntity.java	                        (rev 0)
+++ core/branches/envers-hibernate-3.3/src/test/java/org/hibernate/envers/test/entities/PrimitiveTestEntity.java	2009-05-03 17:21:46 UTC (rev 16503)
@@ -0,0 +1,109 @@
+/*
+ * Hibernate, Relational Persistence for Idiomatic Java
+ *
+ * Copyright (c) 2008, Red Hat Middleware LLC or third-party contributors as
+ * indicated by the @author tags or express copyright attribution
+ * statements applied by the authors.  All third-party contributions are
+ * distributed under license by Red Hat Middleware LLC.
+ *
+ * This copyrighted material is made available to anyone wishing to use, modify,
+ * copy, or redistribute it subject to the terms and conditions of the GNU
+ * Lesser General Public License, as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License
+ * for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this distribution; if not, write to:
+ * Free Software Foundation, Inc.
+ * 51 Franklin Street, Fifth Floor
+ * Boston, MA  02110-1301  USA
+ */
+package org.hibernate.envers.test.entities;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+
+import org.hibernate.envers.Audited;
+
+/**
+ * @author Adam Warski (adam at warski dot org)
+ */
+ at Entity
+public class PrimitiveTestEntity {
+    @Id
+    @GeneratedValue
+    private Integer id;
+
+    @Audited
+    private int number;
+
+	private int number2;
+
+    public PrimitiveTestEntity() {
+    }
+
+	public PrimitiveTestEntity(int number, int number2) {
+		this.number = number;
+		this.number2 = number2;
+	}
+
+	public PrimitiveTestEntity(Integer id, int number, int number2) {
+		this.id = id;
+		this.number = number;
+		this.number2 = number2;
+	}
+
+	public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    public Integer getNumber() {
+        return number;
+    }
+
+    public void setNumber(Integer number) {
+        this.number = number;
+    }
+
+	public int getNumber2() {
+		return number2;
+	}
+
+	public void setNumber2(int number2) {
+		this.number2 = number2;
+	}
+
+	@Override
+	public boolean equals(Object o) {
+		if (this == o) return true;
+		if (!(o instanceof PrimitiveTestEntity)) return false;
+
+		PrimitiveTestEntity that = (PrimitiveTestEntity) o;
+
+		if (number != that.number) return false;
+		if (number2 != that.number2) return false;
+		if (id != null ? !id.equals(that.id) : that.id != null) return false;
+
+		return true;
+	}
+
+	@Override
+	public int hashCode() {
+		int result = id != null ? id.hashCode() : 0;
+		result = 31 * result + number;
+		result = 31 * result + number2;
+		return result;
+	}
+
+	public String toString() {
+        return "PTE(id = " + id + ", number = " + number + ", number2 = " + number2 + ")";
+    }
+}
\ No newline at end of file

Copied: core/branches/envers-hibernate-3.3/src/test/java/org/hibernate/envers/test/entities/reventity/CustomDataRevEntity.java (from rev 16502, core/trunk/envers/src/test/java/org/hibernate/envers/test/entities/reventity/CustomDataRevEntity.java)
===================================================================
--- core/branches/envers-hibernate-3.3/src/test/java/org/hibernate/envers/test/entities/reventity/CustomDataRevEntity.java	                        (rev 0)
+++ core/branches/envers-hibernate-3.3/src/test/java/org/hibernate/envers/test/entities/reventity/CustomDataRevEntity.java	2009-05-03 17:21:46 UTC (rev 16503)
@@ -0,0 +1,95 @@
+/*
+ * Hibernate, Relational Persistence for Idiomatic Java
+ *
+ * Copyright (c) 2008, Red Hat Middleware LLC or third-party contributors as
+ * indicated by the @author tags or express copyright attribution
+ * statements applied by the authors.  All third-party contributions are
+ * distributed under license by Red Hat Middleware LLC.
+ *
+ * This copyrighted material is made available to anyone wishing to use, modify,
+ * copy, or redistribute it subject to the terms and conditions of the GNU
+ * Lesser General Public License, as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License
+ * for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this distribution; if not, write to:
+ * Free Software Foundation, Inc.
+ * 51 Franklin Street, Fifth Floor
+ * Boston, MA  02110-1301  USA
+ */
+package org.hibernate.envers.test.entities.reventity;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+
+import org.hibernate.envers.RevisionEntity;
+import org.hibernate.envers.RevisionNumber;
+import org.hibernate.envers.RevisionTimestamp;
+
+/**
+ * @author Adam Warski (adam at warski dot org)
+ */
+ at Entity
+ at RevisionEntity
+public class CustomDataRevEntity {
+    @Id
+    @GeneratedValue
+    @RevisionNumber
+    private int customId;
+
+    @RevisionTimestamp
+    private long customTimestamp;
+
+	private String data;
+
+    public int getCustomId() {
+        return customId;
+    }
+
+    public void setCustomId(int customId) {
+        this.customId = customId;
+    }
+
+    public long getCustomTimestamp() {
+        return customTimestamp;
+    }
+
+    public void setCustomTimestamp(long customTimestamp) {
+        this.customTimestamp = customTimestamp;
+    }
+
+	public String getData() {
+		return data;
+	}
+
+	public void setData(String data) {
+		this.data = data;
+	}
+
+	@Override
+	public boolean equals(Object o) {
+		if (this == o) return true;
+		if (!(o instanceof CustomDataRevEntity)) return false;
+
+		CustomDataRevEntity that = (CustomDataRevEntity) o;
+
+		if (customId != that.customId) return false;
+		if (customTimestamp != that.customTimestamp) return false;
+		if (data != null ? !data.equals(that.data) : that.data != null) return false;
+
+		return true;
+	}
+
+	@Override
+	public int hashCode() {
+		int result = customId;
+		result = 31 * result + (int) (customTimestamp ^ (customTimestamp >>> 32));
+		result = 31 * result + (data != null ? data.hashCode() : 0);
+		return result;
+	}
+}
\ No newline at end of file

Copied: core/branches/envers-hibernate-3.3/src/test/java/org/hibernate/envers/test/integration/primitive (from rev 16502, core/trunk/envers/src/test/java/org/hibernate/envers/test/integration/primitive)

Deleted: core/branches/envers-hibernate-3.3/src/test/java/org/hibernate/envers/test/integration/primitive/PrimitiveAddDelete.java
===================================================================
--- core/trunk/envers/src/test/java/org/hibernate/envers/test/integration/primitive/PrimitiveAddDelete.java	2009-05-03 13:57:41 UTC (rev 16502)
+++ core/branches/envers-hibernate-3.3/src/test/java/org/hibernate/envers/test/integration/primitive/PrimitiveAddDelete.java	2009-05-03 17:21:46 UTC (rev 16503)
@@ -1,97 +0,0 @@
-/*
- * Hibernate, Relational Persistence for Idiomatic Java
- *
- * Copyright (c) 2008, Red Hat Middleware LLC or third-party contributors as
- * indicated by the @author tags or express copyright attribution
- * statements applied by the authors.  All third-party contributions are
- * distributed under license by Red Hat Middleware LLC.
- *
- * This copyrighted material is made available to anyone wishing to use, modify,
- * copy, or redistribute it subject to the terms and conditions of the GNU
- * Lesser General Public License, as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
- * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License
- * for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this distribution; if not, write to:
- * Free Software Foundation, Inc.
- * 51 Franklin Street, Fifth Floor
- * Boston, MA  02110-1301  USA
- */
-package org.hibernate.envers.test.integration.primitive;
-
-import java.util.Arrays;
-import java.util.List;
-import javax.persistence.EntityManager;
-
-import org.hibernate.envers.test.AbstractEntityTest;
-import org.hibernate.envers.test.entities.PrimitiveTestEntity;
-import org.testng.annotations.Test;
-
-import org.hibernate.ejb.Ejb3Configuration;
-
-/**
- * @author Adam Warski (adam at warski dot org)
- */
-public class PrimitiveAddDelete extends AbstractEntityTest {
-    private Integer id1;
-
-    public void configure(Ejb3Configuration cfg) {
-        cfg.addAnnotatedClass(PrimitiveTestEntity.class);
-    }
-
-    @Test
-    public void initData() {
-        EntityManager em = getEntityManager();
-
-		// Revision 1
-        em.getTransaction().begin();
-        PrimitiveTestEntity pte = new PrimitiveTestEntity(10, 11);
-        em.persist(pte);
-        id1 = pte.getId();
-        em.getTransaction().commit();
-
-		// Revision 2
-        em.getTransaction().begin();
-        pte = em.find(PrimitiveTestEntity.class, id1);
-        pte.setNumber(20);
-		pte.setNumber2(21);
-        em.getTransaction().commit();
-
-		// Revision 3
-        em.getTransaction().begin();
-        pte = em.find(PrimitiveTestEntity.class, id1);
-        em.remove(pte);
-        em.getTransaction().commit();		
-    }
-
-    @Test(dependsOnMethods = "initData")
-    public void testRevisionsCounts() {
-        assert Arrays.asList(1, 2, 3).equals(getAuditReader().getRevisions(PrimitiveTestEntity.class, id1));
-    }
-
-    @Test(dependsOnMethods = "initData")
-    public void testHistoryOfId1() {
-        PrimitiveTestEntity ver1 = new PrimitiveTestEntity(id1, 10, 0);
-        PrimitiveTestEntity ver2 = new PrimitiveTestEntity(id1, 20, 0);
-
-        assert getAuditReader().find(PrimitiveTestEntity.class, id1, 1).equals(ver1);
-        assert getAuditReader().find(PrimitiveTestEntity.class, id1, 2).equals(ver2);
-        assert getAuditReader().find(PrimitiveTestEntity.class, id1, 3) == null;
-    }
-
-	@Test(dependsOnMethods = "initData")
-	public void testQueryWithDeleted() {
-		// Selecting all entities, also the deleted ones
-		List entities = getAuditReader().createQuery().forRevisionsOfEntity(PrimitiveTestEntity.class, true, true)
-				.getResultList();
-
-		assert entities.size() == 3;
-		assert entities.get(0).equals(new PrimitiveTestEntity(id1, 10, 0));
-		assert entities.get(1).equals(new PrimitiveTestEntity(id1, 20, 0));
-		assert entities.get(2).equals(new PrimitiveTestEntity(id1, 0, 0));
-	}
-}
\ No newline at end of file

Copied: core/branches/envers-hibernate-3.3/src/test/java/org/hibernate/envers/test/integration/primitive/PrimitiveAddDelete.java (from rev 16502, core/trunk/envers/src/test/java/org/hibernate/envers/test/integration/primitive/PrimitiveAddDelete.java)
===================================================================
--- core/branches/envers-hibernate-3.3/src/test/java/org/hibernate/envers/test/integration/primitive/PrimitiveAddDelete.java	                        (rev 0)
+++ core/branches/envers-hibernate-3.3/src/test/java/org/hibernate/envers/test/integration/primitive/PrimitiveAddDelete.java	2009-05-03 17:21:46 UTC (rev 16503)
@@ -0,0 +1,97 @@
+/*
+ * Hibernate, Relational Persistence for Idiomatic Java
+ *
+ * Copyright (c) 2008, Red Hat Middleware LLC or third-party contributors as
+ * indicated by the @author tags or express copyright attribution
+ * statements applied by the authors.  All third-party contributions are
+ * distributed under license by Red Hat Middleware LLC.
+ *
+ * This copyrighted material is made available to anyone wishing to use, modify,
+ * copy, or redistribute it subject to the terms and conditions of the GNU
+ * Lesser General Public License, as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License
+ * for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this distribution; if not, write to:
+ * Free Software Foundation, Inc.
+ * 51 Franklin Street, Fifth Floor
+ * Boston, MA  02110-1301  USA
+ */
+package org.hibernate.envers.test.integration.primitive;
+
+import java.util.Arrays;
+import java.util.List;
+import javax.persistence.EntityManager;
+
+import org.hibernate.envers.test.AbstractEntityTest;
+import org.hibernate.envers.test.entities.PrimitiveTestEntity;
+import org.testng.annotations.Test;
+
+import org.hibernate.ejb.Ejb3Configuration;
+
+/**
+ * @author Adam Warski (adam at warski dot org)
+ */
+public class PrimitiveAddDelete extends AbstractEntityTest {
+    private Integer id1;
+
+    public void configure(Ejb3Configuration cfg) {
+        cfg.addAnnotatedClass(PrimitiveTestEntity.class);
+    }
+
+    @Test
+    public void initData() {
+        EntityManager em = getEntityManager();
+
+		// Revision 1
+        em.getTransaction().begin();
+        PrimitiveTestEntity pte = new PrimitiveTestEntity(10, 11);
+        em.persist(pte);
+        id1 = pte.getId();
+        em.getTransaction().commit();
+
+		// Revision 2
+        em.getTransaction().begin();
+        pte = em.find(PrimitiveTestEntity.class, id1);
+        pte.setNumber(20);
+		pte.setNumber2(21);
+        em.getTransaction().commit();
+
+		// Revision 3
+        em.getTransaction().begin();
+        pte = em.find(PrimitiveTestEntity.class, id1);
+        em.remove(pte);
+        em.getTransaction().commit();		
+    }
+
+    @Test(dependsOnMethods = "initData")
+    public void testRevisionsCounts() {
+        assert Arrays.asList(1, 2, 3).equals(getAuditReader().getRevisions(PrimitiveTestEntity.class, id1));
+    }
+
+    @Test(dependsOnMethods = "initData")
+    public void testHistoryOfId1() {
+        PrimitiveTestEntity ver1 = new PrimitiveTestEntity(id1, 10, 0);
+        PrimitiveTestEntity ver2 = new PrimitiveTestEntity(id1, 20, 0);
+
+        assert getAuditReader().find(PrimitiveTestEntity.class, id1, 1).equals(ver1);
+        assert getAuditReader().find(PrimitiveTestEntity.class, id1, 2).equals(ver2);
+        assert getAuditReader().find(PrimitiveTestEntity.class, id1, 3) == null;
+    }
+
+	@Test(dependsOnMethods = "initData")
+	public void testQueryWithDeleted() {
+		// Selecting all entities, also the deleted ones
+		List entities = getAuditReader().createQuery().forRevisionsOfEntity(PrimitiveTestEntity.class, true, true)
+				.getResultList();
+
+		assert entities.size() == 3;
+		assert entities.get(0).equals(new PrimitiveTestEntity(id1, 10, 0));
+		assert entities.get(1).equals(new PrimitiveTestEntity(id1, 20, 0));
+		assert entities.get(2).equals(new PrimitiveTestEntity(id1, 0, 0));
+	}
+}
\ No newline at end of file

Copied: core/branches/envers-hibernate-3.3/src/test/java/org/hibernate/envers/test/integration/reventity/CustomNoListener.java (from rev 16502, core/trunk/envers/src/test/java/org/hibernate/envers/test/integration/reventity/CustomNoListener.java)
===================================================================
--- core/branches/envers-hibernate-3.3/src/test/java/org/hibernate/envers/test/integration/reventity/CustomNoListener.java	                        (rev 0)
+++ core/branches/envers-hibernate-3.3/src/test/java/org/hibernate/envers/test/integration/reventity/CustomNoListener.java	2009-05-03 17:21:46 UTC (rev 16503)
@@ -0,0 +1,137 @@
+/*
+ * Hibernate, Relational Persistence for Idiomatic Java
+ *
+ * Copyright (c) 2008, Red Hat Middleware LLC or third-party contributors as
+ * indicated by the @author tags or express copyright attribution
+ * statements applied by the authors.  All third-party contributions are
+ * distributed under license by Red Hat Middleware LLC.
+ *
+ * This copyrighted material is made available to anyone wishing to use, modify,
+ * copy, or redistribute it subject to the terms and conditions of the GNU
+ * Lesser General Public License, as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License
+ * for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this distribution; if not, write to:
+ * Free Software Foundation, Inc.
+ * 51 Franklin Street, Fifth Floor
+ * Boston, MA  02110-1301  USA
+ */
+package org.hibernate.envers.test.integration.reventity;
+
+import java.util.Arrays;
+import java.util.Date;
+import javax.persistence.EntityManager;
+
+import org.hibernate.envers.AuditReader;
+import org.hibernate.envers.exception.RevisionDoesNotExistException;
+import org.hibernate.envers.test.AbstractEntityTest;
+import org.hibernate.envers.test.entities.StrTestEntity;
+import org.hibernate.envers.test.entities.reventity.CustomDataRevEntity;
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.Test;
+
+import org.hibernate.ejb.Ejb3Configuration;
+
+/**
+ * @author Adam Warski (adam at warski dot org)
+ */
+public class CustomNoListener extends AbstractEntityTest {
+    private Integer id;
+
+    public void configure(Ejb3Configuration cfg) {
+        cfg.addAnnotatedClass(StrTestEntity.class);
+        cfg.addAnnotatedClass(CustomDataRevEntity.class);
+    }
+
+    @BeforeClass(dependsOnMethods = "init")
+    public void initData() throws InterruptedException {        
+        EntityManager em = getEntityManager();
+
+		// Revision 1
+        em.getTransaction().begin();
+        StrTestEntity te = new StrTestEntity("x");
+        em.persist(te);
+        id = te.getId();
+
+		// Setting the data on the revision entity
+		CustomDataRevEntity custom = getAuditReader().getCurrentRevision(CustomDataRevEntity.class, false);
+		custom.setData("data1");
+
+        em.getTransaction().commit();
+
+        // Revision 2
+        em.getTransaction().begin();
+        te = em.find(StrTestEntity.class, id);
+        te.setStr("y");
+
+		// Setting the data on the revision entity
+		custom = getAuditReader().getCurrentRevision(CustomDataRevEntity.class, false);
+		custom.setData("data2");
+
+        em.getTransaction().commit();
+
+		// Revision 3 - no changes, but rev entity should be persisted
+        em.getTransaction().begin();
+
+		// Setting the data on the revision entity
+		custom = getAuditReader().getCurrentRevision(CustomDataRevEntity.class, true);
+		custom.setData("data3");
+
+        em.getTransaction().commit();
+
+		// No changes, rev entity won't be persisted
+        em.getTransaction().begin();
+
+		// Setting the data on the revision entity
+		custom = getAuditReader().getCurrentRevision(CustomDataRevEntity.class, false);
+		custom.setData("data4");
+
+        em.getTransaction().commit();
+
+		// Revision 4
+        em.getTransaction().begin();
+        te = em.find(StrTestEntity.class, id);
+        te.setStr("z");
+
+		// Setting the data on the revision entity
+		custom = getAuditReader().getCurrentRevision(CustomDataRevEntity.class, false);
+		custom.setData("data5");
+
+		custom = getAuditReader().getCurrentRevision(CustomDataRevEntity.class, false);
+		custom.setData("data5bis");
+
+        em.getTransaction().commit();
+    }
+
+    @Test
+    public void testFindRevision() {
+        AuditReader vr = getAuditReader();
+
+		assert "data1".equals(vr.findRevision(CustomDataRevEntity.class, 1).getData());
+		assert "data2".equals(vr.findRevision(CustomDataRevEntity.class, 2).getData());
+		assert "data3".equals(vr.findRevision(CustomDataRevEntity.class, 3).getData());
+		assert "data5bis".equals(vr.findRevision(CustomDataRevEntity.class, 4).getData());
+    }
+
+    @Test
+    public void testRevisionsCounts() {
+        assert Arrays.asList(1, 2, 4).equals(getAuditReader().getRevisions(StrTestEntity.class, id));
+    }
+
+    @Test
+    public void testHistoryOfId1() {
+        StrTestEntity ver1 = new StrTestEntity("x", id);
+        StrTestEntity ver2 = new StrTestEntity("y", id);
+        StrTestEntity ver3 = new StrTestEntity("z", id);
+
+        assert getAuditReader().find(StrTestEntity.class, id, 1).equals(ver1);
+        assert getAuditReader().find(StrTestEntity.class, id, 2).equals(ver2);
+        assert getAuditReader().find(StrTestEntity.class, id, 3).equals(ver2);
+        assert getAuditReader().find(StrTestEntity.class, id, 4).equals(ver3);
+    }
+}
\ No newline at end of file

Copied: core/branches/envers-hibernate-3.3/src/test/java/org/hibernate/envers/test/integration/reventity/ExceptionListener.java (from rev 16502, core/trunk/envers/src/test/java/org/hibernate/envers/test/integration/reventity/ExceptionListener.java)
===================================================================
--- core/branches/envers-hibernate-3.3/src/test/java/org/hibernate/envers/test/integration/reventity/ExceptionListener.java	                        (rev 0)
+++ core/branches/envers-hibernate-3.3/src/test/java/org/hibernate/envers/test/integration/reventity/ExceptionListener.java	2009-05-03 17:21:46 UTC (rev 16503)
@@ -0,0 +1,60 @@
+/*
+ * Hibernate, Relational Persistence for Idiomatic Java
+ *
+ * Copyright (c) 2008, Red Hat Middleware LLC or third-party contributors as
+ * indicated by the @author tags or express copyright attribution
+ * statements applied by the authors.  All third-party contributions are
+ * distributed under license by Red Hat Middleware LLC.
+ *
+ * This copyrighted material is made available to anyone wishing to use, modify,
+ * copy, or redistribute it subject to the terms and conditions of the GNU
+ * Lesser General Public License, as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License
+ * for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this distribution; if not, write to:
+ * Free Software Foundation, Inc.
+ * 51 Franklin Street, Fifth Floor
+ * Boston, MA  02110-1301  USA
+ */
+package org.hibernate.envers.test.integration.reventity;
+
+import javax.persistence.EntityManager;
+
+import org.hibernate.envers.test.AbstractEntityTest;
+import org.hibernate.envers.test.entities.StrTestEntity;
+import org.testng.annotations.Test;
+
+import org.hibernate.ejb.Ejb3Configuration;
+
+/**
+ * @author Adam Warski (adam at warski dot org)
+ */
+public class ExceptionListener extends AbstractEntityTest {
+    public void configure(Ejb3Configuration cfg) {
+        cfg.addAnnotatedClass(StrTestEntity.class);
+        cfg.addAnnotatedClass(ExceptionListenerRevEntity.class);
+    }
+
+    @Test
+    public void testTransactionRollback() throws InterruptedException {
+        // Trying to persist an entity - however the listener should throw an exception, so the entity
+		// shouldn't be persisted
+        EntityManager em = getEntityManager();
+        em.getTransaction().begin();
+        StrTestEntity te = new StrTestEntity("x");
+        em.persist(te);
+        em.getTransaction().commit();
+
+		// Checking if the entity became persisted
+		em = getEntityManager();
+        em.getTransaction().begin();
+        Long count = (Long) em.createQuery("select count(s) from StrTestEntity s where s.str = 'x'").getSingleResult();
+		assert count == 0l;
+        em.getTransaction().commit();
+    }
+}
\ No newline at end of file

Copied: core/branches/envers-hibernate-3.3/src/test/java/org/hibernate/envers/test/integration/reventity/ExceptionListenerRevEntity.java (from rev 16502, core/trunk/envers/src/test/java/org/hibernate/envers/test/integration/reventity/ExceptionListenerRevEntity.java)
===================================================================
--- core/branches/envers-hibernate-3.3/src/test/java/org/hibernate/envers/test/integration/reventity/ExceptionListenerRevEntity.java	                        (rev 0)
+++ core/branches/envers-hibernate-3.3/src/test/java/org/hibernate/envers/test/integration/reventity/ExceptionListenerRevEntity.java	2009-05-03 17:21:46 UTC (rev 16503)
@@ -0,0 +1,82 @@
+/*
+ * Hibernate, Relational Persistence for Idiomatic Java
+ *
+ * Copyright (c) 2008, Red Hat Middleware LLC or third-party contributors as
+ * indicated by the @author tags or express copyright attribution
+ * statements applied by the authors.  All third-party contributions are
+ * distributed under license by Red Hat Middleware LLC.
+ *
+ * This copyrighted material is made available to anyone wishing to use, modify,
+ * copy, or redistribute it subject to the terms and conditions of the GNU
+ * Lesser General Public License, as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License
+ * for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this distribution; if not, write to:
+ * Free Software Foundation, Inc.
+ * 51 Franklin Street, Fifth Floor
+ * Boston, MA  02110-1301  USA
+ */
+package org.hibernate.envers.test.integration.reventity;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+
+import org.hibernate.envers.RevisionEntity;
+import org.hibernate.envers.RevisionNumber;
+import org.hibernate.envers.RevisionTimestamp;
+
+/**
+ * @author Adam Warski (adam at warski dot org)
+ */
+ at Entity
+ at RevisionEntity(TestExceptionRevisionListener.class)
+public class ExceptionListenerRevEntity {
+    @Id
+    @GeneratedValue
+    @RevisionNumber
+    private int id;
+
+    @RevisionTimestamp
+    private long timestamp;
+
+    public int getId() {
+        return id;
+    }
+
+    public void setId(int id) {
+        this.id = id;
+    }
+
+    public long getTimestamp() {
+        return timestamp;
+    }
+
+    public void setTimestamp(long timestamp) {
+        this.timestamp = timestamp;
+    }
+
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (!(o instanceof ExceptionListenerRevEntity)) return false;
+
+        ExceptionListenerRevEntity revEntity = (ExceptionListenerRevEntity) o;
+
+        if (id != revEntity.id) return false;
+        if (timestamp != revEntity.timestamp) return false;
+
+        return true;
+    }
+
+    public int hashCode() {
+        int result;
+        result = id;
+        result = 31 * result + (int) (timestamp ^ (timestamp >>> 32));
+        return result;
+    }
+}
\ No newline at end of file

Copied: core/branches/envers-hibernate-3.3/src/test/java/org/hibernate/envers/test/integration/reventity/TestExceptionRevisionListener.java (from rev 16502, core/trunk/envers/src/test/java/org/hibernate/envers/test/integration/reventity/TestExceptionRevisionListener.java)
===================================================================
--- core/branches/envers-hibernate-3.3/src/test/java/org/hibernate/envers/test/integration/reventity/TestExceptionRevisionListener.java	                        (rev 0)
+++ core/branches/envers-hibernate-3.3/src/test/java/org/hibernate/envers/test/integration/reventity/TestExceptionRevisionListener.java	2009-05-03 17:21:46 UTC (rev 16503)
@@ -0,0 +1,35 @@
+/*
+ * Hibernate, Relational Persistence for Idiomatic Java
+ *
+ * Copyright (c) 2008, Red Hat Middleware LLC or third-party contributors as
+ * indicated by the @author tags or express copyright attribution
+ * statements applied by the authors.  All third-party contributions are
+ * distributed under license by Red Hat Middleware LLC.
+ *
+ * This copyrighted material is made available to anyone wishing to use, modify,
+ * copy, or redistribute it subject to the terms and conditions of the GNU
+ * Lesser General Public License, as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License
+ * for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this distribution; if not, write to:
+ * Free Software Foundation, Inc.
+ * 51 Franklin Street, Fifth Floor
+ * Boston, MA  02110-1301  USA
+ */
+package org.hibernate.envers.test.integration.reventity;
+
+import org.hibernate.envers.RevisionListener;
+
+/**
+ * @author Adam Warski (adam at warski dot org)
+ */
+public class TestExceptionRevisionListener implements RevisionListener {
+    public void newRevision(Object revisionEntity) {
+        throw new RuntimeException();
+    }
+}
\ No newline at end of file

Modified: core/branches/envers-hibernate-3.3/src/test/resources/testng.xml
===================================================================
--- core/branches/envers-hibernate-3.3/src/test/resources/testng.xml	2009-05-03 13:57:41 UTC (rev 16502)
+++ core/branches/envers-hibernate-3.3/src/test/resources/testng.xml	2009-05-03 17:21:46 UTC (rev 16503)
@@ -42,6 +42,7 @@
             <package name="org.hibernate.envers.test.integration.onetoone.bidirectional" />
             <package name="org.hibernate.envers.test.integration.onetoone.bidirectional.ids" />
             <package name="org.hibernate.envers.test.integration.onetoone.unidirectional" />
+            <package name="org.hibernate.envers.test.integration.primitive" />
             <package name="org.hibernate.envers.test.integration.properties" />
             <package name="org.hibernate.envers.test.integration.query" />
             <package name="org.hibernate.envers.test.integration.query.ids" />




More information about the hibernate-commits mailing list