Disable logging during brokerfactory de-serialization. Added type checking of plugin values.

git-svn-id: https://svn.apache.org/repos/asf/openjpa/branches/1.0.x@1462558 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Jeremy Bauer 2013-03-29 17:48:02 +00:00
parent 5957d4a18e
commit 01bc0d257b
3 changed files with 33 additions and 0 deletions

View File

@ -476,7 +476,13 @@ public abstract class AbstractBrokerFactory
_brokers = new ConcurrentReferenceHashSet(
ConcurrentReferenceHashSet.WEAK);
// 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;
}

View File

@ -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.
@ -99,6 +101,20 @@ public class PluginValue extends ObjectValue {
*/
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)
@ -106,6 +122,14 @@ public class PluginValue extends ObjectValue {
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();
}
public void set(Object obj, boolean derived) {
if (!_singleton)
throw new IllegalStateException(_loc.get("not-singleton",

View File

@ -112,3 +112,6 @@ Id-displayorder: 50
Id-expert: true
not-dynamic: Can not modify "{0}" to "{1}" because the property is not dynamic.
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.