aboutsummaryrefslogtreecommitdiff
path: root/org.jacoco.agent.rt
diff options
context:
space:
mode:
authorMarc R. Hoffmann <hoffmann@mountainminds.com>2013-10-25 18:36:58 +0200
committerMarc R. Hoffmann <hoffmann@mountainminds.com>2013-10-25 18:36:58 +0200
commitb887be401ea77008a62390149962714fd66c6ad6 (patch)
tree11803af764a752579e3dd504e1940c45dafb6f9d /org.jacoco.agent.rt
parent08acce683b380fe4ac388dc0a323ce1ceda1784a (diff)
downloadjacoco-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.java20
-rw-r--r--org.jacoco.agent.rt/src/org/jacoco/agent/rt/internal/JmxRegistration.java48
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;
+ }
+
+}