From d20e84a2949dbdb9945e979b7e897bb63b259dc5 Mon Sep 17 00:00:00 2001 From: Michael Dick Date: Mon, 26 Jul 2010 19:43:36 +0000 Subject: [PATCH] OPENJPA-1722, OPENJPA-1690: Make DistinctResultList serializable, and add writeReplace method. Submitted by: Dianne Richards and Pinaki Poddar git-svn-id: https://svn.apache.org/repos/asf/openjpa/branches/2.0.x@979418 13f79535-47bb-0310-9956-ffa450edef68 --- .../openjpa/kernel/DistinctResultList.java | 11 +++- .../results/TestListResultSerialization.java | 59 +++++++++++++++++++ 2 files changed, 69 insertions(+), 1 deletion(-) create mode 100644 openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/query/results/TestListResultSerialization.java diff --git a/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/DistinctResultList.java b/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/DistinctResultList.java index 318734835..8e4c31293 100644 --- a/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/DistinctResultList.java +++ b/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/DistinctResultList.java @@ -18,6 +18,8 @@ */ package org.apache.openjpa.kernel; +import java.io.ObjectStreamException; +import java.io.Serializable; import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; @@ -39,7 +41,9 @@ import org.apache.openjpa.util.RuntimeExceptionTranslator; * @param * element type */ -public class DistinctResultList implements List { +public class DistinctResultList implements List, Serializable { + private static final long serialVersionUID = -6140119764940777922L; + private final ArrayList _del; private final RuntimeExceptionTranslator _trans; @@ -204,4 +208,9 @@ public class DistinctResultList implements List { return (_trans == null) ? re : _trans.translate(re); } + public Object writeReplace() + throws ObjectStreamException { + return _del; + } + } diff --git a/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/query/results/TestListResultSerialization.java b/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/query/results/TestListResultSerialization.java new file mode 100644 index 000000000..24bdb6bcb --- /dev/null +++ b/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/query/results/TestListResultSerialization.java @@ -0,0 +1,59 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.openjpa.persistence.query.results; + +import java.util.ArrayList; +import java.util.List; +import org.apache.openjpa.lib.rop.ListResultList; +import org.apache.openjpa.lib.rop.ResultList; + +import org.apache.openjpa.kernel.DistinctResultList; +import org.apache.openjpa.persistence.EntityManagerImpl; +import org.apache.openjpa.persistence.PersistenceExceptions; +import org.apache.openjpa.persistence.test.SQLListenerTestCase; +import org.apache.openjpa.util.RuntimeExceptionTranslator; + +/** + * Test that the DistinctResultList serializes correctly and without error. + * + * @since 2.1.0 + */ +public class TestListResultSerialization extends SQLListenerTestCase { + public void setUp() throws Exception { + super.setUp(); + assertNotNull(emf); + } + + public void testRoundtrip() { + List list = new ArrayList(); + list.add("xxx"); + list.add("yyy"); + ResultList resultList = new ListResultList(list); + EntityManagerImpl em = (EntityManagerImpl)emf.createEntityManager(); + em.close(); + RuntimeExceptionTranslator trans = PersistenceExceptions.getRollbackTranslator(em); + DistinctResultList distinctResultList = new DistinctResultList(resultList, trans); + try { + roundtrip(distinctResultList); + } catch (Exception e) { + e.printStackTrace(); + fail("unexpected exception - see stack trace in output"); + } + } +}