You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@felix.apache.org by gh...@apache.org on 2019/02/08 14:22:10 UTC
svn commit: r1853222 - in
/felix/trunk/healthcheck/core/src/main/java/org/apache/felix/hc:
core/impl/util/HealthCheckFilter.java jmx/impl/HealthCheckMBeanCreator.java
Author: ghenzler
Date: Fri Feb 8 14:22:10 2019
New Revision: 1853222
URL: http://svn.apache.org/viewvc?rev=1853222&view=rev
Log:
FELIX-6052 Ensure MBeans are registered for legacy checks as well and improved filter for MBeanCreator in general
Modified:
felix/trunk/healthcheck/core/src/main/java/org/apache/felix/hc/core/impl/util/HealthCheckFilter.java
felix/trunk/healthcheck/core/src/main/java/org/apache/felix/hc/jmx/impl/HealthCheckMBeanCreator.java
Modified: felix/trunk/healthcheck/core/src/main/java/org/apache/felix/hc/core/impl/util/HealthCheckFilter.java
URL: http://svn.apache.org/viewvc/felix/trunk/healthcheck/core/src/main/java/org/apache/felix/hc/core/impl/util/HealthCheckFilter.java?rev=1853222&r1=1853221&r2=1853222&view=diff
==============================================================================
--- felix/trunk/healthcheck/core/src/main/java/org/apache/felix/hc/core/impl/util/HealthCheckFilter.java (original)
+++ felix/trunk/healthcheck/core/src/main/java/org/apache/felix/hc/core/impl/util/HealthCheckFilter.java Fri Feb 8 14:22:10 2019
@@ -32,12 +32,15 @@ import org.slf4j.LoggerFactory;
*
* This class is not thread safe and instances shouldn't be used concurrently from different threads. */
public class HealthCheckFilter {
- private final Logger log = LoggerFactory.getLogger(getClass());
- private final BundleContext bundleContext;
+ private final Logger log = LoggerFactory.getLogger(getClass());
+ // object class (supporting current interface and legacy)
+ public static final String HC_FILTER_OBJECT_CLASS = "(|(objectClass="+HealthCheck.class.getName()+")(objectClass=org.apache.sling.hc.api.HealthCheck))";
public static final String OMIT_PREFIX = "-";
+ private final BundleContext bundleContext;
+
/** Create a new filter object */
public HealthCheckFilter(final BundleContext bc) {
bundleContext = bc;
@@ -75,11 +78,8 @@ public class HealthCheckFilter {
CharSequence getServiceFilter(HealthCheckSelector selector, boolean combineTagsWithOr) {
// Build service filter
final StringBuilder filterBuilder = new StringBuilder();
- filterBuilder.append("(&"); // overall and
-
- // object class (supporting current interface and legacy)
- filterBuilder.append("(|(objectClass=").append(HealthCheck.class.getName())
- .append(")(objectClass=org.apache.sling.hc.api.HealthCheck))");
+ filterBuilder.append("(&");
+ filterBuilder.append(HC_FILTER_OBJECT_CLASS);
final int prefixLen = HealthCheckFilter.OMIT_PREFIX.length();
final StringBuilder filterBuilderForOrOperator = new StringBuilder(); // or filters
Modified: felix/trunk/healthcheck/core/src/main/java/org/apache/felix/hc/jmx/impl/HealthCheckMBeanCreator.java
URL: http://svn.apache.org/viewvc/felix/trunk/healthcheck/core/src/main/java/org/apache/felix/hc/jmx/impl/HealthCheckMBeanCreator.java?rev=1853222&r1=1853221&r2=1853222&view=diff
==============================================================================
--- felix/trunk/healthcheck/core/src/main/java/org/apache/felix/hc/jmx/impl/HealthCheckMBeanCreator.java (original)
+++ felix/trunk/healthcheck/core/src/main/java/org/apache/felix/hc/jmx/impl/HealthCheckMBeanCreator.java Fri Feb 8 14:22:10 2019
@@ -30,7 +30,10 @@ import javax.management.DynamicMBean;
import org.apache.commons.lang3.StringUtils;
import org.apache.felix.hc.api.HealthCheck;
import org.apache.felix.hc.core.impl.executor.ExtendedHealthCheckExecutor;
+import org.apache.felix.hc.core.impl.util.HealthCheckFilter;
import org.osgi.framework.BundleContext;
+import org.osgi.framework.Filter;
+import org.osgi.framework.InvalidSyntaxException;
import org.osgi.framework.ServiceReference;
import org.osgi.framework.ServiceRegistration;
import org.osgi.service.component.annotations.Activate;
@@ -61,27 +64,14 @@ public class HealthCheckMBeanCreator {
@Activate
protected void activate(final BundleContext btx) {
- this.hcTracker = new ServiceTracker<HealthCheck, Object>(btx, HealthCheck.class, null) {
-
- @Override
- public Object addingService(final ServiceReference<HealthCheck> reference) {
- return registerHCMBean(btx, reference);
- }
-
- @Override
- public void modifiedService(final ServiceReference<HealthCheck> reference,
- final Object service) {
- unregisterHCMBean(btx, reference);
- registerHCMBean(btx, reference);
- }
-
- @Override
- public void removedService(final ServiceReference<HealthCheck> reference,
- final Object service) {
- unregisterHCMBean(btx, reference);
- }
- };
- this.hcTracker.open();
+ try {
+ Filter filter = btx.createFilter("(&"+HealthCheckFilter.HC_FILTER_OBJECT_CLASS+"("+HealthCheck.MBEAN_NAME+"=*))");
+ this.hcTracker = new HealthCheckServiceTracker(btx, filter);
+ this.hcTracker.open();
+ } catch (InvalidSyntaxException e) {
+ logger.warn("Could not create service tracker for filter "+HealthCheckFilter.HC_FILTER_OBJECT_CLASS, e);
+ }
+
}
@Deactivate
@@ -142,6 +132,33 @@ public class HealthCheckMBeanCreator {
}
}
+ private final class HealthCheckServiceTracker extends ServiceTracker<HealthCheck, Object> {
+ private final BundleContext bundleContext;
+
+ private HealthCheckServiceTracker(BundleContext bundleContext, Filter filter) {
+ super(bundleContext, filter, null);
+ this.bundleContext = bundleContext;
+ }
+
+ @Override
+ public Object addingService(final ServiceReference<HealthCheck> reference) {
+ return registerHCMBean(bundleContext, reference);
+ }
+
+ @Override
+ public void modifiedService(final ServiceReference<HealthCheck> reference,
+ final Object service) {
+ unregisterHCMBean(bundleContext, reference);
+ registerHCMBean(bundleContext, reference);
+ }
+
+ @Override
+ public void removedService(final ServiceReference<HealthCheck> reference,
+ final Object service) {
+ unregisterHCMBean(bundleContext, reference);
+ }
+ }
+
private final class Registration {
private final String name;
private final HealthCheckMBean mbean;
@@ -179,8 +196,10 @@ public class HealthCheckMBeanCreator {
if (StringUtils.isNotBlank(hcMBeanName)) {
final HealthCheckMBean mbean = new HealthCheckMBean(ref, executor);
return new Registration(hcMBeanName.replace(',', '.'), mbean);
+ } else {
+ logger.warn("Service reference {} unexpectedly has property {} not set", ref, HealthCheck.MBEAN_NAME);
+ return null;
}
- return null;
}
}