[hibernate-commits] Hibernate SVN: r17853 - in core/trunk/envers/src: test/java/org/hibernate/envers/test/entities/onetomany and 3 other directories.

hibernate-commits at lists.jboss.org hibernate-commits at lists.jboss.org
Tue Oct 27 15:58:20 EDT 2009


Author: adamw
Date: 2009-10-27 15:58:19 -0400 (Tue, 27 Oct 2009)
New Revision: 17853

Added:
   core/trunk/envers/src/test/java/org/hibernate/envers/test/integration/serialization/
   core/trunk/envers/src/test/java/org/hibernate/envers/test/integration/serialization/SerializingCollection.java
Modified:
   core/trunk/envers/src/main/java/org/hibernate/envers/entities/mapper/relation/lazy/proxy/CollectionProxy.java
   core/trunk/envers/src/main/java/org/hibernate/envers/entities/mapper/relation/lazy/proxy/ListProxy.java
   core/trunk/envers/src/main/java/org/hibernate/envers/entities/mapper/relation/lazy/proxy/SetProxy.java
   core/trunk/envers/src/main/java/org/hibernate/envers/entities/mapper/relation/lazy/proxy/SortedSetProxy.java
   core/trunk/envers/src/test/java/org/hibernate/envers/test/entities/onetomany/CollectionRefEdEntity.java
   core/trunk/envers/src/test/java/org/hibernate/envers/test/entities/onetomany/CollectionRefIngEntity.java
   core/trunk/envers/src/test/resources/testng.xml
Log:
HHH-4488:
- applying patch (making collection proxy serializable) + test

Modified: core/trunk/envers/src/main/java/org/hibernate/envers/entities/mapper/relation/lazy/proxy/CollectionProxy.java
===================================================================
--- core/trunk/envers/src/main/java/org/hibernate/envers/entities/mapper/relation/lazy/proxy/CollectionProxy.java	2009-10-27 19:53:14 UTC (rev 17852)
+++ core/trunk/envers/src/main/java/org/hibernate/envers/entities/mapper/relation/lazy/proxy/CollectionProxy.java	2009-10-27 19:58:19 UTC (rev 17853)
@@ -23,6 +23,7 @@
  */
 package org.hibernate.envers.entities.mapper.relation.lazy.proxy;
 
+import java.io.Serializable;
 import java.util.Collection;
 import java.util.Iterator;
 
@@ -31,8 +32,10 @@
 /**
  * @author Adam Warski (adam at warski dot org)
  */
-public abstract class CollectionProxy<U, T extends Collection<U>> implements Collection<U> {
-    private org.hibernate.envers.entities.mapper.relation.lazy.initializor.Initializor<T> initializor;
+public abstract class CollectionProxy<U, T extends Collection<U>> implements Collection<U>, Serializable {
+	private static final long serialVersionUID = 8698249863871832402L;
+
+	private transient org.hibernate.envers.entities.mapper.relation.lazy.initializor.Initializor<T> initializor;
     protected T delegate;
 
     protected CollectionProxy() {

Modified: core/trunk/envers/src/main/java/org/hibernate/envers/entities/mapper/relation/lazy/proxy/ListProxy.java
===================================================================
--- core/trunk/envers/src/main/java/org/hibernate/envers/entities/mapper/relation/lazy/proxy/ListProxy.java	2009-10-27 19:53:14 UTC (rev 17852)
+++ core/trunk/envers/src/main/java/org/hibernate/envers/entities/mapper/relation/lazy/proxy/ListProxy.java	2009-10-27 19:58:19 UTC (rev 17853)
@@ -33,7 +33,7 @@
 /**
  * @author Adam Warski (adam at warski dot org)
  */
-public class ListProxy<U> extends CollectionProxy<U, List<U>> implements List<U>, Serializable {
+public class ListProxy<U> extends CollectionProxy<U, List<U>> implements List<U> {
     private static final long serialVersionUID = -5479232938279790987L;
 
     public ListProxy() {

Modified: core/trunk/envers/src/main/java/org/hibernate/envers/entities/mapper/relation/lazy/proxy/SetProxy.java
===================================================================
--- core/trunk/envers/src/main/java/org/hibernate/envers/entities/mapper/relation/lazy/proxy/SetProxy.java	2009-10-27 19:53:14 UTC (rev 17852)
+++ core/trunk/envers/src/main/java/org/hibernate/envers/entities/mapper/relation/lazy/proxy/SetProxy.java	2009-10-27 19:58:19 UTC (rev 17853)
@@ -29,7 +29,7 @@
 /**
  * @author Adam Warski (adam at warski dot org)
  */
-public class SetProxy<U> extends CollectionProxy<U, Set<U>> implements Set<U>, Serializable {
+public class SetProxy<U> extends CollectionProxy<U, Set<U>> implements Set<U> {
     private static final long serialVersionUID = 131464133074137701L;
 
     public SetProxy() {

Modified: core/trunk/envers/src/main/java/org/hibernate/envers/entities/mapper/relation/lazy/proxy/SortedSetProxy.java
===================================================================
--- core/trunk/envers/src/main/java/org/hibernate/envers/entities/mapper/relation/lazy/proxy/SortedSetProxy.java	2009-10-27 19:53:14 UTC (rev 17852)
+++ core/trunk/envers/src/main/java/org/hibernate/envers/entities/mapper/relation/lazy/proxy/SortedSetProxy.java	2009-10-27 19:58:19 UTC (rev 17853)
@@ -25,12 +25,11 @@
 
 import java.util.Comparator;
 import java.util.SortedSet;
-import java.io.Serializable;
 
 /**
  * @author Adam Warski (adam at warski dot org)
  */
-public class SortedSetProxy<U> extends CollectionProxy<U, SortedSet<U>> implements SortedSet<U>, Serializable {
+public class SortedSetProxy<U> extends CollectionProxy<U, SortedSet<U>> implements SortedSet<U> {
     private static final long serialVersionUID = 2092884107178125905L;
 
     public SortedSetProxy() {
@@ -69,4 +68,4 @@
         checkInit();
         return delegate.last();
     }
-}
\ No newline at end of file
+}

Modified: core/trunk/envers/src/test/java/org/hibernate/envers/test/entities/onetomany/CollectionRefEdEntity.java
===================================================================
--- core/trunk/envers/src/test/java/org/hibernate/envers/test/entities/onetomany/CollectionRefEdEntity.java	2009-10-27 19:53:14 UTC (rev 17852)
+++ core/trunk/envers/src/test/java/org/hibernate/envers/test/entities/onetomany/CollectionRefEdEntity.java	2009-10-27 19:58:19 UTC (rev 17853)
@@ -24,6 +24,7 @@
 package org.hibernate.envers.test.entities.onetomany;
 
 import java.util.Collection;
+import java.io.Serializable;
 import javax.persistence.Entity;
 import javax.persistence.Id;
 import javax.persistence.OneToMany;
@@ -35,7 +36,9 @@
  * @author Adam Warski (adam at warski dot org)
  */
 @Entity
-public class CollectionRefEdEntity {
+public class CollectionRefEdEntity implements Serializable {
+	private static final long serialVersionUID = -1694020123633796683L;
+
     @Id
     private Integer id;
 
@@ -46,7 +49,7 @@
     @OneToMany(mappedBy="reference")
     private Collection<CollectionRefIngEntity> reffering;
 
-    public CollectionRefEdEntity() {
+	public CollectionRefEdEntity() {
     }
 
     public CollectionRefEdEntity(Integer id, String data) {

Modified: core/trunk/envers/src/test/java/org/hibernate/envers/test/entities/onetomany/CollectionRefIngEntity.java
===================================================================
--- core/trunk/envers/src/test/java/org/hibernate/envers/test/entities/onetomany/CollectionRefIngEntity.java	2009-10-27 19:53:14 UTC (rev 17852)
+++ core/trunk/envers/src/test/java/org/hibernate/envers/test/entities/onetomany/CollectionRefIngEntity.java	2009-10-27 19:58:19 UTC (rev 17853)
@@ -29,12 +29,16 @@
 
 import org.hibernate.envers.Audited;
 
+import java.io.Serializable;
+
 /**
  * ReferencIng entity
  * @author Adam Warski (adam at warski dot org)
  */
 @Entity
-public class CollectionRefIngEntity {
+public class CollectionRefIngEntity implements Serializable {
+	private static final long serialVersionUID = -9019967223928425707L;
+	
     @Id
     private Integer id;
 
@@ -45,7 +49,7 @@
     @ManyToOne
     private CollectionRefEdEntity reference;
 
-    public CollectionRefIngEntity() { }
+	public CollectionRefIngEntity() { }
 
     public CollectionRefIngEntity(Integer id, String data, CollectionRefEdEntity reference) {
         this.id = id;

Added: core/trunk/envers/src/test/java/org/hibernate/envers/test/integration/serialization/SerializingCollection.java
===================================================================
--- core/trunk/envers/src/test/java/org/hibernate/envers/test/integration/serialization/SerializingCollection.java	                        (rev 0)
+++ core/trunk/envers/src/test/java/org/hibernate/envers/test/integration/serialization/SerializingCollection.java	2009-10-27 19:58:19 UTC (rev 17853)
@@ -0,0 +1,110 @@
+/*
+ * 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.serialization;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.Set;
+import java.io.ByteArrayOutputStream;
+import java.io.ObjectOutputStream;
+import java.io.ByteArrayInputStream;
+import java.io.ObjectInputStream;
+import java.io.IOException;
+import javax.persistence.EntityManager;
+
+import org.hibernate.envers.test.AbstractEntityTest;
+import org.hibernate.envers.test.entities.onetomany.CollectionRefEdEntity;
+import org.hibernate.envers.test.entities.onetomany.CollectionRefIngEntity;
+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 SerializingCollection extends AbstractEntityTest {
+    private Integer ed1_id;
+    private Integer ing1_id;
+
+    public void configure(Ejb3Configuration cfg) {
+        cfg.addAnnotatedClass(CollectionRefEdEntity.class);
+        cfg.addAnnotatedClass(CollectionRefIngEntity.class);
+    }
+
+    @BeforeClass(dependsOnMethods = "init")
+    public void initData() {
+        EntityManager em = getEntityManager();
+
+        CollectionRefEdEntity ed1 = new CollectionRefEdEntity(1, "data_ed_1");
+
+        CollectionRefIngEntity ing1 = new CollectionRefIngEntity(3, "data_ing_1", ed1);
+
+        // Revision 1
+        em.getTransaction().begin();
+
+        em.persist(ed1);
+        em.persist(ing1);
+
+        em.getTransaction().commit();
+
+        //
+
+        ed1_id = ed1.getId();
+        ing1_id = ing1.getId();
+    }
+
+    @Test
+    public void testDetach()throws Exception  {
+        CollectionRefIngEntity ing1 = getEntityManager().find(CollectionRefIngEntity.class, ing1_id);
+        CollectionRefEdEntity rev1 = getAuditReader().find(CollectionRefEdEntity.class, ed1_id, 1);
+
+		// First forcing loading of the collection
+		assert rev1.getReffering().size() == 1;
+
+		// Now serializing and de-serializing the
+		rev1 = serializeDeserialize(rev1);
+
+		// And checking the colleciton again
+        assert rev1.getReffering().contains(ing1);
+        assert rev1.getReffering().size() == 1;
+
+    }
+
+	@SuppressWarnings({"unchecked"})
+	public static <T> T serializeDeserialize(T o) throws Exception {
+		if (o == null) return null;
+
+		ByteArrayOutputStream baos = new ByteArrayOutputStream();
+		ObjectOutputStream oos = new ObjectOutputStream(baos);
+		oos.writeObject(o);
+		byte[] buffer = baos.toByteArray();
+		baos.close();
+
+		ByteArrayInputStream bais = new ByteArrayInputStream(buffer);
+		ObjectInputStream ois = new ObjectInputStream(bais);
+		return (T) ois.readObject();		
+	}
+}

Modified: core/trunk/envers/src/test/resources/testng.xml
===================================================================
--- core/trunk/envers/src/test/resources/testng.xml	2009-10-27 19:53:14 UTC (rev 17852)
+++ core/trunk/envers/src/test/resources/testng.xml	2009-10-27 19:58:19 UTC (rev 17853)
@@ -54,6 +54,7 @@
             <package name="org.hibernate.envers.test.integration.sameids" />
             <package name="org.hibernate.envers.test.integration.secondary" />
             <package name="org.hibernate.envers.test.integration.secondary.ids" />
+            <package name="org.hibernate.envers.test.integration.serialization" />
             <package name="org.hibernate.envers.test.integration.superclass" />
         </packages>
     </test>



More information about the hibernate-commits mailing list