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