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>