You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by ro...@apache.org on 2017/11/07 09:22:52 UTC
[sling-org-apache-sling-commons-metrics] 02/13: SLING-5424 -
MBeanServer reference in MetricServiceImpl should be made optional
This is an automated email from the ASF dual-hosted git repository.
rombert pushed a commit to annotated tag org.apache.sling.commons.metrics-1.2.0
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-commons-metrics.git
commit 8ca6065c655fca0f476661b07542d78b2dbffd4d
Author: Chetan Mehrotra <ch...@apache.org>
AuthorDate: Wed Jan 13 04:58:38 2016 +0000
SLING-5424 - MBeanServer reference in MetricServiceImpl should be made optional
-- Added test to check for MBean registration - Due to missing start call on JMXReporter
Mbeans were not getting registered
-- Made reference optional - If not set default PlatformMBeanServer is used
git-svn-id: https://svn.apache.org/repos/asf/sling/trunk/bundles/commons/metrics@1724354 13f79535-47bb-0310-9956-ffa450edef68
---
.../metrics/internal/MetricsServiceImpl.java | 29 ++++++++++++++-------
.../metrics/internal/MetricServiceTest.java | 30 ++++++++++++++++++++--
2 files changed, 48 insertions(+), 11 deletions(-)
diff --git a/src/main/java/org/apache/sling/commons/metrics/internal/MetricsServiceImpl.java b/src/main/java/org/apache/sling/commons/metrics/internal/MetricsServiceImpl.java
index a0e0520..d2f2728 100644
--- a/src/main/java/org/apache/sling/commons/metrics/internal/MetricsServiceImpl.java
+++ b/src/main/java/org/apache/sling/commons/metrics/internal/MetricsServiceImpl.java
@@ -20,6 +20,7 @@
package org.apache.sling.commons.metrics.internal;
import java.io.IOException;
+import java.lang.management.ManagementFactory;
import java.util.ArrayList;
import java.util.Dictionary;
import java.util.Hashtable;
@@ -36,6 +37,7 @@ import org.apache.felix.scr.annotations.Activate;
import org.apache.felix.scr.annotations.Component;
import org.apache.felix.scr.annotations.Deactivate;
import org.apache.felix.scr.annotations.Reference;
+import org.apache.felix.scr.annotations.ReferenceCardinality;
import org.apache.sling.commons.metrics.Meter;
import org.apache.sling.commons.metrics.MetricsService;
import org.apache.sling.commons.metrics.Timer;
@@ -52,21 +54,14 @@ public class MetricsServiceImpl implements MetricsService {
private final ConcurrentMap<String, Metric> metrics = new ConcurrentHashMap<String, Metric>();
private final MetricRegistry registry = new MetricRegistry();
- @Reference
+ @Reference(cardinality = ReferenceCardinality.OPTIONAL_UNARY)
private MBeanServer server;
private JmxReporter reporter;
@Activate
private void activate(BundleContext context, Map<String, Object> config) {
- //TODO Domain name should be based on calling bundle
- //For that we can register ServiceFactory and make use of calling
- //bundle symbolic name to determine the mapping
-
- reporter = JmxReporter.forRegistry(registry)
- .inDomain("org.apache.sling")
- .registerWith(server)
- .build();
+ enableJMXReporter();
final Dictionary<String, String> svcProps = new Hashtable<String, String>();
svcProps.put(Constants.SERVICE_DESCRIPTION, "Apache Sling Metrics Service");
@@ -205,4 +200,20 @@ public class MetricsServiceImpl implements MetricsService {
boolean isInstance(Metric metric);
}
+
+ private void enableJMXReporter() {
+ //TODO Domain name should be based on calling bundle
+ //For that we can register ServiceFactory and make use of calling
+ //bundle symbolic name to determine the mapping
+
+ if (server == null){
+ server = ManagementFactory.getPlatformMBeanServer();
+ }
+
+ reporter = JmxReporter.forRegistry(registry)
+ .inDomain("org.apache.sling")
+ .registerWith(server)
+ .build();
+ reporter.start();
+ }
}
diff --git a/src/test/java/org/apache/sling/commons/metrics/internal/MetricServiceTest.java b/src/test/java/org/apache/sling/commons/metrics/internal/MetricServiceTest.java
index a028abf..5885426 100644
--- a/src/test/java/org/apache/sling/commons/metrics/internal/MetricServiceTest.java
+++ b/src/test/java/org/apache/sling/commons/metrics/internal/MetricServiceTest.java
@@ -21,9 +21,14 @@ package org.apache.sling.commons.metrics.internal;
import java.lang.management.ManagementFactory;
import java.util.Collections;
+import java.util.Set;
import javax.management.MBeanServer;
+import javax.management.ObjectName;
+import javax.management.Query;
+import javax.management.QueryExp;
+import com.codahale.metrics.JmxReporter;
import com.codahale.metrics.MetricRegistry;
import org.apache.sling.commons.metrics.Counter;
import org.apache.sling.commons.metrics.Histogram;
@@ -36,9 +41,13 @@ import org.junit.After;
import org.junit.Rule;
import org.junit.Test;
+import static org.hamcrest.Matchers.empty;
+import static org.hamcrest.Matchers.is;
+import static org.hamcrest.Matchers.not;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertSame;
+import static org.junit.Assert.assertThat;
import static org.junit.Assert.assertTrue;
public class MetricServiceTest {
@@ -48,8 +57,8 @@ public class MetricServiceTest {
private MetricsServiceImpl service = new MetricsServiceImpl();
@After
- public void registerMBeanServer() {
- context.registerService(MBeanServer.class, ManagementFactory.getPlatformMBeanServer());
+ public void deactivate(){
+ MockOsgi.deactivate(service);
}
@Test
@@ -118,6 +127,23 @@ public class MetricServiceTest {
service.timer("test");
}
+ @Test
+ public void jmxRegistration() throws Exception{
+ MBeanServer server = ManagementFactory.getPlatformMBeanServer();
+ activate();
+ Meter meter = service.meter("test");
+ assertNotNull(meter);
+ QueryExp q = Query.isInstanceOf(Query.value(JmxReporter.JmxMeterMBean.class.getName()));
+ Set<ObjectName> names = server.queryNames(new ObjectName("org.apache.sling:name=*"), q);
+ assertThat(names, is(not(empty())));
+
+ MockOsgi.deactivate(service);
+
+ names = server.queryNames(new ObjectName("org.apache.sling:name=*"), q);
+ assertThat(names, is(empty()));
+
+ }
+
private MetricRegistry getRegistry(){
return context.getService(MetricRegistry.class);
}
--
To stop receiving notification emails like this one, please contact
"commits@sling.apache.org" <co...@sling.apache.org>.