Author: justin
Date: Thu Sep 18 00:25:04 2014
New Revision: 1625864
URL: http://svn.apache.org/r1625864
Log:
SLING-3950 - enable JMX monitoring of servlet resolver cache
Added:
sling/trunk/bundles/servlets/resolver/src/main/java/org/apache/sling/servlets/resolver/jmx/
sling/trunk/bundles/servlets/resolver/src/main/java/org/apache/sling/servlets/resolver/jmx/SlingServletResolverCacheMBean.java
Modified:
sling/trunk/bundles/servlets/resolver/src/main/java/org/apache/sling/servlets/resolver/internal/SlingServletResolver.java
Modified:
sling/trunk/bundles/servlets/resolver/src/main/java/org/apache/sling/servlets/resolver/internal/SlingServletResolver.java
URL:
http://svn.apache.org/viewvc/sling/trunk/bundles/servlets/resolver/src/main/java/org/apache/sling/servlets/resolver/internal/SlingServletResolver.java?rev=1625864&r1=1625863&r2=1625864&view=diff
==============================================================================
---
sling/trunk/bundles/servlets/resolver/src/main/java/org/apache/sling/servlets/resolver/internal/SlingServletResolver.java
(original)
+++
sling/trunk/bundles/servlets/resolver/src/main/java/org/apache/sling/servlets/resolver/internal/SlingServletResolver.java
Thu Sep 18 00:25:04 2014
@@ -42,6 +42,8 @@ import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
+import javax.management.NotCompliantMBeanException;
+import javax.management.StandardMBean;
import javax.servlet.Servlet;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
@@ -88,6 +90,7 @@ import org.apache.sling.servlets.resolve
import org.apache.sling.servlets.resolver.internal.helper.SlingServletConfig;
import
org.apache.sling.servlets.resolver.internal.resource.ServletResourceProvider;
import
org.apache.sling.servlets.resolver.internal.resource.ServletResourceProviderFactory;
+import org.apache.sling.servlets.resolver.jmx.SlingServletResolverCacheMBean;
import org.osgi.framework.BundleContext;
import org.osgi.framework.Constants;
import org.osgi.framework.ServiceReference;
@@ -510,6 +513,8 @@ public class SlingServletResolver
private final ThreadLocal<ResourceResolver> perThreadScriptResolver = new
ThreadLocal<ResourceResolver>();
+ private ServiceRegistration mbeanRegistration;
+
/**
* @see
org.apache.sling.api.request.SlingRequestListener#onEvent(org.apache.sling.api.request.SlingRequestEvent)
*/
@@ -845,6 +850,16 @@ public class SlingServletResolver
properties);
this.plugin = new
ServletResolverWebConsolePlugin(context.getBundleContext());
+
+ try {
+ Dictionary<String, String> mbeanProps = new Hashtable<String,
String>();
+ mbeanProps.put("jmx.objectname",
"org.apache.sling:type=servletResolver,service=SlingServletResolverCache");
+
+ ServletResolverCacheMBeanImpl mbean = new
ServletResolverCacheMBeanImpl();
+ mbeanRegistration =
context.getBundleContext().registerService(SlingServletResolverCacheMBean.class.getName(),
mbean, mbeanProps);
+ } catch (Throwable t) {
+ LOGGER.debug("Unable to register mbean");
+ }
}
/**
@@ -896,6 +911,11 @@ public class SlingServletResolver
this.cache = null;
this.servletResourceProviderFactory = null;
+
+ if (this.mbeanRegistration != null) {
+ this.mbeanRegistration.unregister();
+ this.mbeanRegistration = null;
+ }
}
protected void bindServlet(final ServiceReference reference) {
@@ -1048,12 +1068,16 @@ public class SlingServletResolver
}
}
if (flushCache) {
- this.cache.clear();
- this.logCacheSizeWarning = true;
+ flushCache();
}
}
}
+ private void flushCache() {
+ this.cache.clear();
+ this.logCacheSizeWarning = true;
+ }
+
/** The list of property names checked by {@link
#getName(ServiceReference)} */
private static final String[] NAME_PROPERTIES = { SLING_SERLVET_NAME,
COMPONENT_NAME, SERVICE_PID, SERVICE_ID };
@@ -1308,4 +1332,24 @@ public class SlingServletResolver
}
}
+
+ class ServletResolverCacheMBeanImpl extends StandardMBean implements
SlingServletResolverCacheMBean {
+
+ ServletResolverCacheMBeanImpl() throws NotCompliantMBeanException {
+ super(SlingServletResolverCacheMBean.class);
+ }
+
+ public int getCacheSize() {
+ return cache.size();
+ }
+
+ public void flushCache() {
+ SlingServletResolver.this.flushCache();
+ }
+
+ public int getMaximumCacheSize() {
+ return cacheSize;
+ }
+
+ }
}
Added:
sling/trunk/bundles/servlets/resolver/src/main/java/org/apache/sling/servlets/resolver/jmx/SlingServletResolverCacheMBean.java
URL:
http://svn.apache.org/viewvc/sling/trunk/bundles/servlets/resolver/src/main/java/org/apache/sling/servlets/resolver/jmx/SlingServletResolverCacheMBean.java?rev=1625864&view=auto
==============================================================================
---
sling/trunk/bundles/servlets/resolver/src/main/java/org/apache/sling/servlets/resolver/jmx/SlingServletResolverCacheMBean.java
(added)
+++
sling/trunk/bundles/servlets/resolver/src/main/java/org/apache/sling/servlets/resolver/jmx/SlingServletResolverCacheMBean.java
Thu Sep 18 00:25:04 2014
@@ -0,0 +1,45 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.sling.servlets.resolver.jmx;
+
+/**
+ * This is the management interface for the SlingServletResolver's cache.
+ */
+public interface SlingServletResolverCacheMBean {
+
+ /**
+ * Get the current size of the servlet resolver cache
+ *
+ * @return the cache size
+ */
+ int getCacheSize();
+
+ /**
+ * Get the maximum configured size of the servlet resolver cache
+ *
+ * @return the maximum configured size
+ */
+ int getMaximumCacheSize();
+
+ /**
+ * Flush the servlet resolver cache.
+ */
+ void flushCache();
+
+}