You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openjpa.apache.org by mi...@apache.org on 2008/10/15 03:33:18 UTC

svn commit: r704763 - in /openjpa/branches/1.2.x: openjpa-kernel/src/main/java/org/apache/openjpa/kernel/StateManagerImpl.java openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/embed/TestEmbedded.java openjpa-project/NOTICE.txt

Author: mikedd
Date: Tue Oct 14 18:33:18 2008
New Revision: 704763

URL: http://svn.apache.org/viewvc?rev=704763&view=rev
Log:
OPENJPA-733 Merging Jeremy's change to 1.2.x

Modified:
    openjpa/branches/1.2.x/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/StateManagerImpl.java
    openjpa/branches/1.2.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/embed/TestEmbedded.java
    openjpa/branches/1.2.x/openjpa-project/NOTICE.txt

Modified: openjpa/branches/1.2.x/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/StateManagerImpl.java
URL: http://svn.apache.org/viewvc/openjpa/branches/1.2.x/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/StateManagerImpl.java?rev=704763&r1=704762&r2=704763&view=diff
==============================================================================
--- openjpa/branches/1.2.x/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/StateManagerImpl.java (original)
+++ openjpa/branches/1.2.x/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/StateManagerImpl.java Tue Oct 14 18:33:18 2008
@@ -311,7 +311,8 @@
 
         // initialize our state and add ourselves to the broker's cache
         setPCState(state);
-        if (_broker.getStateManagerImplById(getObjectId(), false) == null) {
+        if ( _oid == null ||  
+            _broker.getStateManagerImplById(_oid, false) == null) {
         	_broker.setStateManager(_id, this, BrokerImpl.STATUS_INIT);
         }
         if (state == PCState.PNEW)

Modified: openjpa/branches/1.2.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/embed/TestEmbedded.java
URL: http://svn.apache.org/viewvc/openjpa/branches/1.2.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/embed/TestEmbedded.java?rev=704763&r1=704762&r2=704763&view=diff
==============================================================================
--- openjpa/branches/1.2.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/embed/TestEmbedded.java (original)
+++ openjpa/branches/1.2.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/embed/TestEmbedded.java Tue Oct 14 18:33:18 2008
@@ -18,7 +18,11 @@
  */
 package org.apache.openjpa.persistence.embed;
 
+import java.util.List;
+
 import javax.persistence.EntityManager;
+import javax.persistence.EntityTransaction;
+
 import org.apache.openjpa.persistence.test.SingleEMFTestCase;
 
 public class TestEmbedded extends SingleEMFTestCase {
@@ -43,4 +47,71 @@
         em.getTransaction().commit();
     }
 
+    /*
+     * This variation verifies that an embedded entity can be accessed after
+     * being detached. An entity /w embedded is persisted and then queried. The
+     * em is closed, detaching the entities, and then a getter is called on the
+     * embeddeded. If the embedded is still attached (it should not be) an
+     * IllegalStateException will be thrown.
+     * 
+     * JIRA Ref: OPENJPA-733 Authors: Chris Tillman, Jeremy Bauer
+     */
+    public void testDetachedQueryEmbedded() {
+        Address a = new Address();
+        a.setStreetAddress("456 Main St");
+        a.setCity("New York");
+        a.setState("NY");
+        a.setZip(12955);
+        Geocode g = new Geocode();
+        g.setLatitude(1.0f);
+        g.setLongtitude(2.0f);
+        a.setGeocode(g);
+
+        persistAddress(a);
+
+        Address a2 =
+            queryAddresses(
+                "select address from Address address"
+                    + " where address.streetAddress = '456 Main St'").get(0);
+
+        assertEquals(a2.getGeocode().getLatitude(), 1.0f);
+    }
+
+    private void persistAddress(Address address) {
+        final EntityManager em = emf.createEntityManager();
+        final EntityTransaction tx = em.getTransaction();
+
+        tx.begin();
+
+        try {
+            em.persist(address);
+            tx.commit();
+        } finally {
+            if (tx.isActive()) {
+                tx.rollback();
+            }
+            em.close();
+        }
+        assertEquals(address.getGeocode().getLatitude(), 1.0f);
+    }
+
+    private List<Address> queryAddresses(String query) {
+        final EntityManager em = emf.createEntityManager();
+        final EntityTransaction tx = em.getTransaction();
+
+        tx.begin();
+
+        try {
+            final List<Address> list =
+                (List<Address>) em.createQuery(query).getResultList();
+            tx.commit();
+            return list;
+        } finally {
+            if (tx.isActive()) {
+                tx.rollback();
+            }
+            em.close();
+        }
+    }
+
 }
\ No newline at end of file

Modified: openjpa/branches/1.2.x/openjpa-project/NOTICE.txt
URL: http://svn.apache.org/viewvc/openjpa/branches/1.2.x/openjpa-project/NOTICE.txt?rev=704763&r1=704762&r2=704763&view=diff
==============================================================================
--- openjpa/branches/1.2.x/openjpa-project/NOTICE.txt (original)
+++ openjpa/branches/1.2.x/openjpa-project/NOTICE.txt Tue Oct 14 18:33:18 2008
@@ -16,5 +16,7 @@
     Sun Microsystems and licensed under the CDDL 1.0. The source code is
     available at: https://glassfish.dev.java.net/source/browse/glassfish/
 
-* OpenJPA includes software written by Miroslav Nachev
+* OpenJPA includes software written by Miroslav Nachev.
+
+* OpenJPA uses test code written by Charles Tillman.