[hibernate-commits] Hibernate SVN: r15601 - in core/trunk/envers/src/test: java/org/hibernate/envers/test/performance and 2 other directories.

hibernate-commits at lists.jboss.org hibernate-commits at lists.jboss.org
Thu Nov 20 08:09:44 EST 2008


Author: adamw
Date: 2008-11-20 08:09:44 -0500 (Thu, 20 Nov 2008)
New Revision: 15601

Added:
   core/trunk/envers/src/test/java/org/hibernate/envers/test/performance/ComplexInsertPerformance.java
   core/trunk/envers/src/test/java/org/hibernate/envers/test/performance/InsertsOneTransactionPerformance.java
   core/trunk/envers/src/test/java/org/hibernate/envers/test/performance/complex/
   core/trunk/envers/src/test/java/org/hibernate/envers/test/performance/complex/ChildEntity1.java
   core/trunk/envers/src/test/java/org/hibernate/envers/test/performance/complex/ChildEntity2.java
   core/trunk/envers/src/test/java/org/hibernate/envers/test/performance/complex/RootEntity.java
Modified:
   core/trunk/envers/src/test/java/org/hibernate/envers/test/AbstractEntityTest.java
   core/trunk/envers/src/test/java/org/hibernate/envers/test/performance/AbstractPerformanceTest.java
   core/trunk/envers/src/test/java/org/hibernate/envers/test/performance/InsertsPerformance.java
   core/trunk/envers/src/test/java/org/hibernate/envers/test/performance/UpdatesPerformance.java
   core/trunk/envers/src/test/resources/hibernate.test.cfg.xml
Log:
Performance tests

Modified: core/trunk/envers/src/test/java/org/hibernate/envers/test/AbstractEntityTest.java
===================================================================
--- core/trunk/envers/src/test/java/org/hibernate/envers/test/AbstractEntityTest.java	2008-11-19 17:38:55 UTC (rev 15600)
+++ core/trunk/envers/src/test/java/org/hibernate/envers/test/AbstractEntityTest.java	2008-11-20 13:09:44 UTC (rev 15601)
@@ -29,10 +29,13 @@
 
 import org.hibernate.envers.AuditReader;
 import org.hibernate.envers.AuditReaderFactory;
+import org.hibernate.envers.event.AuditEventListener;
 import org.testng.annotations.BeforeClass;
 import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.AfterClass;
 
 import org.hibernate.ejb.Ejb3Configuration;
+import org.hibernate.event.*;
 
 /**
  * @author Adam Warski (adam at warski dot org)
@@ -42,22 +45,50 @@
     private EntityManager entityManager;
     private AuditReader auditReader;
     private Ejb3Configuration cfg;
+    private boolean audited;
 
     public abstract void configure(Ejb3Configuration cfg);
 
-    @BeforeMethod
-    public void newEntityManager() {
+    protected void initListeners() {
+        AuditEventListener listener = new AuditEventListener();
+        cfg.getEventListeners().setPostInsertEventListeners(new PostInsertEventListener[] { listener });
+        cfg.getEventListeners().setPostUpdateEventListeners(new PostUpdateEventListener[] { listener });
+        cfg.getEventListeners().setPostDeleteEventListeners(new PostDeleteEventListener[] { listener });
+        cfg.getEventListeners().setPreCollectionUpdateEventListeners(new PreCollectionUpdateEventListener[] { listener });
+        cfg.getEventListeners().setPreCollectionRemoveEventListeners(new PreCollectionRemoveEventListener[] { listener });
+        cfg.getEventListeners().setPostCollectionRecreateEventListeners(new PostCollectionRecreateEventListener[] { listener });
+    }
+
+    private void closeEntityManager() {
         if (entityManager != null) {
             entityManager.close();
+            entityManager = null;
         }
+    }
+
+    @BeforeMethod
+    public void newEntityManager() {
+        closeEntityManager();
         
         entityManager = emf.createEntityManager();
-        auditReader = AuditReaderFactory.get(entityManager);
+
+        if (audited) {
+            auditReader = AuditReaderFactory.get(entityManager);
+        }
     }
 
     @BeforeClass
     public void init() throws IOException {
+        init(true);
+    }
+
+    protected void init(boolean audited) throws IOException {
+        this.audited = audited;
+
         cfg = new Ejb3Configuration();
+        if (audited) {
+            initListeners();
+        }
         cfg.configure("hibernate.test.cfg.xml");
         configure(cfg);
         emf = cfg.buildEntityManagerFactory();
@@ -65,6 +96,12 @@
         newEntityManager();
     }
 
+    @AfterClass
+    public void close() {
+        closeEntityManager();
+        emf.close();
+    }
+
     public EntityManager getEntityManager() {
         return entityManager;
     }

Modified: core/trunk/envers/src/test/java/org/hibernate/envers/test/performance/AbstractPerformanceTest.java
===================================================================
--- core/trunk/envers/src/test/java/org/hibernate/envers/test/performance/AbstractPerformanceTest.java	2008-11-19 17:38:55 UTC (rev 15600)
+++ core/trunk/envers/src/test/java/org/hibernate/envers/test/performance/AbstractPerformanceTest.java	2008-11-20 13:09:44 UTC (rev 15601)
@@ -24,8 +24,11 @@
 package org.hibernate.envers.test.performance;
 
 import org.hibernate.envers.test.AbstractEntityTest;
-import org.hibernate.envers.tools.Pair;
 
+import java.io.IOException;
+import java.util.List;
+import java.util.ArrayList;
+
 /**
  * @author Adam Warski (adam at warski dot org)
  */
@@ -34,49 +37,72 @@
         return (milliseconds/1000) + "." + (milliseconds%1000);
     }
 
-    protected long measureTime(Runnable r) {
-        long start = System.currentTimeMillis();
-        r.run();
-        return System.currentTimeMillis() - start;
+    protected abstract void doTest();
+
+    private void printResults(long unaudited, long audited) {
+        System.out.println("Unaudited: " + getSecondsString(unaudited));
+        System.out.println("  Audited: " + getSecondsString(audited));
+        System.out.println("    Delta: " + getSecondsString(audited-unaudited));
+        System.out.println("   Factor: " + (double)audited/unaudited);
     }
 
-    protected abstract Pair<Long, Long> doTest();
+    private long startTime;
+    private long runTotal;
 
-    protected abstract String getName();
+    protected void start() {
+        startTime = System.currentTimeMillis();
+    }
 
-    private long totalUnversioned;
-    private long totalVersioned;
+    protected void stop() {
+        long stopTime = System.currentTimeMillis();
+        runTotal += stopTime - startTime;
+    }
 
-    private void printResults(long unversioned, long versioned) {
-        System.out.println("Unversioned: " + getSecondsString(unversioned));
-        System.out.println("  Versioned: " + getSecondsString(versioned));
-        System.out.println("      Delta: " + getSecondsString(versioned-unversioned));
-        System.out.println("     Factor: " + (double)versioned/unversioned);
+    protected void reset() {
+        runTotal = 0;
     }
 
-    private void test(boolean count) {
-        Pair<Long, Long> result = doTest();
-        long unversioned = result.getFirst();
-        long versioned = result.getSecond();
+    public long run(int numberOfRuns, List<Long> results) {
+        long total = 0;
+        for (int i=0; i<=numberOfRuns; i++) {
+            System.out.println();
+            System.out.println("RUN " + i);
+            reset();
+            doTest();
+            results.add(runTotal);
+            total += runTotal;
 
-        totalUnversioned += unversioned;
-        totalVersioned += versioned;
+            newEntityManager();
 
-        printResults(unversioned, versioned);
+            /*System.gc();
+            System.gc();
+            System.gc();
+            System.out.println(Runtime.getRuntime().freeMemory() + ", " + Runtime.getRuntime().totalMemory() + ", "
+                    + (Runtime.getRuntime().totalMemory()-Runtime.getRuntime().freeMemory()));*/
+        }
+
+        return total;
     }
 
-    public void run(int numberOfRuns) {
+    public void test(int numberOfRuns) throws IOException {
+        List<Long> unauditedRuns = new ArrayList<Long>();
+        List<Long> auditedRuns = new ArrayList<Long>();
+
+        init(true);
+        long audited = run(numberOfRuns, auditedRuns);
+        close();
+
+        init(false);
+        long unaudited = run(numberOfRuns, unauditedRuns);
+        close();
+
         for (int i=0; i<=numberOfRuns; i++) {
-            System.out.println("");
-            System.out.println(getName() + " TEST, RUN " + i);
-            test(i != 0);
+            System.out.println("RUN " + i);
+            printResults(unauditedRuns.get(i), auditedRuns.get(i));
+            System.out.println();
         }
 
-        totalUnversioned /= numberOfRuns;
-        totalVersioned /= numberOfRuns;
-
-        System.out.println("");
-        System.out.println(getName() + " TEST, AVERAGE");
-        printResults(totalUnversioned, totalVersioned);
+        System.out.println("TOTAL");
+        printResults(unaudited, audited);
     }
 }

Copied: core/trunk/envers/src/test/java/org/hibernate/envers/test/performance/ComplexInsertPerformance.java (from rev 15586, core/trunk/envers/src/test/java/org/hibernate/envers/test/performance/InsertsPerformance.java)
===================================================================
--- core/trunk/envers/src/test/java/org/hibernate/envers/test/performance/ComplexInsertPerformance.java	                        (rev 0)
+++ core/trunk/envers/src/test/java/org/hibernate/envers/test/performance/ComplexInsertPerformance.java	2008-11-20 13:09:44 UTC (rev 15601)
@@ -0,0 +1,105 @@
+/*
+ * 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.performance;
+
+import java.io.IOException;
+import java.util.Date;
+import java.util.HashSet;
+import javax.persistence.EntityManager;
+
+import org.hibernate.envers.test.performance.complex.RootEntity;
+import org.hibernate.envers.test.performance.complex.ChildEntity2;
+import org.hibernate.envers.test.performance.complex.ChildEntity1;
+
+import org.hibernate.ejb.Ejb3Configuration;
+
+/**
+ * @author Adam Warski (adam at warski dot org)
+ */
+public class ComplexInsertPerformance extends AbstractPerformanceTest {
+    public void configure(Ejb3Configuration cfg) {
+        cfg.addAnnotatedClass(RootEntity.class);
+        cfg.addAnnotatedClass(ChildEntity1.class);
+        cfg.addAnnotatedClass(ChildEntity2.class);
+    }
+
+    private final static int NUMBER_INSERTS = 100;
+
+    private long idCounter = 0;
+
+    private ChildEntity2 createChildEntity2() {
+        ChildEntity2 ce = new ChildEntity2();
+        ce.setId(idCounter++);
+        ce.setNumber(12345678);
+        ce.setData("some data, not really meaningful");
+        ce.setStrings(new HashSet<String>());
+        ce.getStrings().add("aaa");
+        ce.getStrings().add("bbb");
+        ce.getStrings().add("ccc");
+
+        return ce;
+    }
+
+    private ChildEntity1 createChildEntity1() {
+        ChildEntity1 ce = new ChildEntity1();
+        ce.setId(idCounter++);
+        ce.setData1("xxx");
+        ce.setData2("yyy");
+        ce.setChild1(createChildEntity2());
+        ce.setChild2(createChildEntity2());
+
+        return ce;
+    }
+
+    protected void doTest() {
+        for (int i=0; i<NUMBER_INSERTS; i++) {
+            newEntityManager();
+            EntityManager entityManager = getEntityManager();
+
+            entityManager.getTransaction().begin();
+
+            RootEntity re = new RootEntity();
+            re.setId(idCounter++);
+            re.setData1("data1");
+            re.setData2("data2");
+            re.setDate1(new Date());
+            re.setNumber1(123);
+            re.setNumber2(456);
+            re.setChild1(createChildEntity1());
+            re.setChild2(createChildEntity1());
+            re.setChild3(createChildEntity1());
+
+            start();
+            entityManager.persist(re);            
+            entityManager.getTransaction().commit();
+            stop();
+        }
+    }
+
+    public static void main(String[] args) throws IOException {
+        ComplexInsertPerformance insertsPerformance = new ComplexInsertPerformance();
+        insertsPerformance.test(3);
+    }
+}


Property changes on: core/trunk/envers/src/test/java/org/hibernate/envers/test/performance/ComplexInsertPerformance.java
___________________________________________________________________
Name: svn:mergeinfo
   + 

Copied: core/trunk/envers/src/test/java/org/hibernate/envers/test/performance/InsertsOneTransactionPerformance.java (from rev 15586, core/trunk/envers/src/test/java/org/hibernate/envers/test/performance/InsertsPerformance.java)
===================================================================
--- core/trunk/envers/src/test/java/org/hibernate/envers/test/performance/InsertsOneTransactionPerformance.java	                        (rev 0)
+++ core/trunk/envers/src/test/java/org/hibernate/envers/test/performance/InsertsOneTransactionPerformance.java	2008-11-20 13:09:44 UTC (rev 15601)
@@ -0,0 +1,59 @@
+/*
+ * 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.performance;
+
+import java.io.IOException;
+import javax.persistence.EntityManager;
+
+import org.hibernate.envers.test.entities.StrTestEntity;
+
+import org.hibernate.ejb.Ejb3Configuration;
+
+/**
+ * @author Adam Warski (adam at warski dot org)
+ */
+public class InsertsOneTransactionPerformance extends AbstractPerformanceTest {
+    public void configure(Ejb3Configuration cfg) {
+        cfg.addAnnotatedClass(StrTestEntity.class);
+    }
+
+    private final static int NUMBER_INSERTS = 5000;
+
+    protected void doTest() {
+        EntityManager entityManager = getEntityManager();
+        entityManager.getTransaction().begin();
+        start();
+        for (int i=0; i<NUMBER_INSERTS; i++) {
+            entityManager.persist(new StrTestEntity("x" + i));
+        }
+        entityManager.getTransaction().commit();
+        stop();
+    }
+
+    public static void main(String[] args) throws IOException {
+        InsertsOneTransactionPerformance insertsOneTransactionPerformance = new InsertsOneTransactionPerformance();
+        insertsOneTransactionPerformance.test(3);
+    }
+}
\ No newline at end of file


Property changes on: core/trunk/envers/src/test/java/org/hibernate/envers/test/performance/InsertsOneTransactionPerformance.java
___________________________________________________________________
Name: svn:mergeinfo
   + 

Modified: core/trunk/envers/src/test/java/org/hibernate/envers/test/performance/InsertsPerformance.java
===================================================================
--- core/trunk/envers/src/test/java/org/hibernate/envers/test/performance/InsertsPerformance.java	2008-11-19 17:38:55 UTC (rev 15600)
+++ core/trunk/envers/src/test/java/org/hibernate/envers/test/performance/InsertsPerformance.java	2008-11-20 13:09:44 UTC (rev 15601)
@@ -27,8 +27,6 @@
 import javax.persistence.EntityManager;
 
 import org.hibernate.envers.test.entities.StrTestEntity;
-import org.hibernate.envers.test.entities.UnversionedStrTestEntity;
-import org.hibernate.envers.tools.Pair;
 
 import org.hibernate.ejb.Ejb3Configuration;
 
@@ -38,43 +36,25 @@
 public class InsertsPerformance extends AbstractPerformanceTest {
     public void configure(Ejb3Configuration cfg) {
         cfg.addAnnotatedClass(StrTestEntity.class);
-        cfg.addAnnotatedClass(UnversionedStrTestEntity.class);
     }
 
-    private final static int NUMBER_INSERTS = 1000;
-    
-    private void insertUnversioned() {
-        EntityManager entityManager = getEntityManager();
-        for (int i=0; i<NUMBER_INSERTS; i++) {
-            entityManager.getTransaction().begin();
-            entityManager.persist(new UnversionedStrTestEntity("x" + i));
-            entityManager.getTransaction().commit();
-        }
-    }
+    private final static int NUMBER_INSERTS = 500;
 
-    private void insertVersioned() {
-        EntityManager entityManager = getEntityManager();
+    protected void doTest() {
         for (int i=0; i<NUMBER_INSERTS; i++) {
+            newEntityManager();
+            EntityManager entityManager = getEntityManager();
+            
             entityManager.getTransaction().begin();
+            start();
             entityManager.persist(new StrTestEntity("x" + i));
             entityManager.getTransaction().commit();
+            stop();
         }
     }
 
-    protected Pair<Long, Long> doTest() {
-        long unversioned = measureTime(new Runnable() { public void run() { insertUnversioned(); } });
-        long versioned = measureTime(new Runnable() { public void run() { insertVersioned(); } });
-
-        return Pair.make(unversioned, versioned);
-    }
-
-    protected String getName() {
-        return "INSERTS";
-    }
-
     public static void main(String[] args) throws IOException {
         InsertsPerformance insertsPerformance = new InsertsPerformance();
-        insertsPerformance.init();
-        insertsPerformance.run(10);
+        insertsPerformance.test(3);
     }
 }

Modified: core/trunk/envers/src/test/java/org/hibernate/envers/test/performance/UpdatesPerformance.java
===================================================================
--- core/trunk/envers/src/test/java/org/hibernate/envers/test/performance/UpdatesPerformance.java	2008-11-19 17:38:55 UTC (rev 15600)
+++ core/trunk/envers/src/test/java/org/hibernate/envers/test/performance/UpdatesPerformance.java	2008-11-20 13:09:44 UTC (rev 15601)
@@ -30,9 +30,6 @@
 import javax.persistence.EntityManager;
 
 import org.hibernate.envers.test.entities.StrTestEntity;
-import org.hibernate.envers.test.entities.UnversionedStrTestEntity;
-import org.hibernate.envers.tools.Pair;
-
 import org.hibernate.ejb.Ejb3Configuration;
 
 /**
@@ -41,71 +38,46 @@
 public class UpdatesPerformance extends AbstractPerformanceTest {
     public void configure(Ejb3Configuration cfg) {
         cfg.addAnnotatedClass(StrTestEntity.class);
-        cfg.addAnnotatedClass(UnversionedStrTestEntity.class);
     }
 
-    private final static int NUMBER_UPDATES = 1000;
+    private final static int NUMBER_UPDATES = 500;
     private final static int NUMBER_ENTITIES = 10;
 
     private Random random = new Random();
 
-    private List<Integer> unversioned_ids = new ArrayList<Integer>();
-    private List<Integer> versioned_ids = new ArrayList<Integer>();
+    private List<Integer> ids = new ArrayList<Integer>();
 
-    public void setup() {
+    private void setup() {
         EntityManager entityManager = getEntityManager();
         entityManager.getTransaction().begin();
-        for (int i=0; i<NUMBER_ENTITIES; i++) {
-            UnversionedStrTestEntity testEntity = new UnversionedStrTestEntity("x" + i);
-            entityManager.persist(testEntity);
-            unversioned_ids.add(testEntity.getId());
-        }
 
         for (int i=0; i<NUMBER_ENTITIES; i++) {
             StrTestEntity testEntity = new StrTestEntity("x" + i);
             entityManager.persist(testEntity);
-            versioned_ids.add(testEntity.getId());
+            ids.add(testEntity.getId());
         }
         entityManager.getTransaction().commit();
     }
 
-    private void updateUnversioned() {
-        EntityManager entityManager = getEntityManager();
-        for (int i=0; i<NUMBER_UPDATES; i++) {
-            entityManager.getTransaction().begin();
-            Integer id = unversioned_ids.get(random.nextInt(NUMBER_ENTITIES));
-            UnversionedStrTestEntity testEntity = entityManager.find(UnversionedStrTestEntity.class, id);
-            testEntity.setStr("z" + i);
-            entityManager.getTransaction().commit();
-        }
-    }
+    protected void doTest() {
+        setup();
 
-    private void updateVersioned() {
-        EntityManager entityManager = getEntityManager();
         for (int i=0; i<NUMBER_UPDATES; i++) {
+            newEntityManager();
+            EntityManager entityManager = getEntityManager();
+
             entityManager.getTransaction().begin();
-            Integer id = versioned_ids.get(random.nextInt(NUMBER_ENTITIES));
+            Integer id = ids.get(random.nextInt(NUMBER_ENTITIES));
+            start();
             StrTestEntity testEntity = entityManager.find(StrTestEntity.class, id);
             testEntity.setStr("z" + i);
             entityManager.getTransaction().commit();
+            stop();
         }
     }
 
-    protected Pair<Long, Long> doTest() {
-        long unversioned = measureTime(new Runnable() { public void run() { updateUnversioned(); } });
-        long versioned = measureTime(new Runnable() { public void run() { updateVersioned(); } });
-
-        return Pair.make(unversioned, versioned);
-    }
-
-    protected String getName() {
-        return "UPDATES";
-    }
-
     public static void main(String[] args) throws IOException {
         UpdatesPerformance updatesPerformance = new UpdatesPerformance();
-        updatesPerformance.init();
-        updatesPerformance.setup();
-        updatesPerformance.run(10);
+        updatesPerformance.test(3);
     }
 }
\ No newline at end of file

Added: core/trunk/envers/src/test/java/org/hibernate/envers/test/performance/complex/ChildEntity1.java
===================================================================
--- core/trunk/envers/src/test/java/org/hibernate/envers/test/performance/complex/ChildEntity1.java	                        (rev 0)
+++ core/trunk/envers/src/test/java/org/hibernate/envers/test/performance/complex/ChildEntity1.java	2008-11-20 13:09:44 UTC (rev 15601)
@@ -0,0 +1,113 @@
+/*
+ * 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.performance.complex;
+
+import org.hibernate.envers.Audited;
+
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.ManyToOne;
+import javax.persistence.CascadeType;
+
+/**
+ * @author Adam Warski (adam at warski dot org)
+ */
+ at Entity
+ at Audited
+public class ChildEntity1 {
+    @Id
+    private Long id;
+
+    @ManyToOne(cascade = CascadeType.ALL)
+    private ChildEntity2 child1;
+
+    @ManyToOne(cascade = CascadeType.ALL)
+    private ChildEntity2 child2;
+
+    private String data1;
+
+    private String data2;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public ChildEntity2 getChild1() {
+        return child1;
+    }
+
+    public void setChild1(ChildEntity2 child1) {
+        this.child1 = child1;
+    }
+
+    public ChildEntity2 getChild2() {
+        return child2;
+    }
+
+    public void setChild2(ChildEntity2 child2) {
+        this.child2 = child2;
+    }
+
+    public String getData1() {
+        return data1;
+    }
+
+    public void setData1(String data1) {
+        this.data1 = data1;
+    }
+
+    public String getData2() {
+        return data2;
+    }
+
+    public void setData2(String data2) {
+        this.data2 = data2;
+    }
+
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (!(o instanceof ChildEntity1)) return false;
+
+        ChildEntity1 that = (ChildEntity1) o;
+
+        if (data1 != null ? !data1.equals(that.data1) : that.data1 != null) return false;
+        if (data2 != null ? !data2.equals(that.data2) : that.data2 != null) return false;
+        if (id != null ? !id.equals(that.id) : that.id != null) return false;
+
+        return true;
+    }
+
+    public int hashCode() {
+        int result;
+        result = (id != null ? id.hashCode() : 0);
+        result = 31 * result + (data1 != null ? data1.hashCode() : 0);
+        result = 31 * result + (data2 != null ? data2.hashCode() : 0);
+        return result;
+    }
+}

Added: core/trunk/envers/src/test/java/org/hibernate/envers/test/performance/complex/ChildEntity2.java
===================================================================
--- core/trunk/envers/src/test/java/org/hibernate/envers/test/performance/complex/ChildEntity2.java	                        (rev 0)
+++ core/trunk/envers/src/test/java/org/hibernate/envers/test/performance/complex/ChildEntity2.java	2008-11-20 13:09:44 UTC (rev 15601)
@@ -0,0 +1,102 @@
+/*
+ * 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.performance.complex;
+
+import org.hibernate.envers.Audited;
+import org.hibernate.annotations.CollectionOfElements;
+
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import java.util.Set;
+
+/**
+ * @author Adam Warski (adam at warski dot org)
+ */
+ at Entity
+ at Audited
+public class ChildEntity2 {
+    @Id
+    private Long id;
+
+    private String data;
+
+    private Integer number;
+
+    @CollectionOfElements
+    private Set<String> strings;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public String getData() {
+        return data;
+    }
+
+    public void setData(String data) {
+        this.data = data;
+    }
+
+    public Integer getNumber() {
+        return number;
+    }
+
+    public void setNumber(Integer number) {
+        this.number = number;
+    }
+
+    public Set<String> getStrings() {
+        return strings;
+    }
+
+    public void setStrings(Set<String> strings) {
+        this.strings = strings;
+    }
+
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (!(o instanceof ChildEntity2)) return false;
+
+        ChildEntity2 that = (ChildEntity2) o;
+
+        if (data != null ? !data.equals(that.data) : that.data != null) return false;
+        if (id != null ? !id.equals(that.id) : that.id != null) return false;
+        if (number != null ? !number.equals(that.number) : that.number != null) return false;
+
+        return true;
+    }
+
+    public int hashCode() {
+        int result;
+        result = (id != null ? id.hashCode() : 0);
+        result = 31 * result + (data != null ? data.hashCode() : 0);
+        result = 31 * result + (number != null ? number.hashCode() : 0);
+        return result;
+    }
+}
\ No newline at end of file

Added: core/trunk/envers/src/test/java/org/hibernate/envers/test/performance/complex/RootEntity.java
===================================================================
--- core/trunk/envers/src/test/java/org/hibernate/envers/test/performance/complex/RootEntity.java	                        (rev 0)
+++ core/trunk/envers/src/test/java/org/hibernate/envers/test/performance/complex/RootEntity.java	2008-11-20 13:09:44 UTC (rev 15601)
@@ -0,0 +1,159 @@
+/*
+ * 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.performance.complex;
+
+import org.hibernate.envers.Audited;
+
+import javax.persistence.*;
+import java.util.Date;
+
+/**
+ * @author Adam Warski (adam at warski dot org)
+ */
+ at Entity
+ at Audited
+public class RootEntity {
+    @Id
+    private Long id;
+
+    private String data1;
+
+    private String data2;
+
+    private Integer number1;
+
+    private Integer number2;
+
+    @Temporal(TemporalType.TIMESTAMP)
+    private Date date1;
+
+    @ManyToOne(cascade = CascadeType.ALL)
+    private ChildEntity1 child1;
+
+    @ManyToOne(cascade = CascadeType.ALL)
+    private ChildEntity1 child2;
+
+    @ManyToOne(cascade = CascadeType.ALL)
+    private ChildEntity1 child3;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public String getData1() {
+        return data1;
+    }
+
+    public void setData1(String data1) {
+        this.data1 = data1;
+    }
+
+    public String getData2() {
+        return data2;
+    }
+
+    public void setData2(String data2) {
+        this.data2 = data2;
+    }
+
+    public Integer getNumber1() {
+        return number1;
+    }
+
+    public void setNumber1(Integer number1) {
+        this.number1 = number1;
+    }
+
+    public Integer getNumber2() {
+        return number2;
+    }
+
+    public void setNumber2(Integer number2) {
+        this.number2 = number2;
+    }
+
+    public Date getDate1() {
+        return date1;
+    }
+
+    public void setDate1(Date date1) {
+        this.date1 = date1;
+    }
+
+    public ChildEntity1 getChild1() {
+        return child1;
+    }
+
+    public void setChild1(ChildEntity1 child1) {
+        this.child1 = child1;
+    }
+
+    public ChildEntity1 getChild2() {
+        return child2;
+    }
+
+    public void setChild2(ChildEntity1 child2) {
+        this.child2 = child2;
+    }
+
+    public ChildEntity1 getChild3() {
+        return child3;
+    }
+
+    public void setChild3(ChildEntity1 child3) {
+        this.child3 = child3;
+    }
+
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (!(o instanceof RootEntity)) return false;
+
+        RootEntity that = (RootEntity) o;
+
+        if (data1 != null ? !data1.equals(that.data1) : that.data1 != null) return false;
+        if (data2 != null ? !data2.equals(that.data2) : that.data2 != null) return false;
+        if (date1 != null ? !date1.equals(that.date1) : that.date1 != null) return false;
+        if (id != null ? !id.equals(that.id) : that.id != null) return false;
+        if (number1 != null ? !number1.equals(that.number1) : that.number1 != null) return false;
+        if (number2 != null ? !number2.equals(that.number2) : that.number2 != null) return false;
+
+        return true;
+    }
+
+    public int hashCode() {
+        int result;
+        result = (id != null ? id.hashCode() : 0);
+        result = 31 * result + (data1 != null ? data1.hashCode() : 0);
+        result = 31 * result + (data2 != null ? data2.hashCode() : 0);
+        result = 31 * result + (number1 != null ? number1.hashCode() : 0);
+        result = 31 * result + (number2 != null ? number2.hashCode() : 0);
+        result = 31 * result + (date1 != null ? date1.hashCode() : 0);
+        return result;
+    }
+}

Modified: core/trunk/envers/src/test/resources/hibernate.test.cfg.xml
===================================================================
--- core/trunk/envers/src/test/resources/hibernate.test.cfg.xml	2008-11-19 17:38:55 UTC (rev 15600)
+++ core/trunk/envers/src/test/resources/hibernate.test.cfg.xml	2008-11-20 13:09:44 UTC (rev 15601)
@@ -17,13 +17,15 @@
         <property name="connection.username">sa</property>
         <property name="connection.password"></property>
 
-        <!--<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
+        <!--<property name="dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property>
         <property name="connection.url">jdbc:mysql:///hibernate_tests?useUnicode=true&amp;characterEncoding=UTF-8</property>
         <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
         <property name="connection.username">root</property>
-        <property name="connection.password"></property>-->
+        <property name="connection.password"></property>
 
-        <event type="post-insert">
+        <property name="hibernate.jdbc.batch_size">100</property>-->
+
+        <!--<event type="post-insert">
             <listener class="org.hibernate.envers.event.AuditEventListener" />
         </event>
         <event type="post-update">
@@ -40,6 +42,6 @@
         </event>
         <event type="post-collection-recreate">
             <listener class="org.hibernate.envers.event.AuditEventListener" />
-        </event>
+        </event>-->
     </session-factory>
 </hibernate-configuration>
\ No newline at end of file




More information about the hibernate-commits mailing list