Author: awhite
Date: Tue Nov  7 10:37:33 2006
New Revision: 472193

URL: http://svn.apache.org/viewvc?view=rev&rev=472193
Log:
Fix recently-introduced bugs in conversion between JPA facades and underlying
components.


Modified:
    
incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/DiscriminatorMappingInfo.java
    
incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/ValueMapDiscriminatorStrategy.java
    
incubator/openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/OpenJPAPersistence.java
    
incubator/openjpa/trunk/openjpa-persistence/src/main/resources/org/apache/openjpa/persistence/localizer.properties

Modified: 
incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/DiscriminatorMappingInfo.java
URL: 
http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/DiscriminatorMappingInfo.java?view=diff&rev=472193&r1=472192&r2=472193
==============================================================================
--- 
incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/DiscriminatorMappingInfo.java
 (original)
+++ 
incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/DiscriminatorMappingInfo.java
 Tue Nov  7 10:37:33 2006
@@ -79,7 +79,7 @@
             }
         }
         if ("null".equalsIgnoreCase(_value))
-            return (Discriminator.NULL);
+            return Discriminator.NULL;
 
         // strip quotes
         if (_value.length() > 0 && _value.charAt(0) == '\'')

Modified: 
incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/ValueMapDiscriminatorStrategy.java
URL: 
http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/ValueMapDiscriminatorStrategy.java?view=diff&rev=472193&r1=472192&r2=472193
==============================================================================
--- 
incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/ValueMapDiscriminatorStrategy.java
 (original)
+++ 
incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/ValueMapDiscriminatorStrategy.java
 Tue Nov  7 10:37:33 2006
@@ -93,9 +93,8 @@
         if (cls != null)
             return cls;
         throw new ClassNotFoundException(_loc.get("unknown-discrim-value",
-            new Object[]{ str,
-                disc.getClassMapping().getDescribedType().getName(),
-                new TreeSet(_vals.keySet()) }).getMessage());
+            new Object[]{ str, disc.getClassMapping().getDescribedType().
+            getName(), new TreeSet(_vals.keySet()) }).getMessage());
     }
 
     /**
@@ -123,6 +122,8 @@
             throw new MetaDataException(_loc.get("no-discrim-value",
                 disc.getClassMapping()));
 
+        // we set the value before mapping to use to calculate the template
+        // column's java type
         disc.setValue(val);
         super.map(adapt);
     }

Modified: 
incubator/openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/OpenJPAPersistence.java
URL: 
http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/OpenJPAPersistence.java?view=diff&rev=472193&r1=472192&r2=472193
==============================================================================
--- 
incubator/openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/OpenJPAPersistence.java
 (original)
+++ 
incubator/openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/OpenJPAPersistence.java
 Tue Nov  7 10:37:33 2006
@@ -85,8 +85,17 @@
     public static BrokerFactory toBrokerFactory(EntityManagerFactory emf) {
         if (emf == null)
             return null;
-        emf = (EntityManagerFactory) 
-            ((OpenJPAEntityManagerFactory) emf).getUserObject(EMF_KEY);        
+        if (!(emf instanceof EntityManagerFactoryImpl)) {
+            Class c = emf.getClass();
+            try {
+                // either cast here may fail
+                emf = (EntityManagerFactoryImpl) ((OpenJPAEntityManagerFactory)
+                    emf).getUserObject(EMF_KEY);
+            } catch (ClassCastException cce) {
+                throw new ArgumentException(_loc.get
+                    ("cant-convert-brokerfactory", c), null, null, false);
+            }
+        }
         return ((EntityManagerFactoryImpl) emf).getBrokerFactory();
     }
 
@@ -122,8 +131,18 @@
     public static Broker toBroker(EntityManager em) {
         if (em == null)
             return null;
-        em = (EntityManager) ((OpenJPAEntityManager) em).getUserObject(EM_KEY);
-        return (em == null) ? null : ((EntityManagerImpl) em).getBroker();
+        if (!(em instanceof EntityManagerImpl)) {
+            Class c = em.getClass();
+            try {
+                // either cast here may fail
+                em = (EntityManagerImpl) ((OpenJPAEntityManager) em).
+                    getUserObject(EM_KEY);
+            } catch (ClassCastException cce) {
+                throw new ArgumentException(_loc.get("cant-convert-broker", c),
+                    null, null, false);
+            }
+        }
+        return ((EntityManagerImpl) em).getBroker();
     }
 
     /**

Modified: 
incubator/openjpa/trunk/openjpa-persistence/src/main/resources/org/apache/openjpa/persistence/localizer.properties
URL: 
http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-persistence/src/main/resources/org/apache/openjpa/persistence/localizer.properties?view=diff&rev=472193&r1=472192&r2=472193
==============================================================================
--- 
incubator/openjpa/trunk/openjpa-persistence/src/main/resources/org/apache/openjpa/persistence/localizer.properties
 (original)
+++ 
incubator/openjpa/trunk/openjpa-persistence/src/main/resources/org/apache/openjpa/persistence/localizer.properties
 Tue Nov  7 10:37:33 2006
@@ -90,6 +90,10 @@
     to "{1}"
 unrecognized-provider: WARNING: Found unrecognized persistence provider "{0}" \
     in place of OpenJPA provider.  This provider's properties will not be used.
+cant-convert-brokerfactory: Unable to convert EntityManagerFactory of type \
+    "{0}" into a BrokerFactory.
+cant-convert-broker: Unable to convert EntityManager of type "{0}" into a \
+    Broker.
 EntityManagerFactory-name: EntityManagerFactory implementation
 EntityManagerFactory-desc: Allows extension of standard \
     org.apache.openjpa.persistence.EntityManagerFactoryImpl for custom 
behavior.


Reply via email to