You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@avalon.apache.org by mc...@apache.org on 2003/06/29 11:16:21 UTC

cvs commit: avalon-sandbox/merlin-test/merlin-jmx-demo/src/main/my/avalon/jmx/tools SystemInfo.java SystemInfoMBean.java SystemInfoMBeanDescription.java

mcconnell    2003/06/29 02:16:21

  Added:       merlin-test .cvsignore
               merlin-test/merlin-jmx-demo .cvsignore maven.xml project.xml
               merlin-test/merlin-jmx-demo/conf block.xml mbeans.mlet
               merlin-test/merlin-jmx-demo/src/main/my/avalon/jmx
                        HTTPAdaptorWrapper.java JMXServerProxy.java
                        JRMPAdaptorWrapper.java MBeanable.java
                        MBeanableHandler.java
               merlin-test/merlin-jmx-demo/src/main/my/avalon/jmx/samples
                        HelloSample.java HelloSample2.java
                        HelloSample2MBean.java
                        HelloSample2MBeanDescription.java HelloSample3.java
                        HelloSample3MBean.java
                        HelloSample3MBeanDescription.java HelloSample4.java
                        HelloSample4MBean.java
                        HelloSample4MBeanDescription.java
                        HelloSampleMBean.java
                        HelloSampleMBeanDescription.java
               merlin-test/merlin-jmx-demo/src/main/my/avalon/jmx/tools
                        SystemInfo.java SystemInfoMBean.java
                        SystemInfoMBeanDescription.java
  Log:
  Commit sample managable components.
  
  Revision  Changes    Path
  1.1                  avalon-sandbox/merlin-test/.cvsignore
  
  Index: .cvsignore
  ===================================================================
  project.xml
  maven.log
  velocity.log
  build.properties
  target
  xdocs
  forced-error
  publisher
  singleton
  *.zip
  *.gz
  
  
  
  
  1.1                  avalon-sandbox/merlin-test/merlin-jmx-demo/.cvsignore
  
  Index: .cvsignore
  ===================================================================
  maven.log
  velocity.log
  build.properties
  target
  xdocs
  
  
  
  1.1                  avalon-sandbox/merlin-test/merlin-jmx-demo/maven.xml
  
  Index: maven.xml
  ===================================================================
  <project default="java:jar" xmlns:maven="jelly:maven" xmlns:j="jelly:core" xmlns:util="jelly:util">
  
    <preGoal name="java:compile">
      <attainGoal name="merlin:meta"/>
    </preGoal>
  
  </project>
  
  
  
  1.1                  avalon-sandbox/merlin-test/merlin-jmx-demo/project.xml
  
  Index: project.xml
  ===================================================================
  <?xml version="1.0" encoding="UTF-8"?>
  
  <project>
  
    <groupId>merlin</groupId>
    <id>merlin-jmx-demo</id>
    <name>Merlin JMX RMI Test Case</name>
    <package>my.avalon.jmx</package>
  
    <currentVersion>1.0</currentVersion>
    <inceptionYear>2003</inceptionYear>
    <shortDescription>Test for the Merlin RMI JMX Connection.</shortDescription>
  
    <dependencies>
      <dependency>
        <groupId>mx4j</groupId>
        <artifactId>mx4j-jmx</artifactId>
        <version>1.1.1</version>
      </dependency>
      <dependency>
        <groupId>mx4j</groupId>
        <artifactId>mx4j-tools</artifactId>
        <version>1.1.1</version>
      </dependency>
      <dependency>
        <groupId>avalon-framework</groupId>
        <artifactId>avalon-framework-api</artifactId>
        <version>4.1.5-dev</version>
      </dependency>
      <dependency>
        <groupId>avalon-framework</groupId>
        <artifactId>avalon-framework-impl</artifactId>
        <version>4.1.5-dev</version>
      </dependency>
      <dependency>
        <id>excalibur-lifecycle</id>
        <version>1.0</version>
      </dependency>
    </dependencies>
    
    <build>
  
      <sourceDirectory>${basedir}/src/main</sourceDirectory>
      <unitTestSourceDirectory></unitTestSourceDirectory>
      <unitTest></unitTest>
      <testResources></testResources>
      <integrationUnitTestPatterns></integrationUnitTestPatterns>
  
      <resources>
        <resource>
          <directory>${basedir}/src/main</directory> 
          <includes>
            <include>**/*.properties</include>
          </includes>
        </resource>
        <resource>
          <directory>${maven.build.src}</directory> 
          <includes>
            <include>**/*.x*</include>
          </includes>
        </resource>
        <resource>
          <directory>${maven.conf.dir}</directory>
          <targetPath>BLOCK-INF</targetPath>
          <includes>
            <include>block.xml</include>
          </includes>
        </resource>
        <resource>
          <directory>${maven.conf.dir}</directory>
          <includes>
            <include>jndi.properties</include>
            <include>mbeans.mlet</include>
          </includes>
        </resource>
      </resources>
  
      <jars></jars>
  
    </build>
  
  </project>
  
  
  
  1.1                  avalon-sandbox/merlin-test/merlin-jmx-demo/conf/block.xml
  
  Index: block.xml
  ===================================================================
  <?xml version="1.0" encoding="iso-8859-1"?>
  
  <block name="jmx">
  
    <implementation>
  
      <categories priority="INFO"/>
  
      <engine>
        <classpath>
          <repository>
            <resource id="mx4j:mx4j-jmx" version="1.1.1"/>
            <resource id="mx4j:mx4j-tools" version="1.1.1"/>
          </repository>
        </classpath>
      </engine>
  
      <!-- the declaration of jmx-server is optional -->
      <component name="jmx-server" class="my.avalon.jmx.JMXServerProxy" activation="true"/>
  
      <!-- an "jmx-http" could be used to access jmx-server throught HTTP -->
      <component name="jmx-http" class="my.avalon.jmx.HTTPAdaptorWrapper" activation="true">
        <configuration>
          <xslt-processor enable="true"/>
          <port>8082</port>
          <host>localhost</host>
        </configuration>
      </component>
  
      <component name="jmx-jrmp" class="my.avalon.jmx.JRMPAdaptorWrapper" activation="true">
        <configuration>
          <port>1099</port>
        </configuration>
      </component>
  
      <!-- samples component (see api for difference) -->
      <component name="system-info" class="my.avalon.jmx.tools.SystemInfo" activation="true"/>
  
      <!-- samples component (see api for difference) -->
      <component name="jmx-hello" class="my.avalon.jmx.samples.HelloSample" activation="true"/>
      <component name="jmx-hello2" class="my.avalon.jmx.samples.HelloSample2" activation="true"/>
      <component name="jmx-hello3" class="my.avalon.jmx.samples.HelloSample3" activation="true"/>
      <component name="jmx-hello3Bis" class="my.avalon.jmx.samples.HelloSample3" activation="true"/>
      <container name="jmx-hello4Compo" class="my.avalon.jmx.samples.HelloSample4" activation="true">
        <component name="jmx-hello3Sub" class="my.avalon.jmx.samples.HelloSample3" activation="true"/>
      </container>
    </implementation>
  </block>
  
  
  
  1.1                  avalon-sandbox/merlin-test/merlin-jmx-demo/conf/mbeans.mlet
  
  Index: mbeans.mlet
  ===================================================================
  <!--
    Generated file - Do not edit!
  -->
  
  
  
  
  1.1                  avalon-sandbox/merlin-test/merlin-jmx-demo/src/main/my/avalon/jmx/HTTPAdaptorWrapper.java
  
  Index: HTTPAdaptorWrapper.java
  ===================================================================
  package my.avalon.jmx;
  
  import mx4j.adaptor.http.HttpAdaptor;
  import mx4j.adaptor.http.XSLTProcessor;
  
  import org.apache.avalon.framework.activity.Startable;
  import org.apache.avalon.framework.configuration.Configurable;
  import org.apache.avalon.framework.configuration.Configuration;
  import org.apache.avalon.framework.configuration.ConfigurationException;
  import org.apache.avalon.framework.logger.AbstractLogEnabled;
  import org.apache.avalon.framework.service.ServiceException;
  import org.apache.avalon.framework.service.ServiceManager;
  import org.apache.avalon.framework.service.Serviceable;
  
  import javax.management.MBeanServer;
  import javax.management.ObjectName;
  
  
  /**
   * Wrapper of the mx4j HttpAdaptor to use it in the Avalon Framework.
   *
   * @avalon.meta.version 1.0
   * @avalon.meta.name jmx-http
   * @avalon.meta.lifestyle singleton
   */
  public class HTTPAdaptorWrapper extends AbstractLogEnabled implements Serviceable, Configurable, Startable {
      private HttpAdaptor wrapped_;
      private MBeanServer jmxServer_;
      private ObjectName  jmxName_;
  
      public HTTPAdaptorWrapper() {
          wrapped_ = new HttpAdaptor();
      }
  
      /**
       * Servicing of the component by the container during
       * which service dependencies declared under the component
       * can be resolved using the supplied service manager.
       *
       * @param manager the service manager
       * @avalon.meta.dependency key="jmx-server" type="javax.management.MBeanServer"
       */
      public void service(ServiceManager manager) throws ServiceException {
          jmxServer_ = (MBeanServer) manager.lookup("jmx-server");
      }
  
      /**
       * Configuration of the component by the container.  The
       * implementation get a child element named 'source' and
       * assigns the value of the element to a local variable.
       *
       * @param config the component configuration
       * @exception ConfigurationException if a configuration error occurs
       */
      public void configure(Configuration config) throws ConfigurationException {
          try {
              wrapped_.setHost(config.getChild("host").getValue(null));
              wrapped_.setPort(config.getChild("port").getValueAsInteger(8082));
              jmxName_ = new ObjectName(config.getAttribute("jmxName", "JMXServer:name=adaptor,protocol=HTTP"));
  
              if (config.getChild("xslt-processor").getAttributeAsBoolean("enable", false)) {
                  XSLTProcessor xsltProcessor = new XSLTProcessor();
                  wrapped_.setProcessor(xsltProcessor);
              }
          } catch (Exception exc) {
              throw new ConfigurationException("", exc);
          }
      }
  
      public void start() throws Exception {
          jmxServer_.registerMBean(wrapped_, jmxName_);
          wrapped_.start();
      }
  
      public void stop() throws Exception {
          wrapped_.stop();
          jmxServer_.unregisterMBean(jmxName_);
      }
  }
  
  
  
  1.1                  avalon-sandbox/merlin-test/merlin-jmx-demo/src/main/my/avalon/jmx/JMXServerProxy.java
  
  Index: JMXServerProxy.java
  ===================================================================
  package my.avalon.jmx;
  
  import org.apache.avalon.framework.activity.Initializable;
  import org.apache.avalon.framework.logger.AbstractLogEnabled;
  
  import java.io.ObjectInputStream;
  
  import java.util.Set;
  
  import javax.management.*;
  
  
  /**
   * JMXServerProxy is a proxy to a MBeanServer (adpater MBeanServer to Avalon).
   *
   * @avalon.meta.version 1.0
   * @avalon.meta.name jmx-server
   * @avalon.meta.service type="javax.management.MBeanServer"
   * @avalon.meta.lifestyle singleton
   */
  public class JMXServerProxy extends AbstractLogEnabled implements Initializable, MBeanServer {
      private MBeanServer server_;
  
      /**
      * Initialization of the component by the container.
      * @exception Exception if an initialization error occurs
      */
      public void initialize() throws Exception {
          getLogger().info("initialization stage");
          server_ = MBeanServerFactory.createMBeanServer();
      }
  
      //-- MBeanServer impl (can't use Dynamic Proxy if I wan't to use it as a standard component)
      public void addNotificationListener(ObjectName observed, NotificationListener listener, NotificationFilter filter, Object handback)
                                   throws InstanceNotFoundException {
          server_.addNotificationListener(observed, listener, filter, handback);
      }
  
      public void addNotificationListener(ObjectName observed, ObjectName listener, NotificationFilter filter, Object handback)
                                   throws InstanceNotFoundException {
          server_.addNotificationListener(observed, listener, filter, handback);
      }
  
      public void removeNotificationListener(ObjectName observed, NotificationListener listener)
                                      throws InstanceNotFoundException, ListenerNotFoundException {
          server_.removeNotificationListener(observed, listener);
      }
  
      public void removeNotificationListener(ObjectName observed, ObjectName listener)
                                      throws InstanceNotFoundException, ListenerNotFoundException {
          server_.removeNotificationListener(observed, listener);
      }
  
      public Object instantiate(String className) throws ReflectionException, MBeanException {
          return server_.instantiate(className);
      }
  
      public Object instantiate(String className, ObjectName loaderName)
                         throws ReflectionException, MBeanException, InstanceNotFoundException {
          return server_.instantiate(className, loaderName);
      }
  
      public Object instantiate(String className, ObjectName loaderName, Object[] args, String[] parameters)
                         throws ReflectionException, MBeanException, InstanceNotFoundException {
          return server_.instantiate(className, loaderName, args, parameters);
      }
  
      public Object instantiate(String className, Object[] args, String[] parameters)
                         throws ReflectionException, MBeanException {
          return server_.instantiate(className, args, parameters);
      }
  
      public ObjectInstance createMBean(String className, ObjectName objectName)
                                 throws ReflectionException, InstanceAlreadyExistsException, MBeanRegistrationException, MBeanException,
                                        NotCompliantMBeanException {
          return server_.createMBean(className, objectName);
      }
  
      public ObjectInstance createMBean(String className, ObjectName objectName, ObjectName loaderName)
                                 throws ReflectionException, InstanceAlreadyExistsException, MBeanRegistrationException, MBeanException,
                                        NotCompliantMBeanException, InstanceNotFoundException {
          return server_.createMBean(className, objectName, loaderName);
      }
  
      public ObjectInstance createMBean(java.lang.String className, ObjectName objectName, Object[] args, String[] parameters)
                                 throws ReflectionException, InstanceAlreadyExistsException, MBeanRegistrationException, MBeanException,
                                        NotCompliantMBeanException {
          return server_.createMBean(className, objectName, args, parameters);
      }
  
      public ObjectInstance createMBean(String className, ObjectName objectName, ObjectName loaderName, Object[] args, String[] parameters)
                                 throws ReflectionException, InstanceAlreadyExistsException, MBeanRegistrationException, MBeanException,
                                        NotCompliantMBeanException, InstanceNotFoundException {
          return server_.createMBean(className, objectName, loaderName, args, parameters);
      }
  
      public ObjectInstance registerMBean(Object mbean, ObjectName objectName)
                                   throws InstanceAlreadyExistsException, MBeanRegistrationException, NotCompliantMBeanException {
          return server_.registerMBean(mbean, objectName);
      }
  
      public void unregisterMBean(ObjectName objectName)
                           throws InstanceNotFoundException, MBeanRegistrationException {
          server_.unregisterMBean(objectName);
      }
  
      public ObjectInputStream deserialize(String className, ObjectName loaderName, byte[] bytes)
                                    throws InstanceNotFoundException, OperationsException, ReflectionException {
          return server_.deserialize(className, loaderName, bytes);
      }
  
      public ObjectInputStream deserialize(String className, byte[] bytes)
                                    throws OperationsException, ReflectionException {
          return server_.deserialize(className, bytes);
      }
  
      public ObjectInputStream deserialize(ObjectName objectName, byte[] bytes)
                                    throws InstanceNotFoundException, OperationsException {
          return server_.deserialize(objectName, bytes);
      }
  
      public Object getAttribute(ObjectName objectName, String attribute)
                          throws MBeanException, AttributeNotFoundException, InstanceNotFoundException, ReflectionException {
          return server_.getAttribute(objectName, attribute);
      }
  
      public void setAttribute(ObjectName objectName, Attribute attribute)
                        throws InstanceNotFoundException, AttributeNotFoundException, InvalidAttributeValueException, MBeanException, ReflectionException {
          server_.setAttribute(objectName, attribute);
      }
  
      public AttributeList getAttributes(ObjectName objectName, String[] attributes)
                                  throws InstanceNotFoundException, ReflectionException {
          return server_.getAttributes(objectName, attributes);
      }
  
      public AttributeList setAttributes(ObjectName objectName, AttributeList attributes)
                                  throws InstanceNotFoundException, ReflectionException {
          return server_.setAttributes(objectName, attributes);
      }
  
      public Object invoke(ObjectName objectName, String methodName, Object[] args, String[] parameters)
                    throws InstanceNotFoundException, MBeanException, ReflectionException {
          return server_.invoke(objectName, methodName, args, parameters);
      }
  
      public String getDefaultDomain() {
          return server_.getDefaultDomain();
      }
  
      public Integer getMBeanCount() {
          return server_.getMBeanCount();
      }
  
      public boolean isRegistered(ObjectName objectName) {
          return server_.isRegistered(objectName);
      }
  
      public MBeanInfo getMBeanInfo(ObjectName objectName)
                             throws InstanceNotFoundException, IntrospectionException, ReflectionException {
          return server_.getMBeanInfo(objectName);
      }
  
      public ObjectInstance getObjectInstance(ObjectName objectName)
                                       throws InstanceNotFoundException {
          return server_.getObjectInstance(objectName);
      }
  
      public boolean isInstanceOf(ObjectName objectName, String className)
                           throws InstanceNotFoundException {
          return server_.isInstanceOf(objectName, className);
      }
  
      public Set queryMBeans(ObjectName patternName, QueryExp filter) {
          return server_.queryMBeans(patternName, filter);
      }
  
      public Set queryNames(ObjectName patternName, QueryExp filter) {
          return server_.queryNames(patternName, filter);
      }
  }
  
  
  
  1.1                  avalon-sandbox/merlin-test/merlin-jmx-demo/src/main/my/avalon/jmx/JRMPAdaptorWrapper.java
  
  Index: JRMPAdaptorWrapper.java
  ===================================================================
  package my.avalon.jmx;
  
  import mx4j.adaptor.rmi.jrmp.JRMPAdaptor;
  
  import mx4j.tools.naming.NamingService;
  
  import org.apache.avalon.framework.activity.Startable;
  import org.apache.avalon.framework.configuration.Configurable;
  import org.apache.avalon.framework.configuration.Configuration;
  import org.apache.avalon.framework.configuration.ConfigurationException;
  import org.apache.avalon.framework.logger.AbstractLogEnabled;
  import org.apache.avalon.framework.service.ServiceException;
  import org.apache.avalon.framework.service.ServiceManager;
  import org.apache.avalon.framework.service.Serviceable;
  
  import javax.management.MBeanServer;
  import javax.management.ObjectName;
  
  import javax.naming.Context;
  
  
  /**
   * Wrapper of the mx4j RMIAdaptor to use it in the Avalon Framework.
   *
   * @avalon.meta.version 1.0
   * @avalon.meta.name jmx-rmi
   * @avalon.meta.lifestyle singleton
   */
  public class JRMPAdaptorWrapper extends AbstractLogEnabled implements Serviceable, Configurable, Startable {
      private MBeanServer   jmxServer_;
      private JRMPAdaptor   wrapped_;
      private ObjectName    jmxName_;
      private NamingService naming_;
      private ObjectName    jmxNameNaming_;
      private int           port_;
  
      /**
       * Servicing of the component by the container during
       * which service dependencies declared under the component
       * can be resolved using the supplied service manager.
       *
       * @param manager the service manager
       * @avalon.meta.dependency key="jmx-server" type="javax.management.MBeanServer"
       */
      public void service(ServiceManager manager) throws ServiceException {
          jmxServer_ = (MBeanServer) manager.lookup("jmx-server");
      }
  
      /**
       * Configuration of the component by the container.  The
       * implementation get a child element named 'source' and
       * assigns the value of the element to a local variable.
       *
       * @param config the component configuration
       * @exception ConfigurationException if a configuration error occurs
       */
      public void configure(Configuration config) throws ConfigurationException {
          port_ = config.getChild("port").getValueAsInteger(1099);
      }
  
      public void start() throws Exception {
          // Create and start the naming service
          jmxNameNaming_     = new ObjectName("JMXServer:name=naming,type=rmiregistry");
          naming_            = new NamingService(port_);
          jmxServer_.registerMBean(naming_, jmxNameNaming_);
          naming_.start();
  
          // Create the JRMP adaptor
          ObjectName jmxName_ = new ObjectName("JMXServer:name=adaptor,protocol=JRMP");
          wrapped_ = new JRMPAdaptor();
          wrapped_.setJNDIName("jrmp");
          wrapped_.setPort(port_);
  
          // Optionally, you can specify the JNDI properties,
          // instead of having in the classpath a jndi.properties file
          wrapped_.putJNDIProperty(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.rmi.registry.RegistryContextFactory");
          wrapped_.putJNDIProperty(Context.PROVIDER_URL, "rmi://localhost:" + port_);
  
          jmxServer_.registerMBean(wrapped_, jmxName_);
          wrapped_.start();
      }
  
      public void stop() throws Exception {
          wrapped_.stop();
          jmxServer_.unregisterMBean(jmxName_);
          naming_.stop();
          jmxServer_.unregisterMBean(jmxNameNaming_);
      }
  }
  
  
  
  1.1                  avalon-sandbox/merlin-test/merlin-jmx-demo/src/main/my/avalon/jmx/MBeanable.java
  
  Index: MBeanable.java
  ===================================================================
  /*
   * The Apache Software License, Version 1.1
   *
   * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
   * reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   *    notice, this list of conditions and the following disclaimer.
   *
   * 2. Redistributions in binary form must reproduce the above copyright
   *    notice, this list of conditions and the following disclaimer in
   *    the documentation and/or other materials provided with the
   *    distribution.
   *
   * 3. The end-user documentation included with the redistribution, if
   *    any, must include the following acknowlegement:
   *       "This product includes software developed by the
   *        Apache Software Foundation (http://www.apache.org/)."
   *    Alternately, this acknowlegement may appear in the software itself,
   *    if and wherever such third-party acknowlegements normally appear.
   *
   * 4. The names "The Jakarta Project", "Ant", and "Apache Software
   *    Foundation" must not be used to endorse or promote products derived
   *    from this software without prior written permission. For written
   *    permission, please contact apache@apache.org.
   *
   * 5. Products derived from this software may not be called "Apache"
   *    nor may "Apache" appear in their names without prior written
   *    permission of the Apache Group.
   *
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Software Foundation.  For more
   * information on the Apache Software Foundation, please see
   *
   * http://www.apache.org/
   */
  package my.avalon.jmx;
  
  
  /**
   * Interface to implements, if component need to control the name used
   * when component is (un)registered into "jmx-server" by MBeanableHandler.
   */
  public interface MBeanable {
      /**
       * name used to (un)register the component, must be <strong>constant</strong> through the 2 calls.
       * @return the name of the component into "jmx-server".
       */
      public String getName();
  }
  
  
  
  1.1                  avalon-sandbox/merlin-test/merlin-jmx-demo/src/main/my/avalon/jmx/MBeanableHandler.java
  
  Index: MBeanableHandler.java
  ===================================================================
  /*
   * The Apache Software License, Version 1.1
   *
   * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
   * reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   *    notice, this list of conditions and the following disclaimer.
   *
   * 2. Redistributions in binary form must reproduce the above copyright
   *    notice, this list of conditions and the following disclaimer in
   *    the documentation and/or other materials provided with the
   *    distribution.
   *
   * 3. The end-user documentation included with the redistribution, if
   *    any, must include the following acknowlegement:
   *       "This product includes software developed by the
   *        Apache Software Foundation (http://www.apache.org/)."
   *    Alternately, this acknowlegement may appear in the software itself,
   *    if and wherever such third-party acknowlegements normally appear.
   *
   * 4. The names "The Jakarta Project", "Ant", and "Apache Software
   *    Foundation" must not be used to endorse or promote products derived
   *    from this software without prior written permission. For written
   *    permission, please contact apache@apache.org.
   *
   * 5. Products derived from this software may not be called "Apache"
   *    nor may "Apache" appear in their names without prior written
   *    permission of the Apache Group.
   *
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Software Foundation.  For more
   * information on the Apache Software Foundation, please see
   *
   * http://www.apache.org/
   */
  package my.avalon.jmx;
  
  import org.apache.avalon.framework.context.Context;
  import org.apache.avalon.framework.logger.AbstractLogEnabled;
  import org.apache.avalon.framework.service.ServiceException;
  import org.apache.avalon.framework.service.ServiceManager;
  import org.apache.avalon.framework.service.Serviceable;
  import org.apache.avalon.lifecycle.Accessor;
  
  import javax.management.MBeanServer;
  import javax.management.ObjectName;
  
  
  /**
   * (Un)Register object to the "jmx-server" service. The domaine is "Application"
   * and the name to used to identified object is:
   * <ul>
   *   <li>the return of the method MBeanable.getName() if object is instance of MBeanable.</li>
   *   <li>the value of "urn:avalon:name" store in context.</li>
   * </ul>
   *
   * To be auto-registered a MBean component need to include the stage "my.avalon.jmx.MBeanable".
   * The implementation of the interface my.avalon.jmx.MBeanable is optional (only if you want to choose your name).
   *
   * @avalon.meta.version 1.0
   * @avalon.meta.name jmx-handler
   * @avalon.meta.extension type="my.avalon.jmx.MBeanable"
   */
  public class MBeanableHandler extends AbstractLogEnabled implements Accessor, Serviceable {
      private MBeanServer jmxServer_;
  
      /**
      * Servicing of the component by the container during
      * which service dependencies declared under the component
      * can be resolved using the supplied service manager.
      *
      * @param manager the service manager
      * @avalon.meta.dependency key="jmx-server" type="javax.management.MBeanServer" optional="true"
      */
      public void service(ServiceManager manager) throws ServiceException {
          if (manager.hasService("jmx-server")) {
              jmxServer_ = (MBeanServer) manager.lookup("jmx-server");
          }
      }
  
      /**
       * Register object to "jmx-server" service.
       */
      public void access(Object object, Context context)
                  throws Exception {
          try {
              if (jmxServer_ != null) {
                  ObjectName name = getObjectName(object, context);
                  jmxServer_.registerMBean(object, name);
                  getLogger().debug("register component : " + name);
              }
          } catch (Exception exc) {
              getLogger().warn("register", exc);
          }
      }
  
      /**
       * Unregister object form "jmx-server" service.
       */
      public void release(Object object, Context context) {
          try {
              if (jmxServer_ != null) {
                  ObjectName name = getObjectName(object, context);
                  jmxServer_.unregisterMBean(name);
                  getLogger().debug("unregister component : " + name);
              }
          } catch (Exception exc) {
              getLogger().warn("unregister", exc);
          }
      }
  
      /**
       * build the ObjectName from source Object and it's context.
       * @param obj the object to register with returned ObjectName.
       * @param context context to use to find "urn:avalon:name" to use if obj isn't instanceof MBeanable
       * @return the builded ObjectName.
       */
      private ObjectName getObjectName(Object obj, Context context)
                                throws Exception {
          String back = null;
  
          if (obj instanceof MBeanable) {
              back = ((MBeanable) obj).getName();
          }
  
          if (back == null) {
              back = (String) context.get("urn:avalon:partition");
          }
  
          return new ObjectName("Application:name=" + back);
      }
  }
  
  
  
  1.1                  avalon-sandbox/merlin-test/merlin-jmx-demo/src/main/my/avalon/jmx/samples/HelloSample.java
  
  Index: HelloSample.java
  ===================================================================
  /*
   * The Apache Software License, Version 1.1
   *
   * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
   * reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   *    notice, this list of conditions and the following disclaimer.
   *
   * 2. Redistributions in binary form must reproduce the above copyright
   *    notice, this list of conditions and the following disclaimer in
   *    the documentation and/or other materials provided with the
   *    distribution.
   *
   * 3. The end-user documentation included with the redistribution, if
   *    any, must include the following acknowlegement:
   *       "This product includes software developed by the
   *        Apache Software Foundation (http://www.apache.org/)."
   *    Alternately, this acknowlegement may appear in the software itself,
   *    if and wherever such third-party acknowlegements normally appear.
   *
   * 4. The names "The Jakarta Project", "Ant", and "Apache Software
   *    Foundation" must not be used to endorse or promote products derived
   *    from this software without prior written permission. For written
   *    permission, please contact apache@apache.org.
   *
   * 5. Products derived from this software may not be called "Apache"
   *    nor may "Apache" appear in their names without prior written
   *    permission of the Apache Group.
   *
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Software Foundation.  For more
   * information on the Apache Software Foundation, please see
   *
   * http://www.apache.org/
   */
  package my.avalon.jmx.samples;
  
  import org.apache.avalon.framework.activity.Disposable;
  import org.apache.avalon.framework.activity.Executable;
  import org.apache.avalon.framework.activity.Initializable;
  import org.apache.avalon.framework.configuration.Configurable;
  import org.apache.avalon.framework.configuration.Configuration;
  import org.apache.avalon.framework.configuration.ConfigurationException;
  import org.apache.avalon.framework.logger.AbstractLogEnabled;
  import org.apache.avalon.framework.service.ServiceException;
  import org.apache.avalon.framework.service.ServiceManager;
  import org.apache.avalon.framework.service.Serviceable;
  
  import javax.management.MBeanServer;
  import javax.management.ObjectName;
  
  
  /**
   * HelloSample sample of avalon component usable throught jmx.
   * This implementation don't use stage but need direct access to "jmx-server" service, and
   * control when (un)register.
   * <ul>
   *   <li>this implementation is more portable (I think it could be work on Fortress,
   *        because don't use any container special features).</li>
   *   <li>this implementation require to include all the (un)registering code (and search of the jmx-server)</li>
   * </ul>
   *
   * @jmx.mbean
   * @avalon.meta.version 1.0
   * @avalon.meta.name jmx-hello
   */
  public class HelloSample extends AbstractLogEnabled implements HelloSampleMBean, Serviceable, Configurable, Initializable, Executable, Disposable {
      private MBeanServer jmxServer_;
      private ObjectName  jmxName_;
  
      /**
       * Servicing of the component by the container during
       * which service dependencies declared under the component
       * can be resolved using the supplied service manager.
       *
       * @param manager the service manager
       * @avalon.meta.dependency key="jmx-server" type="javax.management.MBeanServer"
       */
      public void service(ServiceManager manager) throws ServiceException {
          jmxServer_ = (MBeanServer) manager.lookup("jmx-server");
      }
  
      /**
       * Configuration of the component by the container.  The
       * implementation get a child element named 'source' and
       * assigns the value of the element to a local variable.
       *
       * @param config the component configuration
       * @exception ConfigurationException if a configuration error occurs
       */
      public void configure(Configuration config) throws ConfigurationException {
          try {
              jmxName_ = new ObjectName(config.getAttribute("jmxName", "Application:name=HelloSample"));
          } catch (Exception exc) {
              throw new ConfigurationException("", exc);
          }
      }
  
      /**
       * Initialization of the component by the container.
       * @exception Exception if an initialization error occurs
       */
      public void initialize() throws Exception {
          getLogger().info("initialize");
          jmxServer_.registerMBean(this, jmxName_);
      }
  
      /**
       * log a info message "execute".
       * @jmx.managed-operation
       */
      public void execute() throws Exception {
          getLogger().info(this.getClass() + " : execute");
      }
  
      public void dispose() {
          getLogger().info("dispose");
  
          try {
              jmxServer_.unregisterMBean(jmxName_);
          } catch (Exception exc) {
              getLogger().warn("", exc);
          }
      }
  }
  
  
  
  1.1                  avalon-sandbox/merlin-test/merlin-jmx-demo/src/main/my/avalon/jmx/samples/HelloSample2.java
  
  Index: HelloSample2.java
  ===================================================================
  /*
   * The Apache Software License, Version 1.1
   *
   * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
   * reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   *    notice, this list of conditions and the following disclaimer.
   *
   * 2. Redistributions in binary form must reproduce the above copyright
   *    notice, this list of conditions and the following disclaimer in
   *    the documentation and/or other materials provided with the
   *    distribution.
   *
   * 3. The end-user documentation included with the redistribution, if
   *    any, must include the following acknowlegement:
   *       "This product includes software developed by the
   *        Apache Software Foundation (http://www.apache.org/)."
   *    Alternately, this acknowlegement may appear in the software itself,
   *    if and wherever such third-party acknowlegements normally appear.
   *
   * 4. The names "The Jakarta Project", "Ant", and "Apache Software
   *    Foundation" must not be used to endorse or promote products derived
   *    from this software without prior written permission. For written
   *    permission, please contact apache@apache.org.
   *
   * 5. Products derived from this software may not be called "Apache"
   *    nor may "Apache" appear in their names without prior written
   *    permission of the Apache Group.
   *
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Software Foundation.  For more
   * information on the Apache Software Foundation, please see
   *
   * http://www.apache.org/
   */
  package my.avalon.jmx.samples;
  
  import my.avalon.jmx.MBeanable;
  
  import org.apache.avalon.framework.activity.Executable;
  import org.apache.avalon.framework.logger.AbstractLogEnabled;
  
  
  /**
   * HelloSample sample of avalon component usable throught jmx.
   * This component include stage "my.avalon.jmx.MBeanable" and implements MBeanable interface.
   *
   * @jmx.mbean
   * @avalon.meta.version 1.0
   * @avalon.meta.name jmx-hello2
   * @avalon.meta.stage type="my.avalon.jmx.MBeanable"
   */
  public class HelloSample2 extends AbstractLogEnabled implements HelloSample2MBean, MBeanable, Executable {
      public String getName() {
          return "HelloSample2";
      }
  
      /**
       * log a info message "execute".
       * @jmx.managed-operation
       */
      public void execute() throws Exception {
          getLogger().info(this.getClass() + " : execute");
      }
  }
  
  
  
  1.1                  avalon-sandbox/merlin-test/merlin-jmx-demo/src/main/my/avalon/jmx/samples/HelloSample2MBean.java
  
  Index: HelloSample2MBean.java
  ===================================================================
  /*
   * Generated file - Do not edit!
   */
  package my.avalon.jmx.samples;
  
  /**
   * MBean interface.
   * @xdoclet-genereted @ 20030629 0907
   */
  public interface HelloSample2MBean {
  
     /**
      * log a info message "execute".
      */
    void execute() throws java.lang.Exception;
  
  }
  
  
  
  1.1                  avalon-sandbox/merlin-test/merlin-jmx-demo/src/main/my/avalon/jmx/samples/HelloSample2MBeanDescription.java
  
  Index: HelloSample2MBeanDescription.java
  ===================================================================
  /* * Generated file - Do not edit! */package my.avalon.jmx.samples;import mx4j.MBeanDescriptionAdapter;import java.lang.reflect.Method;import java.lang.reflect.Constructor;/** * MBean description. * @xdoclet-genereted @ 20030629 0907
   */public class HelloSample2MBeanDescription extends                         MBeanDescriptionAdapter    {      public String getConstructorDescription(Constructor ctor) {        String name = ctor.getName();             return super.getConstructorDescription(ctor);    }    public String getConstructorParameterName(Constructor ctor, int index) {              return super.getConstructorParameterName(ctor, index);    }    public String getConstructorParameterDescription(Constructor ctor, int index) {              return super.getConstructorParameterDescription(ctor, index);    }    public String getAttributeDescription(String attribute) {                                   return super.getAttributeDescription(attribute);    }    public String getOperationDescription(Method operation) {        String name = operation.getName();                                        return super.getOperationDescription(operation);    }    public String getOperationParameterName(Method method, int index) {        String name = method.getName();                                        return super.getOperationParameterName(method, index);    }    public String getOperationParameterDescription(Method method, int index) {        String name = method.getName();                                        return super.getOperationParameterDescription(method, index);    }}
  
  
  1.1                  avalon-sandbox/merlin-test/merlin-jmx-demo/src/main/my/avalon/jmx/samples/HelloSample3.java
  
  Index: HelloSample3.java
  ===================================================================
  /*
   * The Apache Software License, Version 1.1
   *
   * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
   * reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   *    notice, this list of conditions and the following disclaimer.
   *
   * 2. Redistributions in binary form must reproduce the above copyright
   *    notice, this list of conditions and the following disclaimer in
   *    the documentation and/or other materials provided with the
   *    distribution.
   *
   * 3. The end-user documentation included with the redistribution, if
   *    any, must include the following acknowlegement:
   *       "This product includes software developed by the
   *        Apache Software Foundation (http://www.apache.org/)."
   *    Alternately, this acknowlegement may appear in the software itself,
   *    if and wherever such third-party acknowlegements normally appear.
   *
   * 4. The names "The Jakarta Project", "Ant", and "Apache Software
   *    Foundation" must not be used to endorse or promote products derived
   *    from this software without prior written permission. For written
   *    permission, please contact apache@apache.org.
   *
   * 5. Products derived from this software may not be called "Apache"
   *    nor may "Apache" appear in their names without prior written
   *    permission of the Apache Group.
   *
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Software Foundation.  For more
   * information on the Apache Software Foundation, please see
   *
   * http://www.apache.org/
   */
  package my.avalon.jmx.samples;
  
  import my.avalon.jmx.MBeanable;
  
  import org.apache.avalon.framework.activity.Executable;
  import org.apache.avalon.framework.logger.AbstractLogEnabled;
  
  
  /**
   * HelloSample sample of avalon component usable throught jmx.
   * This component include stage "my.avalon.jmx.MBeanable" but don't implements MBeanable interface.
   * "a meta.verifier.VerifyException" is throw, but Component is accessible.
   *
   * @jmx.mbean
   * @avalon.meta.version 1.0
   * @avalon.meta.name jmx-hello3
   * @avalon.meta.stage type="my.avalon.jmx.MBeanable"
   */
  public class HelloSample3 extends AbstractLogEnabled implements HelloSample3MBean, Executable {
      /**
       * log a info message "execute".
       * @jmx.managed-operation
       */
      public void execute() throws Exception {
          getLogger().info(this.getClass() + " : execute");
      }
  }
  
  
  
  1.1                  avalon-sandbox/merlin-test/merlin-jmx-demo/src/main/my/avalon/jmx/samples/HelloSample3MBean.java
  
  Index: HelloSample3MBean.java
  ===================================================================
  /*
   * Generated file - Do not edit!
   */
  package my.avalon.jmx.samples;
  
  /**
   * MBean interface.
   * @xdoclet-genereted @ 20030629 0907
   */
  public interface HelloSample3MBean {
  
     /**
      * log a info message "execute".
      */
    void execute() throws java.lang.Exception;
  
  }
  
  
  
  1.1                  avalon-sandbox/merlin-test/merlin-jmx-demo/src/main/my/avalon/jmx/samples/HelloSample3MBeanDescription.java
  
  Index: HelloSample3MBeanDescription.java
  ===================================================================
  /* * Generated file - Do not edit! */package my.avalon.jmx.samples;import mx4j.MBeanDescriptionAdapter;import java.lang.reflect.Method;import java.lang.reflect.Constructor;/** * MBean description. * @xdoclet-genereted @ 20030629 0907
   */public class HelloSample3MBeanDescription extends                         MBeanDescriptionAdapter    {      public String getConstructorDescription(Constructor ctor) {        String name = ctor.getName();             return super.getConstructorDescription(ctor);    }    public String getConstructorParameterName(Constructor ctor, int index) {              return super.getConstructorParameterName(ctor, index);    }    public String getConstructorParameterDescription(Constructor ctor, int index) {              return super.getConstructorParameterDescription(ctor, index);    }    public String getAttributeDescription(String attribute) {                        return super.getAttributeDescription(attribute);    }    public String getOperationDescription(Method operation) {        String name = operation.getName();                           return super.getOperationDescription(operation);    }    public String getOperationParameterName(Method method, int index) {        String name = method.getName();                           return super.getOperationParameterName(method, index);    }    public String getOperationParameterDescription(Method method, int index) {        String name = method.getName();                           return super.getOperationParameterDescription(method, index);    }}
  
  
  1.1                  avalon-sandbox/merlin-test/merlin-jmx-demo/src/main/my/avalon/jmx/samples/HelloSample4.java
  
  Index: HelloSample4.java
  ===================================================================
  /*
   * The Apache Software License, Version 1.1
   *
   * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
   * reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   *    notice, this list of conditions and the following disclaimer.
   *
   * 2. Redistributions in binary form must reproduce the above copyright
   *    notice, this list of conditions and the following disclaimer in
   *    the documentation and/or other materials provided with the
   *    distribution.
   *
   * 3. The end-user documentation included with the redistribution, if
   *    any, must include the following acknowlegement:
   *       "This product includes software developed by the
   *        Apache Software Foundation (http://www.apache.org/)."
   *    Alternately, this acknowlegement may appear in the software itself,
   *    if and wherever such third-party acknowlegements normally appear.
   *
   * 4. The names "The Jakarta Project", "Ant", and "Apache Software
   *    Foundation" must not be used to endorse or promote products derived
   *    from this software without prior written permission. For written
   *    permission, please contact apache@apache.org.
   *
   * 5. Products derived from this software may not be called "Apache"
   *    nor may "Apache" appear in their names without prior written
   *    permission of the Apache Group.
   *
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Software Foundation.  For more
   * information on the Apache Software Foundation, please see
   *
   * http://www.apache.org/
   */
  package my.avalon.jmx.samples;
  
  import my.avalon.jmx.MBeanable;
  
  import org.apache.avalon.framework.activity.Executable;
  import org.apache.avalon.framework.logger.AbstractLogEnabled;
  
  
  /**
   * HelloSample sample of avalon component usable throught jmx.
   * This component include stage "my.avalon.jmx.MBeanable" and implements MBeanable interface,
   * but return null as getName(), so MBeanableHandler used "urn:avalon:name".
   *
   * @jmx.mbean
   * @avalon.meta.version 1.0
   * @avalon.meta.name jmx-hello2
   * @avalon.meta.stage type="my.avalon.jmx.MBeanable"
   */
  public class HelloSample4 extends AbstractLogEnabled 
     implements HelloSample4MBean, MBeanable, Executable 
  {
      public String getName() 
      {
          return null;
      }
  
      /**
       * log a info message "execute".
       * @jmx.managed-operation
       */
      public void execute() throws Exception {
          getLogger().info(this.getClass() + " : execute");
      }
  }
  
  
  
  1.1                  avalon-sandbox/merlin-test/merlin-jmx-demo/src/main/my/avalon/jmx/samples/HelloSample4MBean.java
  
  Index: HelloSample4MBean.java
  ===================================================================
  /*
   * Generated file - Do not edit!
   */
  package my.avalon.jmx.samples;
  
  /**
   * MBean interface.
   * @xdoclet-genereted @ 20030629 0907
   */
  public interface HelloSample4MBean {
  
     /**
      * log a info message "execute".
      */
    void execute() throws java.lang.Exception;
  
  }
  
  
  
  1.1                  avalon-sandbox/merlin-test/merlin-jmx-demo/src/main/my/avalon/jmx/samples/HelloSample4MBeanDescription.java
  
  Index: HelloSample4MBeanDescription.java
  ===================================================================
  /* * Generated file - Do not edit! */package my.avalon.jmx.samples;import mx4j.MBeanDescriptionAdapter;import java.lang.reflect.Method;import java.lang.reflect.Constructor;/** * MBean description. * @xdoclet-genereted @ 20030629 0907
   */public class HelloSample4MBeanDescription extends                         MBeanDescriptionAdapter    {      public String getConstructorDescription(Constructor ctor) {        String name = ctor.getName();             return super.getConstructorDescription(ctor);    }    public String getConstructorParameterName(Constructor ctor, int index) {              return super.getConstructorParameterName(ctor, index);    }    public String getConstructorParameterDescription(Constructor ctor, int index) {              return super.getConstructorParameterDescription(ctor, index);    }    public String getAttributeDescription(String attribute) {                                   return super.getAttributeDescription(attribute);    }    public String getOperationDescription(Method operation) {        String name = operation.getName();                                        return super.getOperationDescription(operation);    }    public String getOperationParameterName(Method method, int index) {        String name = method.getName();                                        return super.getOperationParameterName(method, index);    }    public String getOperationParameterDescription(Method method, int index) {        String name = method.getName();                                        return super.getOperationParameterDescription(method, index);    }}
  
  
  1.1                  avalon-sandbox/merlin-test/merlin-jmx-demo/src/main/my/avalon/jmx/samples/HelloSampleMBean.java
  
  Index: HelloSampleMBean.java
  ===================================================================
  /*
   * Generated file - Do not edit!
   */
  package my.avalon.jmx.samples;
  
  /**
   * MBean interface.
   * @xdoclet-genereted @ 20030629 0907
   */
  public interface HelloSampleMBean {
  
     /**
      * log a info message "execute".
      */
    void execute() throws java.lang.Exception;
  
  }
  
  
  
  1.1                  avalon-sandbox/merlin-test/merlin-jmx-demo/src/main/my/avalon/jmx/samples/HelloSampleMBeanDescription.java
  
  Index: HelloSampleMBeanDescription.java
  ===================================================================
  /* * Generated file - Do not edit! */package my.avalon.jmx.samples;import mx4j.MBeanDescriptionAdapter;import java.lang.reflect.Method;import java.lang.reflect.Constructor;/** * MBean description. * @xdoclet-genereted @ 20030629 0907
   */public class HelloSampleMBeanDescription extends                         MBeanDescriptionAdapter    {      public String getConstructorDescription(Constructor ctor) {        String name = ctor.getName();             return super.getConstructorDescription(ctor);    }    public String getConstructorParameterName(Constructor ctor, int index) {              return super.getConstructorParameterName(ctor, index);    }    public String getConstructorParameterDescription(Constructor ctor, int index) {              return super.getConstructorParameterDescription(ctor, index);    }    public String getAttributeDescription(String attribute) {                                                                    return super.getAttributeDescription(attribute);    }    public String getOperationDescription(Method operation) {        String name = operation.getName();                                                                               return super.getOperationDescription(operation);    }    public String getOperationParameterName(Method method, int index) {        String name = method.getName();                                                                               return super.getOperationParameterName(method, index);    }    public String getOperationParameterDescription(Method method, int index) {        String name = method.getName();                                                                               return super.getOperationParameterDescription(method, index);    }}
  
  
  1.1                  avalon-sandbox/merlin-test/merlin-jmx-demo/src/main/my/avalon/jmx/tools/SystemInfo.java
  
  Index: SystemInfo.java
  ===================================================================
  /*
   * The Apache Software License, Version 1.1
   *
   * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
   * reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   *    notice, this list of conditions and the following disclaimer.
   *
   * 2. Redistributions in binary form must reproduce the above copyright
   *    notice, this list of conditions and the following disclaimer in
   *    the documentation and/or other materials provided with the
   *    distribution.
   *
   * 3. The end-user documentation included with the redistribution, if
   *    any, must include the following acknowlegement:
   *       "This product includes software developed by the
   *        Apache Software Foundation (http://www.apache.org/)."
   *    Alternately, this acknowlegement may appear in the software itself,
   *    if and wherever such third-party acknowlegements normally appear.
   *
   * 4. The names "The Jakarta Project", "Ant", and "Apache Software
   *    Foundation" must not be used to endorse or promote products derived
   *    from this software without prior written permission. For written
   *    permission, please contact apache@apache.org.
   *
   * 5. Products derived from this software may not be called "Apache"
   *    nor may "Apache" appear in their names without prior written
   *    permission of the Apache Group.
   *
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Software Foundation.  For more
   * information on the Apache Software Foundation, please see
   *
   * http://www.apache.org/
   */
  package my.avalon.jmx.tools;
  
  import my.avalon.jmx.MBeanable;
  
  import org.apache.avalon.framework.activity.Initializable;
  import org.apache.avalon.framework.logger.AbstractLogEnabled;
  
  import java.util.Properties;
  
  
  /**
   * This Component provide System and Runtime information as MBean.
   * Useness for monitoring.
   *
   * @jmx.mbean
   * @avalon.meta.version 1.0
   * @avalon.meta.name system-info
   * @avalon.meta.stage type="my.avalon.jmx.MBeanable"
   */
  public class SystemInfo extends AbstractLogEnabled implements Initializable, SystemInfoMBean, MBeanable {
      private ThreadGroup rootThreadGroup_;
  
      public void initialize() throws Exception {
          ThreadGroup t = Thread.currentThread().getThreadGroup();
  
          while (t != null) {
              rootThreadGroup_     = t;
              t                    = t.getParent();
          }
      }
  
      public String getName() {
          return "SystemInfo";
      }
  
      /**
       * @jmx.managed-attribute description="Returns the amount of free memory in the system. see Runtime.freeMemory()"
       */
      public long getFreeMemory() throws Exception {
          return Runtime.getRuntime().freeMemory();
      }
  
      /**
       * @jmx.managed-attribute description="Returns the total amount of memory in the Java Virtual Machine. see Runtime.totalMemory()"
       */
      public long getTotalMemory() throws Exception {
          return Runtime.getRuntime().totalMemory();
      }
  
      /**
       * @jmx.managed-attribute description="Returns the ratio (%) free/total amount of memory in the Java Virtual Machine."
       */
      public int getRatioMemory() throws Exception {
          return (int) ((Runtime.getRuntime().freeMemory() * 100) / Runtime.getRuntime().totalMemory());
      }
  
      /**
       * @jmx.managed-operation description="Runs the garbage collector. see Runtime.gc()"
       */
      public void gc(int status) throws Exception {
          Runtime.getRuntime().gc();
      }
  
      /**
       * @jmx.managed-operation description="Terminates the currently running Java virtual machine by initiating its shutdown sequence. see Runtime.exit(int)"
       */
      public void exit(int status) throws Exception {
          Runtime.getRuntime().exit(status);
      }
  
      /**
       * @jmx.managed-operation description="Enables/Disables tracing of instructions. see Runtime.traceInstructions(boolean)"
       */
      public void traceInstructions(boolean on) throws Exception {
          Runtime.getRuntime().traceInstructions(on);
      }
  
      /**
       * @jmx.managed-operation description="Enables/Disables tracing of method calls. see Runtime.traceMethodCalls(boolean)"
       */
      public void traceMethodCalls(boolean on) throws Exception {
          Runtime.getRuntime().traceMethodCalls(on);
      }
  
      /**
       * @jmx.managed-operation description="Determines the current system properties. see System.getProperties()"
       */
      public Properties showProperties() throws Exception {
          return System.getProperties();
      }
  
      /**
       * @jmx.managed-attribute description="Gets the system property indicated by the specified key. see System.getProperty(String)"
       */
      public String getProperty(String key) throws Exception {
          return getProperty(key);
      }
  
      /**
       * @jmx.managed-attribute description="Returns an estimate of the number of active threads."
       */
      public int getNumberOfActiveThreads() throws Exception {
          return rootThreadGroup_.activeCount();
      }
  }
  
  
  
  1.1                  avalon-sandbox/merlin-test/merlin-jmx-demo/src/main/my/avalon/jmx/tools/SystemInfoMBean.java
  
  Index: SystemInfoMBean.java
  ===================================================================
  /*
   * Generated file - Do not edit!
   */
  package my.avalon.jmx.tools;
  
  /**
   * MBean interface.
   * @xdoclet-genereted @ 20030629 0907
   */
  public interface SystemInfoMBean {
  
    long getFreeMemory() throws java.lang.Exception;
  
    long getTotalMemory() throws java.lang.Exception;
  
    int getRatioMemory() throws java.lang.Exception;
  
    void gc(int status) throws java.lang.Exception;
  
    void exit(int status) throws java.lang.Exception;
  
    void traceInstructions(boolean on) throws java.lang.Exception;
  
    void traceMethodCalls(boolean on) throws java.lang.Exception;
  
    java.util.Properties showProperties() throws java.lang.Exception;
  
    java.lang.String getProperty(java.lang.String key) throws java.lang.Exception;
  
    int getNumberOfActiveThreads() throws java.lang.Exception;
  
  }
  
  
  
  1.1                  avalon-sandbox/merlin-test/merlin-jmx-demo/src/main/my/avalon/jmx/tools/SystemInfoMBeanDescription.java
  
  Index: SystemInfoMBeanDescription.java
  ===================================================================
  /* * Generated file - Do not edit! */package my.avalon.jmx.tools;import mx4j.MBeanDescriptionAdapter;import java.lang.reflect.Method;import java.lang.reflect.Constructor;/** * MBean description. * @xdoclet-genereted @ 20030629 0907
   */public class SystemInfoMBeanDescription extends                         MBeanDescriptionAdapter    {      public String getConstructorDescription(Constructor ctor) {        String name = ctor.getName();             return super.getConstructorDescription(ctor);    }    public String getConstructorParameterName(Constructor ctor, int index) {              return super.getConstructorParameterName(ctor, index);    }    public String getConstructorParameterDescription(Constructor ctor, int index) {              return super.getConstructorParameterDescription(ctor, index);    }    public String getAttributeDescription(String attribute) {                                                if (attribute.equals("FreeMemory")) {            return "Returns the amount of free memory in the system. see Runtime.freeMemory()";        }                                       if (attribute.equals("TotalMemory")) {            return "Returns the total amount of memory in the Java Virtual Machine. see Runtime.totalMemory()";        }                                       if (attribute.equals("RatioMemory")) {            return "Returns the ratio (%) free/total amount of memory in the Java Virtual Machine.";        }                                                                                                                      if (attribute.equals("NumberOfActiveThreads")) {            return "Returns an estimate of the number of active threads.";        }                          return super.getAttributeDescription(attribute);    }    public String getOperationDescription(Method operation) {        String name = operation.getName();                                                                                      if (name.equals("gc")) {            return "Runs the garbage collector. see Runtime.gc()";        }                            if (name.equals("exit")) {            return "Terminates the currently running Java virtual machine by initiating its shutdown sequence. see Runtime.exit(int)";        }                            if (name.equals("traceInstructions")) {            return "Enables/Disables tracing of instructions. see Runtime.traceInstructions(boolean)";        }                            if (name.equals("traceMethodCalls")) {            return "Enables/Disables tracing of method calls. see Runtime.traceMethodCalls(boolean)";        }                            if (name.equals("showProperties")) {            return "Determines the current system properties. see System.getProperties()";        }                                               return super.getOperationDescription(operation);    }    public String getOperationParameterName(Method method, int index) {        String name = method.getName();                                                                                                                                                                          return super.getOperationParameterName(method, index);    }    public String getOperationParameterDescription(Method method, int index) {        String name = method.getName();                                                                                                                                                                          return super.getOperationParameterDescription(method, index);    }}
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: cvs-unsubscribe@avalon.apache.org
For additional commands, e-mail: cvs-help@avalon.apache.org