Index: pom.xml
===================================================================
--- pom.xml (revision 21280)
+++ pom.xml (working copy)
@@ -194,6 +194,16 @@
easymockclassextension
test
+
+ org.apache.commons
+ commons-proxy
+ 1.0
+
+
+ cglib
+ cglib-full
+ 2.0.2
+
Index: src/main/java/info/magnolia/cms/beans/config/ServerConfiguration.java
===================================================================
--- src/main/java/info/magnolia/cms/beans/config/ServerConfiguration.java (revision 21280)
+++ src/main/java/info/magnolia/cms/beans/config/ServerConfiguration.java (working copy)
@@ -81,8 +81,8 @@
return (ServerConfiguration) FactoryUtil.getSingleton(ServerConfiguration.class);
}
- public static final class Observer extends FactoryUtil.ObservedObjectFactory {
- public Observer() {
+ public static final class InstanceFactory extends FactoryUtil.ObservedObjectFactory {
+ public InstanceFactory() {
super(ContentRepository.CONFIG, "/server", ServerConfiguration.class);
}
Index: src/main/java/info/magnolia/cms/util/FactoryUtil.java
===================================================================
--- src/main/java/info/magnolia/cms/util/FactoryUtil.java (revision 21280)
+++ src/main/java/info/magnolia/cms/util/FactoryUtil.java (working copy)
@@ -44,6 +44,7 @@
import info.magnolia.content2bean.impl.Content2BeanTransformerImpl;
import info.magnolia.context.MgnlContext;
+import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.Map;
@@ -53,6 +54,8 @@
import org.apache.commons.beanutils.ConstructorUtils;
import org.apache.commons.lang.StringUtils;
+import org.apache.commons.proxy.Invoker;
+import org.apache.commons.proxy.factory.cglib.CglibProxyFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -106,7 +109,11 @@
repository = StringUtils.substringBefore(className, ":");
path = StringUtils.substringAfter(className, ":");
}
- return new ObservedObjectFactory(repository, path, interf);
+
+ final ObservedObjectFactory factory = new ObservedObjectFactory(repository, path, interf);
+ setInstanceFactory(interf, factory);
+ // now that the factory is registered we can recall the method
+ return newInstance(interf);
}
else{
Class clazz = ClassUtil.classForName(className);
@@ -174,9 +181,11 @@
instance = newInstance(interf);
instances.put(interf, instance);
}
+ /*
if(instance instanceof ObservedObjectFactory){
instance = ((ObservedObjectFactory)instance).getObservedObject();
}
+ */
return instance;
}
@@ -224,10 +233,11 @@
* @version $Id$
*
*/
- public static class ObservedObjectFactory implements EventListener{
+ public static class ObservedObjectFactory implements EventListener, InstanceFactory {
private static final Logger log = LoggerFactory.getLogger(ObservedObjectFactory.class);
private static final int DEFAULT_MAX_DELAY = 5000;
+
private static final int DEFAULT_DELAY = 1000;
/**
@@ -255,6 +265,14 @@
startObservation(path);
}
+ public Object newInstance() {
+ return new CglibProxyFactory().createInvokerProxy(new Invoker(){
+ public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
+ return method.invoke(getObservedObject(), args);
+ }
+ }, new Class[]{getObservedObject().getClass()});
+ }
+
protected void startObservation(String handle) {
ObservationUtil.registerDeferredChangeListener(ContentRepository.CONFIG, handle, this, DEFAULT_DELAY, DEFAULT_MAX_DELAY);
}
Index: src/main/java/info/magnolia/cms/security/IPSecurityManagerImpl.java
===================================================================
--- src/main/java/info/magnolia/cms/security/IPSecurityManagerImpl.java (revision 21280)
+++ src/main/java/info/magnolia/cms/security/IPSecurityManagerImpl.java (working copy)
@@ -91,8 +91,8 @@
rules.put(name, rule);
}
- public static final class Observer extends FactoryUtil.ObservedObjectFactory {
- public Observer() {
+ public static final class InstanceFactory extends FactoryUtil.ObservedObjectFactory {
+ public InstanceFactory() {
super(ContentRepository.CONFIG, "/server/IPConfig", IPSecurityManager.class);
}
Index: src/main/resources/mgnl-beans.properties
===================================================================
--- src/main/resources/mgnl-beans.properties (revision 21280)
+++ src/main/resources/mgnl-beans.properties (working copy)
@@ -9,9 +9,9 @@
info.magnolia.module.mail.handlers.MgnlMailHandler=info.magnolia.module.mail.handlers.SimpleMailHandler
-info.magnolia.cms.beans.config.ServerConfiguration=info.magnolia.cms.beans.config.ServerConfiguration$Observer
+info.magnolia.cms.beans.config.ServerConfiguration=info.magnolia.cms.beans.config.ServerConfiguration$InstanceFactory
info.magnolia.cms.security.SecuritySupport=/server/security
-info.magnolia.cms.security.IPSecurityManager=info.magnolia.cms.security.IPSecurityManagerImpl$Observer
+info.magnolia.cms.security.IPSecurityManager=info.magnolia.cms.security.IPSecurityManagerImpl$InstanceFactory
info.magnolia.cms.filters.MgnlFilter=info.magnolia.cms.filters.CompositeFilter