This is an automated email from the ASF dual-hosted git repository. svenmeier pushed a commit to branch wicket-9.x in repository https://gitbox.apache.org/repos/asf/wicket.git
The following commit(s) were added to refs/heads/wicket-9.x by this push: new 04b3440 WICKET-6916 replace proxies with StandardMBean 04b3440 is described below commit 04b3440df6affbd11b0286de5ed54f587ff55f52 Author: Sven Meier <svenme...@apache.org> AuthorDate: Fri Aug 20 19:34:33 2021 +0200 WICKET-6916 replace proxies with StandardMBean --- wicket-jmx/pom.xml | 8 -- wicket-jmx/src/main/java/module-info.java | 1 - .../java/org/apache/wicket/jmx/Initializer.java | 93 ++++++++++------------ 3 files changed, 42 insertions(+), 60 deletions(-) diff --git a/wicket-jmx/pom.xml b/wicket-jmx/pom.xml index 15c050c..9c6facb 100644 --- a/wicket-jmx/pom.xml +++ b/wicket-jmx/pom.xml @@ -30,16 +30,8 @@ <dependencies> <dependency> - <groupId>cglib</groupId> - <artifactId>cglib</artifactId> - </dependency> - <dependency> <groupId>org.apache.wicket</groupId> <artifactId>wicket-core</artifactId> </dependency> - <dependency> - <groupId>org.ow2.asm</groupId> - <artifactId>asm</artifactId> - </dependency> </dependencies> </project> diff --git a/wicket-jmx/src/main/java/module-info.java b/wicket-jmx/src/main/java/module-info.java index d07942d..b646aaf 100644 --- a/wicket-jmx/src/main/java/module-info.java +++ b/wicket-jmx/src/main/java/module-info.java @@ -20,7 +20,6 @@ module org.apache.wicket.jmx { requires org.apache.wicket.util; requires org.apache.wicket.core; requires org.slf4j; - requires cglib; provides org.apache.wicket.IInitializer with org.apache.wicket.jmx.Initializer; exports org.apache.wicket.jmx; diff --git a/wicket-jmx/src/main/java/org/apache/wicket/jmx/Initializer.java b/wicket-jmx/src/main/java/org/apache/wicket/jmx/Initializer.java index ca990ac..6b896ba 100644 --- a/wicket-jmx/src/main/java/org/apache/wicket/jmx/Initializer.java +++ b/wicket-jmx/src/main/java/org/apache/wicket/jmx/Initializer.java @@ -17,10 +17,12 @@ package org.apache.wicket.jmx; import java.lang.management.ManagementFactory; -import java.lang.reflect.Method; import java.util.ArrayList; import java.util.List; +import java.util.concurrent.Callable; +import javax.management.Attribute; +import javax.management.AttributeList; import javax.management.InstanceAlreadyExistsException; import javax.management.InstanceNotFoundException; import javax.management.MBeanRegistrationException; @@ -29,10 +31,7 @@ import javax.management.MBeanServerFactory; import javax.management.MalformedObjectNameException; import javax.management.NotCompliantMBeanException; import javax.management.ObjectName; - -import net.sf.cglib.core.DefaultNamingPolicy; -import net.sf.cglib.core.Predicate; -import net.sf.cglib.proxy.Enhancer; +import javax.management.StandardMBean; import org.apache.wicket.IInitializer; import org.apache.wicket.ThreadContext; @@ -229,24 +228,39 @@ public class Initializer implements IInitializer * @throws MBeanRegistrationException * @throws InstanceAlreadyExistsException */ - private void register(final org.apache.wicket.Application application, final Object o, + private <T> void register(final org.apache.wicket.Application application, final T o, final ObjectName objectName) throws InstanceAlreadyExistsException, MBeanRegistrationException, NotCompliantMBeanException { - Object proxy = createProxy(application, o); - mbeanServer.registerMBean(proxy, objectName); - registered.add(objectName); - } - - private Object createProxy(final org.apache.wicket.Application application, final Object o) - { - Enhancer e = new Enhancer(); - e.setInterfaces(o.getClass().getInterfaces()); - e.setSuperclass(Object.class); - e.setCallback(new net.sf.cglib.proxy.InvocationHandler() - { + StandardMBean bean = new StandardMBean(o, (Class<T>)o.getClass().getInterfaces()[0]) { + @Override + public Object getAttribute(String attribute) + { + return withApplication(() -> super.getAttribute(attribute)); + } + @Override - public Object invoke(Object proxy, Method method, Object[] args) throws Throwable + public void setAttribute(Attribute attribute) + { + withApplication(() -> { + super.setAttribute(attribute); + return null; + }); + } + + @Override + public AttributeList setAttributes(AttributeList attributes) + { + return withApplication(() -> super.setAttributes(attributes)); + } + + @Override + public Object invoke(String actionName, Object[] params, String[] signature) + { + return withApplication(() -> super.invoke(actionName, params, signature)); + } + + private <R> R withApplication(Callable<R> callable) { boolean existed = ThreadContext.exists(); @@ -257,7 +271,11 @@ public class Initializer implements IInitializer try { - return method.invoke(o, args); + return callable.call(); + } + catch (Exception ex) + { + throw new WicketRuntimeException(ex); } finally { @@ -267,35 +285,8 @@ public class Initializer implements IInitializer } } } - }); - e.setNamingPolicy(new DefaultNamingPolicy() - { - @Override - public String getClassName(final String prefix, final String source, final Object key, - final Predicate names) - { - return o.getClass().getName().replace(".wrapper", ""); - } - }); - e.setClassLoader(resolveClassLoader()); - - return e.create(); - } - - private static ClassLoader resolveClassLoader() - { - ClassLoader classLoader = null; - if (org.apache.wicket.Application.exists()) - { - classLoader = org.apache.wicket.Application.get().getApplicationSettings() - .getClassResolver().getClassLoader(); - } - - if (classLoader == null) { - classLoader = Thread.currentThread().getContextClassLoader(); - } - - return classLoader; + }; + mbeanServer.registerMBean(bean, objectName); + registered.add(objectName); } - -} +} \ No newline at end of file