You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by sv...@apache.org on 2021/08/23 09:55:20 UTC

[wicket] branch wicket-9.x updated: WICKET-6916 replace proxies with StandardMBean

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 <sv...@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