You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openjpa.apache.org by aw...@apache.org on 2006/08/02 19:51:46 UTC

svn commit: r428069 - in /incubator/openjpa/trunk: openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/ openjpa-kernel/src/main/java/org/apache/openjpa/util/ openjpa-persistence-jdbc/src/main/java/org/apache/openjpa/persistence/jdbc/ openjpa...

Author: awhite
Date: Wed Aug  2 10:51:43 2006
New Revision: 428069

URL: http://svn.apache.org/viewvc?rev=428069&view=rev
Log:
Fix StoreFacadeTypeRegistry to work when multiple stores are available.  Fix
problems with creating a persistence FetchPlan, and with getting max depth.


Modified:
    incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/RelationFieldStrategy.java
    incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/util/StoreFacadeTypeRegistry.java
    incubator/openjpa/trunk/openjpa-persistence-jdbc/src/main/java/org/apache/openjpa/persistence/jdbc/JDBCPersistenceProductDerivation.java
    incubator/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/simple/TestPersistence.java
    incubator/openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/EntityManagerFactoryImpl.java
    incubator/openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/EntityManagerImpl.java
    incubator/openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/Extent.java
    incubator/openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/FetchPlan.java
    incubator/openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/QueryImpl.java

Modified: incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/RelationFieldStrategy.java
URL: http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/RelationFieldStrategy.java?rev=428069&r1=428068&r2=428069&view=diff
==============================================================================
--- incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/RelationFieldStrategy.java (original)
+++ incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/RelationFieldStrategy.java Wed Aug  2 10:51:43 2006
@@ -492,8 +492,8 @@
                 long id = res.getLong(cols[0]);
                 if (!res.wasNull())
                     oid = store.newDataStoreId(id, relMapping, true);
-            } else // application id
-            {
+            } else { 
+                // application id
                 if (cols.length == 1) {
                     Object val = res.getObject(cols[0], null, null);
                     if (val != null)

Modified: incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/util/StoreFacadeTypeRegistry.java
URL: http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/util/StoreFacadeTypeRegistry.java?rev=428069&r1=428068&r2=428069&view=diff
==============================================================================
--- incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/util/StoreFacadeTypeRegistry.java (original)
+++ incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/util/StoreFacadeTypeRegistry.java Wed Aug  2 10:51:43 2006
@@ -13,11 +13,60 @@
 
     private Map _impls = new ConcurrentHashMap();
 
-    public void registerImplementation(Class facadeType, Class implType) {
-        _impls.put(facadeType, implType);
+    /**
+     * Register a facade implementation.
+     *
+     * @param facadeType the facade interface
+     * @param storeType the store's 
+     * {@link org.apache.openjpa.kernel.StoreManager} type, or null for generic
+     * @param implType the class implementing the facade
+     */
+    public void registerImplementation(Class facadeType, Class storeType, 
+        Class implType) {
+        Object key = (storeType == null) ? (Object)facadeType 
+            : new Key(facadeType, storeType);
+        _impls.put(key, implType);
     }
     
-    public Class getImplementation(Class facadeType) {
-        return (Class) _impls.get(facadeType);
+    /**
+     * Return the implementation for the given facade and store.
+     *
+     * @param facadeType the facade interface
+     * @param storeType the store's 
+     * {@link org.apache.openjpa.kernel.StoreManager} type, or null for generic
+     * @param implType the registered implementor
+     */
+    public Class getImplementation(Class facadeType, Class storeType) {
+        Object key = (storeType == null) ? (Object)facadeType 
+            : new Key(facadeType, storeType);
+        Class c = (Class) _impls.get(key);
+        // if no store-specific type, see if there is a generic avaialble
+        if (c == null && storeType != null)
+            c = (Class) _impls.get(facadeType);
+        return c; 
+    }
+
+    /**
+     * Lookup key for facade+store hash.
+     */
+    private static class Key {
+        private final Class _facadeType;
+        private final Class _storeType;
+
+        public Key(Class facadeType, Class storeType) {
+            _facadeType = facadeType;
+            _storeType = storeType;
+        }
+
+        public int hashCode() {
+            return _facadeType.hashCode() ^ _storeType.hashCode();
+        }
+
+        public boolean equals(Object other) {
+            if (other == this)
+                return true;
+            Key k = (Key) other;
+            return _facadeType == k._facadeType && _storeType == k._storeType;
+        }
     }
 }

Modified: incubator/openjpa/trunk/openjpa-persistence-jdbc/src/main/java/org/apache/openjpa/persistence/jdbc/JDBCPersistenceProductDerivation.java
URL: http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-persistence-jdbc/src/main/java/org/apache/openjpa/persistence/jdbc/JDBCPersistenceProductDerivation.java?rev=428069&r1=428068&r2=428069&view=diff
==============================================================================
--- incubator/openjpa/trunk/openjpa-persistence-jdbc/src/main/java/org/apache/openjpa/persistence/jdbc/JDBCPersistenceProductDerivation.java (original)
+++ incubator/openjpa/trunk/openjpa-persistence-jdbc/src/main/java/org/apache/openjpa/persistence/jdbc/JDBCPersistenceProductDerivation.java Wed Aug  2 10:51:43 2006
@@ -18,6 +18,7 @@
 import org.apache.openjpa.conf.OpenJPAConfiguration;
 import org.apache.openjpa.conf.ProductDerivation;
 import org.apache.openjpa.jdbc.conf.JDBCConfigurationImpl;
+import org.apache.openjpa.jdbc.kernel.JDBCStoreManager;
 import org.apache.openjpa.lib.conf.ConfigurationProvider;
 import org.apache.openjpa.persistence.FetchPlan;
 import org.apache.openjpa.persistence.PersistenceProductDerivation;
@@ -39,8 +40,8 @@
     }
 
     public void beforeConfigurationLoad(OpenJPAConfiguration c) {
-        c.getStoreFacadeTypeRegistry().registerImplementation(
-            FetchPlan.class, JDBCFetchPlan.class);
+        c.getStoreFacadeTypeRegistry().registerImplementation(FetchPlan.class, 
+            JDBCStoreManager.class, JDBCFetchPlan.class);
         if (!(c instanceof JDBCConfigurationImpl))
             return;
 

Modified: incubator/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/simple/TestPersistence.java
URL: http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/simple/TestPersistence.java?rev=428069&r1=428068&r2=428069&view=diff
==============================================================================
--- incubator/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/simple/TestPersistence.java (original)
+++ incubator/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/simple/TestPersistence.java Wed Aug  2 10:51:43 2006
@@ -22,6 +22,7 @@
 
 import junit.framework.TestCase;
 import junit.textui.TestRunner;
+import org.apache.openjpa.persistence.OpenJPAEntityManager;
 
 /**
  * Simple test case to get an EntityManager and perform some basic operations.
@@ -68,6 +69,12 @@
         t.begin();
         t.setRollbackOnly();
         t.rollback();
+
+        // openjpa-facade test
+        assertTrue(em instanceof OpenJPAEntityManager);
+        OpenJPAEntityManager ojem = (OpenJPAEntityManager) em;
+        ojem.getFetchPlan().setMaxFetchDepth(-1);
+        assertEquals(-1, ojem.getFetchPlan().getMaxFetchDepth());
 
         em.close();
     }

Modified: incubator/openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/EntityManagerFactoryImpl.java
URL: http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/EntityManagerFactoryImpl.java?rev=428069&r1=428068&r2=428069&view=diff
==============================================================================
--- incubator/openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/EntityManagerFactoryImpl.java (original)
+++ incubator/openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/EntityManagerFactoryImpl.java Wed Aug  2 10:51:43 2006
@@ -259,7 +259,7 @@
      * Create a store-specific facade for the given fetch configuration.
 	 * If no facade class exists, we use the default {@link FetchPlan}.
      */
-    FetchPlan toFetchPlan(FetchConfiguration fetch) {
+    FetchPlan toFetchPlan(Broker broker, FetchConfiguration fetch) {
         if (fetch == null)
             return null;
 
@@ -268,15 +268,16 @@
             inner = ((DelegatingFetchConfiguration) inner).
                 getInnermostDelegate();
 
-        _factory.lock();
         try {
             if (_plan == null) {
-                Class cls = _factory.getConfiguration()
-                    .getStoreFacadeTypeRegistry().getImplementation(
-                        FetchPlan.class);
+                Class storeType = (broker == null) ? null : broker.
+                    getStoreManager().getInnermostDelegate().getClass();
+                Class cls = _factory.getConfiguration().
+                    getStoreFacadeTypeRegistry().
+                    getImplementation(FetchPlan.class, storeType);
                 if (cls == null)
                     cls = FetchPlan.class;
-                _plan = cls.getConstructor(FetchPlan.class);
+                _plan = cls.getConstructor(FetchConfiguration.class);
             }
             return _plan.newInstance(fetch);
         } catch (InvocationTargetException ite) {
@@ -284,8 +285,6 @@
                 (ite.getTargetException());
         } catch (Exception e) {
             throw PersistenceExceptions.toPersistenceException(e);
-        } finally {
-            _factory.unlock();
         }
 	}
 }

Modified: incubator/openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/EntityManagerImpl.java
URL: http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/EntityManagerImpl.java?rev=428069&r1=428068&r2=428069&view=diff
==============================================================================
--- incubator/openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/EntityManagerImpl.java (original)
+++ incubator/openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/EntityManagerImpl.java Wed Aug  2 10:51:43 2006
@@ -119,7 +119,8 @@
         _broker.lock();
         try {
             if (_fetch == null)
-                _fetch = _emf.toFetchPlan(_broker.getFetchConfiguration());
+                _fetch = _emf.toFetchPlan(_broker, 
+                    _broker.getFetchConfiguration());
             return _fetch;
         } finally {
             _broker.unlock();

Modified: incubator/openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/Extent.java
URL: http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/Extent.java?rev=428069&r1=428068&r2=428069&view=diff
==============================================================================
--- incubator/openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/Extent.java (original)
+++ incubator/openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/Extent.java Wed Aug  2 10:51:43 2006
@@ -79,8 +79,8 @@
         try {
             if (_fetch == null)
                 _fetch = ((EntityManagerFactoryImpl) _em.
-                    getEntityManagerFactory()).toFetchPlan(_extent.
-                    getFetchConfiguration());
+                    getEntityManagerFactory()).toFetchPlan(_extent.getBroker(),
+                    _extent.getFetchConfiguration());
             return _fetch;
         } finally {
             _extent.unlock();

Modified: incubator/openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/FetchPlan.java
URL: http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/FetchPlan.java?rev=428069&r1=428068&r2=428069&view=diff
==============================================================================
--- incubator/openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/FetchPlan.java (original)
+++ incubator/openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/FetchPlan.java Wed Aug  2 10:51:43 2006
@@ -83,7 +83,7 @@
     /**
      * The maximum fetch depth when loading an object.
      */
-    public int getMaxFetchDepth(int depth) {
+    public int getMaxFetchDepth() {
         return _fetch.getMaxFetchDepth();
     }
 

Modified: incubator/openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/QueryImpl.java
URL: http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/QueryImpl.java?rev=428069&r1=428068&r2=428069&view=diff
==============================================================================
--- incubator/openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/QueryImpl.java (original)
+++ incubator/openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/QueryImpl.java Wed Aug  2 10:51:43 2006
@@ -99,8 +99,8 @@
         try {
             if (_fetch == null)
                 _fetch = ((EntityManagerFactoryImpl) _em.
-                    getEntityManagerFactory()).toFetchPlan(_query.
-                    getFetchConfiguration());
+                    getEntityManagerFactory()).toFetchPlan(_query.getBroker(),
+                    _query.getFetchConfiguration());
             return _fetch;
         } finally {
             _query.unlock();