You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by bd...@apache.org on 2013/07/23 18:09:21 UTC

svn commit: r1506139 - in /sling/trunk/contrib/extensions/healthcheck/hc-sling/src/main/java/org/apache/sling/hc/sling/impl: RulesMBeans.java RulesResourceParserImpl.java

Author: bdelacretaz
Date: Tue Jul 23 16:09:20 2013
New Revision: 1506139

URL: http://svn.apache.org/r1506139
Log:
SLING-2977 - scripted rules also work as MBeans now

Modified:
    sling/trunk/contrib/extensions/healthcheck/hc-sling/src/main/java/org/apache/sling/hc/sling/impl/RulesMBeans.java
    sling/trunk/contrib/extensions/healthcheck/hc-sling/src/main/java/org/apache/sling/hc/sling/impl/RulesResourceParserImpl.java

Modified: sling/trunk/contrib/extensions/healthcheck/hc-sling/src/main/java/org/apache/sling/hc/sling/impl/RulesMBeans.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/healthcheck/hc-sling/src/main/java/org/apache/sling/hc/sling/impl/RulesMBeans.java?rev=1506139&r1=1506138&r2=1506139&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/healthcheck/hc-sling/src/main/java/org/apache/sling/hc/sling/impl/RulesMBeans.java (original)
+++ sling/trunk/contrib/extensions/healthcheck/hc-sling/src/main/java/org/apache/sling/hc/sling/impl/RulesMBeans.java Tue Jul 23 16:09:20 2013
@@ -64,6 +64,7 @@ public class RulesMBeans {
     private String rulesPath;
     private RulesEngine engine;
     private List<ServiceRegistration> mBeansRegistrations;
+    private ResourceResolver resolver;
     
     @Activate
     public void activate(ComponentContext ctx) throws Exception {
@@ -72,39 +73,34 @@ public class RulesMBeans {
             throw new IllegalStateException("rulesPath is null, cannot activate");
         }
         
-        final ResourceResolver resolver = resourceResolverFactory.getAdministrativeResourceResolver(null);
-        try {
-            final Resource rulesRoot = resolver.getResource(rulesPath);
-            if(rulesRoot == null) {
-                throw new IllegalStateException("Resource not found, cannot parse Rules: " + rulesPath);
-            }
+        resolver = resourceResolverFactory.getAdministrativeResourceResolver(null);
+        final Resource rulesRoot = resolver.getResource(rulesPath);
+        if(rulesRoot == null) {
+            throw new IllegalStateException("Resource not found, cannot parse Rules: " + rulesPath);
+        }
 
-            // Parse Rules found under our configured root
-            engine = healthcheck.getNewRulesEngine();
-            final List<Rule> rules = parser.parseResource(rulesRoot); 
-            engine.addRules(rules);
-            
-            // And register MBeans for those Rules
-            mBeansRegistrations = new ArrayList<ServiceRegistration>();
-            final String RESOURCE_PATH_PROP = "sling.resource.path";
-            for(Rule r : rules) {
-                final Object rulePath = r.getInfo().get(RESOURCE_PATH_PROP);
-                if(rulePath == null) {
-                    // TODO this happens with scripted rules
-                    log.warn("Rule {} does not have a {} property, ignored", r, RESOURCE_PATH_PROP);
-                    continue;
-                }
-                final Dictionary<String, String> mbeanProps = new Hashtable<String, String>();
-                mbeanProps.put("jmx.objectname", "org.apache.sling.healthcheck:type=rules,service=" + rulePath);
-                final RuleDynamicMBean mbean = new RuleDynamicMBean(r);
-                mBeansRegistrations.add(ctx.getBundleContext().registerService(DynamicMBean.class.getName(), mbean, mbeanProps));
-                log.debug("Registered {} with properties {}", mbean, mbeanProps);
+        // Parse Rules found under our configured root
+        engine = healthcheck.getNewRulesEngine();
+        final List<Rule> rules = parser.parseResource(rulesRoot); 
+        engine.addRules(rules);
+        
+        // And register MBeans for those Rules
+        mBeansRegistrations = new ArrayList<ServiceRegistration>();
+        final String RESOURCE_PATH_PROP = "sling.resource.path";
+        for(Rule r : rules) {
+            final Object rulePath = r.getInfo().get(RESOURCE_PATH_PROP);
+            if(rulePath == null) {
+                // TODO this happens with scripted rules
+                log.warn("Rule {} does not have a {} property, ignored", r, RESOURCE_PATH_PROP);
+                continue;
             }
-            log.info("Registered {} Rule MBeans", mBeansRegistrations.size());
-            
-        } finally {
-            resolver.close();
+            final Dictionary<String, String> mbeanProps = new Hashtable<String, String>();
+            mbeanProps.put("jmx.objectname", "org.apache.sling.healthcheck:type=rules,service=" + rulePath);
+            final RuleDynamicMBean mbean = new RuleDynamicMBean(r);
+            mBeansRegistrations.add(ctx.getBundleContext().registerService(DynamicMBean.class.getName(), mbean, mbeanProps));
+            log.debug("Registered {} with properties {}", mbean, mbeanProps);
         }
+        log.info("Registered {} Rule MBeans", mBeansRegistrations.size());
     }
     
     @Deactivate
@@ -114,5 +110,7 @@ public class RulesMBeans {
         }
         log.info("Unregistered {} Rule MBeans", mBeansRegistrations.size());
         mBeansRegistrations = null;
+        resolver.close();
+        resolver = null;
     }
 }

Modified: sling/trunk/contrib/extensions/healthcheck/hc-sling/src/main/java/org/apache/sling/hc/sling/impl/RulesResourceParserImpl.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/healthcheck/hc-sling/src/main/java/org/apache/sling/hc/sling/impl/RulesResourceParserImpl.java?rev=1506139&r1=1506138&r2=1506139&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/healthcheck/hc-sling/src/main/java/org/apache/sling/hc/sling/impl/RulesResourceParserImpl.java (original)
+++ sling/trunk/contrib/extensions/healthcheck/hc-sling/src/main/java/org/apache/sling/hc/sling/impl/RulesResourceParserImpl.java Tue Jul 23 16:09:20 2013
@@ -91,7 +91,9 @@ public class RulesResourceParserImpl imp
         // If r adapts to a Sling script, use it to evaluate our Rule
         final SlingScript script = r.adaptTo(SlingScript.class);
         if(script != null) {
-            return new Rule(new ScriptSystemAttribute(requestProcessor, script), ScriptSystemAttribute.SUCCESS_STRING);
+            final Rule rule = new Rule(new ScriptSystemAttribute(requestProcessor, script), ScriptSystemAttribute.SUCCESS_STRING);
+            rule.getInfo().put(RESOURCE_PATH_INFO, r.getPath());
+            return rule;
         }
 
         // else convert using available RuleBuilders if suitable