You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@cocoon.apache.org by re...@apache.org on 2009/07/15 00:44:29 UTC
svn commit: r794104 - in /cocoon/cocoon3/trunk: cocoon-monitoring/
cocoon-monitoring/src/main/java/org/apache/cocoon/monitoring/
cocoon-monitoring/src/main/java/org/apache/cocoon/monitoring/log4j/
cocoon-monitoring/src/main/java/org/apache/cocoon/monit...
Author: reinhard
Date: Tue Jul 14 22:44:28 2009
New Revision: 794104
URL: http://svn.apache.org/viewvc?rev=794104&view=rev
Log:
COCOON3-38
Monitoring of Servlet-Services, their connections and mount-paths.
Added:
cocoon/cocoon3/trunk/cocoon-monitoring/src/main/java/org/apache/cocoon/monitoring/log4j/
cocoon/cocoon3/trunk/cocoon-monitoring/src/main/java/org/apache/cocoon/monitoring/log4j/Log4JReconfigurator.java
- copied, changed from r780620, cocoon/cocoon3/trunk/cocoon-monitoring/src/main/java/org/apache/cocoon/monitoring/Log4JReconfigurator.java
cocoon/cocoon3/trunk/cocoon-monitoring/src/main/java/org/apache/cocoon/monitoring/log4j/LoggingConfigurationResetter.java
- copied, changed from r780620, cocoon/cocoon3/trunk/cocoon-monitoring/src/main/java/org/apache/cocoon/monitoring/LoggingConfigurationResetter.java
cocoon/cocoon3/trunk/cocoon-monitoring/src/main/java/org/apache/cocoon/monitoring/servletservice/
cocoon/cocoon3/trunk/cocoon-monitoring/src/main/java/org/apache/cocoon/monitoring/servletservice/ServletServiceMonitor.java (with props)
cocoon/cocoon3/trunk/cocoon-monitoring/src/main/java/org/apache/cocoon/monitoring/servletservice/ServletServiceMonitorInitializer.java (with props)
Removed:
cocoon/cocoon3/trunk/cocoon-monitoring/src/main/java/org/apache/cocoon/monitoring/Log4JReconfigurator.java
cocoon/cocoon3/trunk/cocoon-monitoring/src/main/java/org/apache/cocoon/monitoring/LoggingConfigurationResetter.java
Modified:
cocoon/cocoon3/trunk/cocoon-monitoring/pom.xml
cocoon/cocoon3/trunk/cocoon-monitoring/src/main/resources/META-INF/cocoon/spring/cocoon-monitoring.xml
cocoon/cocoon3/trunk/parent/pom.xml
Modified: cocoon/cocoon3/trunk/cocoon-monitoring/pom.xml
URL: http://svn.apache.org/viewvc/cocoon/cocoon3/trunk/cocoon-monitoring/pom.xml?rev=794104&r1=794103&r2=794104&view=diff
==============================================================================
--- cocoon/cocoon3/trunk/cocoon-monitoring/pom.xml (original)
+++ cocoon/cocoon3/trunk/cocoon-monitoring/pom.xml Tue Jul 14 22:44:28 2009
@@ -44,6 +44,14 @@
<artifactId>cocoon-spring-configurator</artifactId>
</dependency>
<dependency>
+ <groupId>org.apache.cocoon</groupId>
+ <artifactId>cocoon-servlet-service-impl</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>javax.servlet</groupId>
+ <artifactId>servlet-api</artifactId>
+ </dependency>
+ <dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
</dependency>
Copied: cocoon/cocoon3/trunk/cocoon-monitoring/src/main/java/org/apache/cocoon/monitoring/log4j/Log4JReconfigurator.java (from r780620, cocoon/cocoon3/trunk/cocoon-monitoring/src/main/java/org/apache/cocoon/monitoring/Log4JReconfigurator.java)
URL: http://svn.apache.org/viewvc/cocoon/cocoon3/trunk/cocoon-monitoring/src/main/java/org/apache/cocoon/monitoring/log4j/Log4JReconfigurator.java?p2=cocoon/cocoon3/trunk/cocoon-monitoring/src/main/java/org/apache/cocoon/monitoring/log4j/Log4JReconfigurator.java&p1=cocoon/cocoon3/trunk/cocoon-monitoring/src/main/java/org/apache/cocoon/monitoring/Log4JReconfigurator.java&r1=780620&r2=794104&rev=794104&view=diff
==============================================================================
--- cocoon/cocoon3/trunk/cocoon-monitoring/src/main/java/org/apache/cocoon/monitoring/Log4JReconfigurator.java (original)
+++ cocoon/cocoon3/trunk/cocoon-monitoring/src/main/java/org/apache/cocoon/monitoring/log4j/Log4JReconfigurator.java Tue Jul 14 22:44:28 2009
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.cocoon.monitoring;
+package org.apache.cocoon.monitoring.log4j;
import java.io.File;
import java.io.FileNotFoundException;
@@ -53,7 +53,7 @@
/**
* This is a JMX MBean class that expose methods for log4j configuration.
*/
-@ManagedResource
+@ManagedResource(objectName = "org.apache.cocoon.monitoring:group=Log4J,name=Log4JReconfigurator")
public class Log4JReconfigurator {
private static final String[] EXTENSIONS = new String[] { "xml", "properties" };
Copied: cocoon/cocoon3/trunk/cocoon-monitoring/src/main/java/org/apache/cocoon/monitoring/log4j/LoggingConfigurationResetter.java (from r780620, cocoon/cocoon3/trunk/cocoon-monitoring/src/main/java/org/apache/cocoon/monitoring/LoggingConfigurationResetter.java)
URL: http://svn.apache.org/viewvc/cocoon/cocoon3/trunk/cocoon-monitoring/src/main/java/org/apache/cocoon/monitoring/log4j/LoggingConfigurationResetter.java?p2=cocoon/cocoon3/trunk/cocoon-monitoring/src/main/java/org/apache/cocoon/monitoring/log4j/LoggingConfigurationResetter.java&p1=cocoon/cocoon3/trunk/cocoon-monitoring/src/main/java/org/apache/cocoon/monitoring/LoggingConfigurationResetter.java&r1=780620&r2=794104&rev=794104&view=diff
==============================================================================
--- cocoon/cocoon3/trunk/cocoon-monitoring/src/main/java/org/apache/cocoon/monitoring/LoggingConfigurationResetter.java (original)
+++ cocoon/cocoon3/trunk/cocoon-monitoring/src/main/java/org/apache/cocoon/monitoring/log4j/LoggingConfigurationResetter.java Tue Jul 14 22:44:28 2009
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.cocoon.monitoring;
+package org.apache.cocoon.monitoring.log4j;
import java.util.Timer;
import java.util.TimerTask;
Added: cocoon/cocoon3/trunk/cocoon-monitoring/src/main/java/org/apache/cocoon/monitoring/servletservice/ServletServiceMonitor.java
URL: http://svn.apache.org/viewvc/cocoon/cocoon3/trunk/cocoon-monitoring/src/main/java/org/apache/cocoon/monitoring/servletservice/ServletServiceMonitor.java?rev=794104&view=auto
==============================================================================
--- cocoon/cocoon3/trunk/cocoon-monitoring/src/main/java/org/apache/cocoon/monitoring/servletservice/ServletServiceMonitor.java (added)
+++ cocoon/cocoon3/trunk/cocoon-monitoring/src/main/java/org/apache/cocoon/monitoring/servletservice/ServletServiceMonitor.java Tue Jul 14 22:44:28 2009
@@ -0,0 +1,144 @@
+/*
+ * 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.cocoon.monitoring.servletservice;
+
+import java.lang.reflect.Field;
+import java.util.ArrayList;
+import java.util.Enumeration;
+import java.util.List;
+import java.util.Map;
+
+import javax.servlet.Servlet;
+import javax.servlet.ServletConfig;
+import javax.servlet.ServletContext;
+
+import org.apache.cocoon.servletservice.ServletServiceContext;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.springframework.aop.framework.Advised;
+import org.springframework.jmx.export.annotation.ManagedAttribute;
+import org.springframework.jmx.export.annotation.ManagedResource;
+
+/**
+ * JMX MBean class that expose base information about Servlet-Services.
+ */
+@ManagedResource
+public class ServletServiceMonitor {
+
+ private final Log logger = LogFactory.getLog(this.getClass());
+ private final Servlet servlet;
+
+ public ServletServiceMonitor(Servlet servlet) {
+ this.servlet = servlet;
+ }
+
+ /**
+ * Returns all ServletService init parameters, excluding null parameters.
+ *
+ * @return all ServletService init parameters
+ */
+ @ManagedAttribute(description = "Returns all ServletService init parameters")
+ public String[] getServiceServletInitParameters() {
+ ServletConfig config = this.servlet.getServletConfig();
+ @SuppressWarnings("unchecked")
+ Enumeration<String> initParameterNames = config.getInitParameterNames();
+ List<String> result = new ArrayList<String>();
+
+ while (initParameterNames.hasMoreElements()) {
+ String name = initParameterNames.nextElement();
+ String parameter = config.getInitParameter(name);
+ if (parameter != null) { // omit null parameters
+ result.add(name + " = " + parameter);
+ }
+ }
+
+ return result.toArray(new String[] {});
+ }
+
+ /**
+ * Returns list of connections for this Servlet-Service.
+ *
+ * @param servletServiceName
+ * @return <code>String</code> array of connections for this Servlet-Service
+ */
+ /*
+ * TODO This method uses a private accessor to access the connections field of the
+ * ServletServiceContext. The servlet-service-fw-impl > 1.2.0 will expose them.
+ */
+ @SuppressWarnings("unchecked")
+ @ManagedAttribute(description = "Returns list of connections for this Servlet-Service")
+ public final String[] getServletServiceConnections() {
+ ServletContext servletContext = this.servlet.getServletConfig().getServletContext();
+ ServletServiceContext servletServiceContext = (ServletServiceContext) servletContext;
+
+ Map<String, String> servletServiceConnections = null;
+ try {
+ Field connectionsField = servletServiceContext.getClass().getDeclaredField("connectionServiceNames");
+ connectionsField.setAccessible(true);
+ servletServiceConnections = (Map<String, String>) connectionsField.get(unpackProxy(servletServiceContext));
+ } catch (Exception e) {
+ this.logger.warn("Can't access the connections field of " + servletContext + ".", e);
+ }
+
+ if (servletServiceConnections != null) {
+ String connections[] = new String[servletServiceConnections.size()];
+ int i = 0;
+ for (String key : servletServiceConnections.keySet()) {
+ connections[i] = key + " = " + servletServiceConnections.get(key);
+ i++;
+ }
+ return connections;
+ } else {
+ return new String[] {};
+ }
+ }
+
+ /**
+ * Returns information about this Servlet-Service, such as author, version, and copyright.
+ *
+ * @param servletServiceName
+ * @return information about this Servlet-Service
+ */
+ @ManagedAttribute(description = "Returns information about this Servlet-Service")
+ public final String getServletServiceInfo() {
+ return this.servlet.getServletInfo();
+ }
+
+ /**
+ * Get Servlet-Services month path.
+ *
+ * @return month path
+ */
+ @ManagedAttribute(description = "Returns list of registered Servlet-Services with their month paths")
+ public final String getServletServiceMountPaths() {
+ ServletContext servletContext = this.servlet.getServletConfig().getServletContext();
+ ServletServiceContext context = (ServletServiceContext) servletContext;
+ return context.getMountPath();
+ }
+
+ @SuppressWarnings("unchecked")
+ private static <T> T unpackProxy(T proxy) throws Exception {
+ if (proxy instanceof Advised) {
+ Advised advised = (Advised) proxy;
+ return (T) advised.getTargetSource().getTarget();
+ }
+
+ return proxy;
+ }
+}
Propchange: cocoon/cocoon3/trunk/cocoon-monitoring/src/main/java/org/apache/cocoon/monitoring/servletservice/ServletServiceMonitor.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: cocoon/cocoon3/trunk/cocoon-monitoring/src/main/java/org/apache/cocoon/monitoring/servletservice/ServletServiceMonitor.java
------------------------------------------------------------------------------
svn:keywords = Id
Propchange: cocoon/cocoon3/trunk/cocoon-monitoring/src/main/java/org/apache/cocoon/monitoring/servletservice/ServletServiceMonitor.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: cocoon/cocoon3/trunk/cocoon-monitoring/src/main/java/org/apache/cocoon/monitoring/servletservice/ServletServiceMonitorInitializer.java
URL: http://svn.apache.org/viewvc/cocoon/cocoon3/trunk/cocoon-monitoring/src/main/java/org/apache/cocoon/monitoring/servletservice/ServletServiceMonitorInitializer.java?rev=794104&view=auto
==============================================================================
--- cocoon/cocoon3/trunk/cocoon-monitoring/src/main/java/org/apache/cocoon/monitoring/servletservice/ServletServiceMonitorInitializer.java (added)
+++ cocoon/cocoon3/trunk/cocoon-monitoring/src/main/java/org/apache/cocoon/monitoring/servletservice/ServletServiceMonitorInitializer.java Tue Jul 14 22:44:28 2009
@@ -0,0 +1,92 @@
+/*
+ * 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.cocoon.monitoring.servletservice;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+import javax.management.MalformedObjectNameException;
+import javax.management.ObjectName;
+import javax.servlet.Servlet;
+import javax.servlet.ServletConfig;
+import javax.servlet.ServletContext;
+
+import org.apache.cocoon.servletservice.ServletServiceContext;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.springframework.jmx.export.MBeanExporter;
+
+public class ServletServiceMonitorInitializer {
+
+ private final Log logger = LogFactory.getLog(this.getClass());
+
+ public ServletServiceMonitorInitializer(Map<String, Servlet> servlets, MBeanExporter exporter) {
+ List<String> servletNames = new ArrayList<String>();
+ for (Servlet servlet : servlets.values()) {
+ ServletConfig servletConfig = servlet.getServletConfig();
+
+ // get only ServletServices servlets
+ ServletContext servletContext = servletConfig.getServletContext();
+ if (!(servletContext instanceof ServletServiceContext)) {
+ break;
+ }
+
+ ServletServiceContext servletServiceContext = (ServletServiceContext) servletContext;
+ String servletName = servletConfig.getServletName();
+ ObjectName name = null;
+ String stringName = "org.apache.cocoon.monitoring:group=ServletServices,name=" + servletName + " ["
+ + this.getMountPath(servletServiceContext) + "]";
+ try {
+ name = new ObjectName(stringName);
+ } catch (MalformedObjectNameException e) {
+ String message = "The string passed as a parameter does not have the right format.";
+ this.logger.error(message, e);
+ throw new RuntimeException(message, e);
+ } catch (NullPointerException e) {
+ String message = "Should never happened. Value of name parameter always is different than null.";
+ this.logger.fatal(message, e);
+ throw new RuntimeException(message, e);
+ }
+
+ if (name == null) {
+ break;
+ }
+
+ ServletServiceMonitor serviceServletMonitor = new ServletServiceMonitor(servlet);
+ if (!servletNames.contains(stringName)) {
+ exporter.registerManagedResource(serviceServletMonitor, name);
+ servletNames.add(stringName);
+ }
+ }
+ }
+
+ private String getMountPath(ServletServiceContext servletServiceContext) {
+ String mountPath = servletServiceContext.getMountPath();
+ if (mountPath != null && !mountPath.startsWith("/")) {
+ return "/" + mountPath;
+ }
+
+ if (mountPath == null) {
+ return "not mounted";
+ }
+
+ return mountPath;
+ }
+}
Propchange: cocoon/cocoon3/trunk/cocoon-monitoring/src/main/java/org/apache/cocoon/monitoring/servletservice/ServletServiceMonitorInitializer.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: cocoon/cocoon3/trunk/cocoon-monitoring/src/main/java/org/apache/cocoon/monitoring/servletservice/ServletServiceMonitorInitializer.java
------------------------------------------------------------------------------
svn:keywords = Id
Propchange: cocoon/cocoon3/trunk/cocoon-monitoring/src/main/java/org/apache/cocoon/monitoring/servletservice/ServletServiceMonitorInitializer.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified: cocoon/cocoon3/trunk/cocoon-monitoring/src/main/resources/META-INF/cocoon/spring/cocoon-monitoring.xml
URL: http://svn.apache.org/viewvc/cocoon/cocoon3/trunk/cocoon-monitoring/src/main/resources/META-INF/cocoon/spring/cocoon-monitoring.xml?rev=794104&r1=794103&r2=794104&view=diff
==============================================================================
--- cocoon/cocoon3/trunk/cocoon-monitoring/src/main/resources/META-INF/cocoon/spring/cocoon-monitoring.xml (original)
+++ cocoon/cocoon3/trunk/cocoon-monitoring/src/main/resources/META-INF/cocoon/spring/cocoon-monitoring.xml Tue Jul 14 22:44:28 2009
@@ -19,7 +19,9 @@
-->
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
+ xmlns:configurator="http://cocoon.apache.org/schema/configurator"
+ xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
+ http://cocoon.apache.org/schema/configurator http://cocoon.apache.org/schema/configurator/cocoon-configurator-1.0.1.xsd">
<bean id="exporter" class="org.springframework.jmx.export.MBeanExporter">
<property name="assembler" ref="org.apache.cocoon.monitoring.assembler" />
@@ -27,9 +29,6 @@
<property name="autodetect" value="true" />
</bean>
- <bean id="org.apache.cocoon.monitoring.jmxAttributeSource"
- class="org.springframework.jmx.export.annotation.AnnotationJmxAttributeSource" />
-
<bean id="org.apache.cocoon.monitoring.assembler" class="org.springframework.jmx.export.assembler.MetadataMBeanInfoAssembler">
<property name="attributeSource" ref="org.apache.cocoon.monitoring.jmxAttributeSource" />
</bean>
@@ -38,6 +37,20 @@
<property name="attributeSource" ref="org.apache.cocoon.monitoring.jmxAttributeSource" />
</bean>
- <bean id="org.apache.cocoon.monitoring.Log4JReconfigurator"
- class="org.apache.cocoon.monitoring.Log4JReconfigurator" scope="singleton" />
+ <bean id="org.apache.cocoon.monitoring.jmxAttributeSource"
+ class="org.springframework.jmx.export.annotation.AnnotationJmxAttributeSource" />
+
+ <bean id="org.apache.cocoon.monitoring.log4j.Log4JReconfigurator"
+ class="org.apache.cocoon.monitoring.log4j.Log4JReconfigurator" scope="singleton">
+ <property name="settings" ref="org.apache.cocoon.configuration.Settings" />
+ </bean>
+
+ <bean id="org.apache.cocoon.monitoring.servletservice.ServletServiceMonitorInitializer"
+ class="org.apache.cocoon.monitoring.servletservice.ServletServiceMonitorInitializer" >
+ <constructor-arg index="0">
+ <configurator:bean-map type="javax.servlet.Servlet" />
+ </constructor-arg>
+ <constructor-arg ref="exporter" index="1"/>
+ </bean>
+
</beans>
Modified: cocoon/cocoon3/trunk/parent/pom.xml
URL: http://svn.apache.org/viewvc/cocoon/cocoon3/trunk/parent/pom.xml?rev=794104&r1=794103&r2=794104&view=diff
==============================================================================
--- cocoon/cocoon3/trunk/parent/pom.xml (original)
+++ cocoon/cocoon3/trunk/parent/pom.xml Tue Jul 14 22:44:28 2009
@@ -113,6 +113,7 @@
<dependency>
<groupId>org.apache.cocoon</groupId>
<artifactId>cocoon-servlet-service-impl</artifactId>
+ <!-- After upgrading to 1.2.1 fix the TODO in ServiceServletMonitor -->
<version>1.2.0</version>
</dependency>
<dependency>