diff options
author | Marc R. Hoffmann <hoffmann@mountainminds.com> | 2013-10-25 18:36:58 +0200 |
---|---|---|
committer | Marc R. Hoffmann <hoffmann@mountainminds.com> | 2013-10-25 18:36:58 +0200 |
commit | b887be401ea77008a62390149962714fd66c6ad6 (patch) | |
tree | 11803af764a752579e3dd504e1940c45dafb6f9d /org.jacoco.agent.rt | |
parent | 08acce683b380fe4ac388dc0a323ce1ceda1784a (diff) | |
download | jacoco-b887be401ea77008a62390149962714fd66c6ad6.tar.gz |
Avoid direct dependency on java.lang.management APIs to allow usage on
Android (GitHub #150).
Diffstat (limited to 'org.jacoco.agent.rt')
-rw-r--r-- | org.jacoco.agent.rt/src/org/jacoco/agent/rt/internal/Agent.java | 20 | ||||
-rw-r--r-- | org.jacoco.agent.rt/src/org/jacoco/agent/rt/internal/JmxRegistration.java | 48 |
2 files changed, 55 insertions, 13 deletions
diff --git a/org.jacoco.agent.rt/src/org/jacoco/agent/rt/internal/Agent.java b/org.jacoco.agent.rt/src/org/jacoco/agent/rt/internal/Agent.java index a56020dc..f2adf491 100644 --- a/org.jacoco.agent.rt/src/org/jacoco/agent/rt/internal/Agent.java +++ b/org.jacoco.agent.rt/src/org/jacoco/agent/rt/internal/Agent.java @@ -13,11 +13,8 @@ package org.jacoco.agent.rt.internal; import java.io.ByteArrayOutputStream; import java.io.IOException; -import java.lang.management.ManagementFactory; import java.net.InetAddress; - -import javax.management.ObjectName; -import javax.management.StandardMBean; +import java.util.concurrent.Callable; import org.jacoco.agent.rt.IAgent; import org.jacoco.agent.rt.internal.output.FileOutput; @@ -37,8 +34,6 @@ import org.jacoco.core.runtime.RuntimeData; */ public class Agent implements IAgent { - private static final String JMX_NAME = "org.jacoco:type=Runtime"; - private static Agent singleton; /** @@ -83,9 +78,11 @@ public class Agent implements IAgent { private final IExceptionLogger logger; + private final RuntimeData data; + private IAgentOutput output; - private final RuntimeData data; + private Callable<Void> jmxRegistration; /** * Creates a new agent with the given agent options. @@ -124,9 +121,7 @@ public class Agent implements IAgent { output = createAgentOutput(); output.startup(options, data); if (options.getJmx()) { - ManagementFactory.getPlatformMBeanServer().registerMBean( - new StandardMBean(this, IAgent.class), - new ObjectName(JMX_NAME)); + jmxRegistration = new JmxRegistration(this); } } catch (final Exception e) { logger.logExeption(e); @@ -142,9 +137,8 @@ public class Agent implements IAgent { output.writeExecutionData(false); } output.shutdown(); - if (options.getJmx()) { - ManagementFactory.getPlatformMBeanServer().unregisterMBean( - new ObjectName(JMX_NAME)); + if (jmxRegistration != null) { + jmxRegistration.call(); } } catch (final Exception e) { logger.logExeption(e); diff --git a/org.jacoco.agent.rt/src/org/jacoco/agent/rt/internal/JmxRegistration.java b/org.jacoco.agent.rt/src/org/jacoco/agent/rt/internal/JmxRegistration.java new file mode 100644 index 00000000..75b6fb81 --- /dev/null +++ b/org.jacoco.agent.rt/src/org/jacoco/agent/rt/internal/JmxRegistration.java @@ -0,0 +1,48 @@ +/******************************************************************************* + * Copyright (c) 2009, 2013 Mountainminds GmbH & Co. KG and Contributors + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Marc R. Hoffmann - initial API and implementation + * + *******************************************************************************/ +package org.jacoco.agent.rt.internal; + +import java.lang.management.ManagementFactory; +import java.util.concurrent.Callable; + +import javax.management.MBeanServer; +import javax.management.ObjectName; +import javax.management.StandardMBean; + +import org.jacoco.agent.rt.IAgent; + +/** + * Access to JMX APIs are encapsulated in this class to allow the JaCoCo runtime + * on platforms without JMX support (e.g Android). + */ +class JmxRegistration implements Callable<Void> { + + private static final String JMX_NAME = "org.jacoco:type=Runtime"; + + private final MBeanServer server; + private final ObjectName name; + + JmxRegistration(final IAgent agent) throws Exception { + server = ManagementFactory.getPlatformMBeanServer(); + name = new ObjectName(JMX_NAME); + server.registerMBean(new StandardMBean(agent, IAgent.class), name); + } + + /** + * De-register the agent again. + */ + public Void call() throws Exception { + server.unregisterMBean(name); + return null; + } + +} |