You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openjpa.apache.org by jr...@apache.org on 2013/03/28 13:50:52 UTC

svn commit: r1462076 - in /openjpa/branches/2.2.x: openjpa-kernel/src/main/java/org/apache/openjpa/kernel/ openjpa-lib/src/main/java/org/apache/openjpa/lib/conf/ openjpa-lib/src/main/resources/org/apache/openjpa/lib/conf/ openjpa-slice/src/main/java/or...

Author: jrbauer
Date: Thu Mar 28 12:50:51 2013
New Revision: 1462076

URL: http://svn.apache.org/r1462076
Log:
Disable logging during brokerfactory de-serialization.  Added type checking of plugin values.

Modified:
    openjpa/branches/2.2.x/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/AbstractBrokerFactory.java
    openjpa/branches/2.2.x/openjpa-lib/src/main/java/org/apache/openjpa/lib/conf/PluginValue.java
    openjpa/branches/2.2.x/openjpa-lib/src/main/resources/org/apache/openjpa/lib/conf/localizer.properties
    openjpa/branches/2.2.x/openjpa-slice/src/main/java/org/apache/openjpa/slice/jdbc/DistributedJDBCConfigurationImpl.java

Modified: openjpa/branches/2.2.x/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/AbstractBrokerFactory.java
URL: http://svn.apache.org/viewvc/openjpa/branches/2.2.x/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/AbstractBrokerFactory.java?rev=1462076&r1=1462075&r2=1462076&view=diff
==============================================================================
--- openjpa/branches/2.2.x/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/AbstractBrokerFactory.java (original)
+++ openjpa/branches/2.2.x/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/AbstractBrokerFactory.java Thu Mar 28 12:50:51 2013
@@ -472,8 +472,14 @@ public abstract class AbstractBrokerFact
         // reset these transient fields to empty values
         _transactional = new ConcurrentHashMap<Object,Collection<Broker>>();
         _brokers = newBrokerSet();
-
+        
+        // turn off logging while de-serializing BrokerFactory
+        String saveLogConfig = _conf.getLog();
+        _conf.setLog("none");
         makeReadOnly();
+        // re-enable any logging which was in effect
+        _conf.setLog(saveLogConfig);  
+        
         return this;
     }
 

Modified: openjpa/branches/2.2.x/openjpa-lib/src/main/java/org/apache/openjpa/lib/conf/PluginValue.java
URL: http://svn.apache.org/viewvc/openjpa/branches/2.2.x/openjpa-lib/src/main/java/org/apache/openjpa/lib/conf/PluginValue.java?rev=1462076&r1=1462075&r2=1462076&view=diff
==============================================================================
--- openjpa/branches/2.2.x/openjpa-lib/src/main/java/org/apache/openjpa/lib/conf/PluginValue.java (original)
+++ openjpa/branches/2.2.x/openjpa-lib/src/main/java/org/apache/openjpa/lib/conf/PluginValue.java Thu Mar 28 12:50:51 2013
@@ -19,7 +19,9 @@
 package org.apache.openjpa.lib.conf;
 
 import org.apache.commons.lang.StringUtils;
+import org.apache.openjpa.lib.log.Log;
 import org.apache.openjpa.lib.util.Localizer;
+import org.apache.openjpa.lib.util.ParseException;
 
 /**
  * A plugin {@link Value} consisting of plugin name and properties.
@@ -101,6 +103,20 @@ public class PluginValue extends ObjectV
     public Object instantiate(Class<?> type, Configuration conf, boolean fatal)
     {
         Object obj = newInstance(_name, type, conf, fatal);
+        
+        // ensure plugin value is compatible with plugin type
+        if (obj != null && !type.isAssignableFrom(obj.getClass())) {
+            Log log = (conf == null) ? null : conf.getConfigurationLog();
+            String msg = getIncompatiblePluginMessage(obj, type);
+            if (log != null && log.isErrorEnabled()) {
+            	log.error(msg);
+            }
+            if (fatal) {
+            	throw new ParseException(msg);
+            }
+            return null;
+        }
+        
         Configurations.configureInstance(obj, conf, _props,
             (fatal) ? getProperty() : null);
         if (_singleton)
@@ -108,7 +124,15 @@ public class PluginValue extends ObjectV
         return obj;
     }
 
-    /**
+    private String getIncompatiblePluginMessage(Object obj, Class<?> type) {
+		return _loc.get("incompatible-plugin", 
+            new Object[]{ _name, 
+                          obj == null ? null : obj.getClass().getName(),
+                          type == null ? null : type.getName()
+                          }).toString();
+	}
+
+	/**
      * Configure the given object.
      */
     public Object configure(Object obj, Configuration conf, boolean fatal) {

Modified: openjpa/branches/2.2.x/openjpa-lib/src/main/resources/org/apache/openjpa/lib/conf/localizer.properties
URL: http://svn.apache.org/viewvc/openjpa/branches/2.2.x/openjpa-lib/src/main/resources/org/apache/openjpa/lib/conf/localizer.properties?rev=1462076&r1=1462075&r2=1462076&view=diff
==============================================================================
--- openjpa/branches/2.2.x/openjpa-lib/src/main/resources/org/apache/openjpa/lib/conf/localizer.properties (original)
+++ openjpa/branches/2.2.x/openjpa-lib/src/main/resources/org/apache/openjpa/lib/conf/localizer.properties Thu Mar 28 12:50:51 2013
@@ -117,3 +117,6 @@ veto-change: Can not modify "{0}" becaus
 jndi-lookup-failed: JNDI lookup for "{0}" with key "{1}" returned null.
 multiple-load-key: Equivalent property keys "{0}" and "{1}" are specified in \
 	configuration.
+incompatible-plugin: The plugin "{0}" of value type "{1}" is not compatible with \
+	the expected plugin type "{2}". Update the configuration property with a value that \
+	is compatible with the plugin.

Modified: openjpa/branches/2.2.x/openjpa-slice/src/main/java/org/apache/openjpa/slice/jdbc/DistributedJDBCConfigurationImpl.java
URL: http://svn.apache.org/viewvc/openjpa/branches/2.2.x/openjpa-slice/src/main/java/org/apache/openjpa/slice/jdbc/DistributedJDBCConfigurationImpl.java?rev=1462076&r1=1462075&r2=1462076&view=diff
==============================================================================
--- openjpa/branches/2.2.x/openjpa-slice/src/main/java/org/apache/openjpa/slice/jdbc/DistributedJDBCConfigurationImpl.java (original)
+++ openjpa/branches/2.2.x/openjpa-slice/src/main/java/org/apache/openjpa/slice/jdbc/DistributedJDBCConfigurationImpl.java Thu Mar 28 12:50:51 2013
@@ -260,7 +260,7 @@ public class DistributedJDBCConfiguratio
 
     public QueryTargetPolicy getQueryTargetPolicyInstance() {
         if (queryTargetPolicyPlugin.get() == null) {
-            queryTargetPolicyPlugin.instantiate(ReplicationPolicy.class,
+            queryTargetPolicyPlugin.instantiate(QueryTargetPolicy.class,
                     this, true);
         }
         return (QueryTargetPolicy) queryTargetPolicyPlugin.get();