You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@avalon.apache.org by do...@apache.org on 2002/04/11 04:43:51 UTC
cvs commit: jakarta-avalon-phoenix/src/java/org/apache/avalon/phoenix/components/manager MX4JSystemManager.java
donaldp 02/04/10 19:43:51
Modified: . ant.properties.sample build.xml
Added: src/java/org/apache/avalon/phoenix/components/manager
MX4JSystemManager.java
Log:
Start to reuse MX4J rather than RI for JMX
Revision Changes Path
1.8 +7 -1 jakarta-avalon-phoenix/ant.properties.sample
Index: ant.properties.sample
===================================================================
RCS file: /home/cvs/jakarta-avalon-phoenix/ant.properties.sample,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -r1.7 -r1.8
--- ant.properties.sample 21 Mar 2002 08:36:13 -0000 1.7
+++ ant.properties.sample 11 Apr 2002 02:43:51 -0000 1.8
@@ -6,7 +6,7 @@
# modules that Phoenix depends on. Copy this file to ".ant.properties"
# in the top-level source directory, and customize it as needed.
#
-# $Id: ant.properties.sample,v 1.7 2002/03/21 08:36:13 donaldp Exp $
+# $Id: ant.properties.sample,v 1.8 2002/04/11 02:43:51 donaldp Exp $
# -----------------------------------------------------------------------------
# ----- Compile Environment Flags -----
@@ -42,6 +42,12 @@
jmx.lib=${jmx.home}/lib
jmxri.jar=${jmx.lib}/jmxri.jar
jmxtools.jar=${jmx.lib}/jmxtools.jar
+
+# ----- MX4J Open JMX Implementation, version 1.0b3 or later -----
+mx4j.home=${base.path}/mx4j-1.0b3
+mx4j.lib=${mx4j.home}/lib
+mx4j.jar=${mx4j.lib}/mx4j.jar
+mx4j-tools.jar=${mx4j.lib}/mx4j-tools.jar
# ----- Checkstyle, version 2.1 or later -----
checkstyle.home=${base.path}/checkstyle-2.1
1.113 +7 -0 jakarta-avalon-phoenix/build.xml
Index: build.xml
===================================================================
RCS file: /home/cvs/jakarta-avalon-phoenix/build.xml,v
retrieving revision 1.112
retrieving revision 1.113
diff -u -r1.112 -r1.113
--- build.xml 9 Apr 2002 10:55:50 -0000 1.112
+++ build.xml 11 Apr 2002 02:43:51 -0000 1.113
@@ -70,6 +70,8 @@
<pathelement location="${jmxri.jar}"/>
<pathelement location="${jmxtools.jar}"/>
<pathelement location="${wrapper.jar}"/>
+ <pathelement path="${mx4j.jar}"/>
+ <pathelement path="${mx4j-tools.jar}"/>
<pathelement path="${checkstyle.jar}" />
<pathelement path="${java.class.path}" />
@@ -101,6 +103,9 @@
<available property="jmx.present" classname="javax.management.MBeanException">
<classpath refid="project.class.path"/>
</available>
+ <available property="mx4j.present" classname="mx4j.MBeanServerImpl">
+ <classpath refid="project.class.path"/>
+ </available>
<available property="wrapper.present" classname="com.silveregg.wrapper.WrapperManager">
<classpath refid="project.class.path"/>
</available>
@@ -142,6 +147,8 @@
<exclude name="**/*MBean.java" unless="jmx.present"/>
<exclude name="org/apache/avalon/phoenix/components/manager/rmiadaptor/*.java"
unless="jmx.present"/>
+ <exclude name="org/apache/avalon/phoenix/components/manager/MX4JSystemManager.java"
+ unless="mx4j.present"/>
<exclude name="org/apache/avalon/phoenix/components/manager/DefaultManager.java"
unless="jmx.present"/>
<exclude name="org/apache/avalon/phoenix/launcher/DaemonLauncher.java"
1.1 jakarta-avalon-phoenix/src/java/org/apache/avalon/phoenix/components/manager/MX4JSystemManager.java
Index: MX4JSystemManager.java
===================================================================
/*
* Copyright (C) The Apache Software Foundation. All rights reserved.
*
* This software is published under the terms of the Apache Software License
* version 1.1, a copy of which has been included with this distribution in
* the LICENSE.txt file.
*/
package org.apache.avalon.phoenix.components.manager;
import javax.management.Attribute;
import javax.management.MBeanServer;
import javax.management.MBeanServerFactory;
import javax.management.MalformedObjectNameException;
import javax.management.ObjectName;
import org.apache.avalon.excalibur.i18n.ResourceManager;
import org.apache.avalon.excalibur.i18n.Resources;
import org.apache.avalon.framework.component.ComponentException;
import org.apache.avalon.framework.component.ComponentManager;
import org.apache.avalon.framework.component.Composable;
import org.apache.avalon.framework.parameters.ParameterException;
import org.apache.avalon.framework.parameters.Parameterizable;
import org.apache.avalon.framework.parameters.Parameters;
import org.apache.avalon.phoenix.components.kernel.DefaultKernel;
import org.apache.avalon.phoenix.components.kernel.DefaultKernelMBean;
import org.apache.avalon.phoenix.interfaces.ConfigurationRepository;
import org.apache.avalon.phoenix.interfaces.Deployer;
import org.apache.avalon.phoenix.interfaces.DeployerMBean;
import org.apache.avalon.phoenix.interfaces.Embeddor;
import org.apache.avalon.phoenix.interfaces.EmbeddorMBean;
import org.apache.avalon.phoenix.interfaces.ExtensionManagerMBean;
import org.apache.avalon.phoenix.interfaces.Kernel;
import org.apache.avalon.phoenix.interfaces.KernelMBean;
import org.apache.avalon.phoenix.interfaces.LogManager;
import org.apache.avalon.phoenix.interfaces.ManagerException;
import org.apache.avalon.phoenix.interfaces.PackageRepository;
import org.apache.excalibur.baxter.JavaBeanMBean;
/**
* This component is responsible for managing phoenix instance.
* This includes managing embeddor, deployer and kernel.
*
* @author <a href="mail@leosimons.com">Leo Simons</a>
* @author <a href="mailto:peter@apache.org">Peter Donald</a>
*/
public class MX4JSystemManager
extends AbstractSystemManager
implements Parameterizable, Composable
{
private static final Resources REZ =
ResourceManager.getPackageResources( MX4JSystemManager.class );
//private Parameters m_parameters;
private MBeanServer m_mBeanServer;
private String m_domain = "Phoenix";
private Embeddor m_embeddor;
private Deployer m_deployer;
private LogManager m_logManager;
private Kernel m_kernel;
private ConfigurationRepository m_repository;
private PackageRepository m_extensionManager;
public void parameterize( final Parameters parameters )
throws ParameterException
{
// m_parameters = parameters;
}
/**
* Retrieve relevent services needed to deploy.
*
* @param componentManager the ComponentManager
* @exception ComponentException if an error occurs
*/
public void compose( final ComponentManager componentManager )
throws ComponentException
{
m_embeddor = (Embeddor)componentManager.lookup( Embeddor.ROLE );
m_kernel = (Kernel)componentManager.lookup( Kernel.ROLE );
m_deployer = (Deployer)componentManager.lookup( Deployer.ROLE );
m_repository = (ConfigurationRepository)componentManager.lookup( ConfigurationRepository.ROLE );
m_logManager = (LogManager)componentManager.lookup( LogManager.ROLE );
m_extensionManager = (PackageRepository)componentManager.lookup( PackageRepository.ROLE );
}
public void initialize()
throws Exception
{
m_mBeanServer = MBeanServerFactory.createMBeanServer( "Phoenix" );
final ObjectName adaptorName = new ObjectName( "Http:name=HttpAdaptor" );
m_mBeanServer.createMBean( "mx4j.adaptor.http.HttpAdaptor", adaptorName, null );
m_mBeanServer.setAttribute( adaptorName, new Attribute( "Port", new Integer( 8083 ) ) );
/**
// add user names
m_mBeanServer.invoke(adaptorName, "addAuthorization", new Object[] {"mx4j", "mx4j"}, new String[] {"java.lang.String", "java.lang.String"});
// use basic authentication
m_mBeanServer.setAttribute(adaptorName, new Attribute("AuthenticationMethod", "basic"));
*/
ObjectName processorName = new ObjectName( "Http:name=XSLTProcessor" );
m_mBeanServer.createMBean( "mx4j.adaptor.http.XSLTProcessor", processorName, null );
/*
if( path != null )
{
m_mBeanServer.setAttribute( processorName, new Attribute( "File", path ) );
}
*/
m_mBeanServer.setAttribute( processorName, new Attribute( "UseCache", new Boolean( false ) ) );
/*
if( pathInJar != null )
{
m_mBeanServer.setAttribute( processorName, new Attribute( "PathInJar", pathInJar ) );
}
*/
m_mBeanServer.setAttribute( adaptorName, new Attribute( "ProcessorName", processorName ) );
// starts the server
m_mBeanServer.invoke( adaptorName, "start", null, null );
//TODO: SystemManager itself aswell???
//FIXME: All this stuff should be done by embeddor and read out of a config file
register( "Kernel", m_kernel, new Class[]{KernelMBean.class} );
register( "ExtensionManager", m_extensionManager, new Class[]{ExtensionManagerMBean.class} );
register( "Embeddor", m_embeddor, new Class[]{EmbeddorMBean.class} );
register( "Deployer", m_deployer, new Class[]{DeployerMBean.class} );
register( "LogManager", m_logManager );
register( "ConfigurationRepository", m_repository );
}
public void start()
throws Exception
{
}
public void stop()
throws Exception
{
}
public void dispose()
{
m_mBeanServer = null;
}
/**
* Export the object to the particular management medium using
* the supplied object and interfaces.
* This needs to be implemented by subclasses.
*
* @param name the name of object
* @param object the object
* @param interfaces the interfaces
* @return the exported object
* @exception ManagerException if an error occurs
*/
protected Object export( final String name,
final Object object,
final Class[] interfaces )
throws ManagerException
{
try
{
Object mBean = null;
if( null != interfaces )
{
mBean = new JavaBeanMBean( object, interfaces );
}
else
{
mBean = createMBean( object );
}
final ObjectName objectName = createObjectName( name );
m_mBeanServer.registerMBean( mBean, objectName );
return mBean;
}
catch( final Exception e )
{
final String message = REZ.getString( "jmxmanager.error.export.fail", name );
getLogger().error( message, e );
throw new ManagerException( message, e );
}
}
private ObjectName createObjectName( final String name ) throws MalformedObjectNameException
{
return new ObjectName( m_domain + ":name=" + name );
}
/**
* Create a MBean for specified object.
* The following policy is used top create the MBean...
*
* @param object the object to create MBean for
* @return the MBean to be exported
* @exception ManagerException if an error occurs
*/
private Object createMBean( final Object object )
throws ManagerException
{
//HACK: ugly Testing hack!!
if( object instanceof DefaultKernel )
{
return new DefaultKernelMBean( (DefaultKernel)object );
}
else
{
return new JavaBeanMBean( object );
}
}
/**
* Stop the exported object from being managed.
*
* @param name the name of object
* @param exportedObject the object return by export
* @exception ManagerException if an error occurs
*/
protected void unexport( final String name,
final Object exportedObject )
throws ManagerException
{
try
{
m_mBeanServer.unregisterMBean( createObjectName( name ) );
}
catch( final Exception e )
{
final String message = REZ.getString( "jmxmanager.error.unexport.fail", name );
getLogger().error( message, e );
throw new ManagerException( message, e );
}
}
/**
* Verify that an interface conforms to the requirements of management medium.
*
* @param clazz the interface class
* @exception ManagerException if verification fails
*/
protected void verifyInterface( final Class clazz )
throws ManagerException
{
//TODO: check it extends all right things and that it
//has all the right return types etc. Blocks must have
//interfaces extending Service (or Manageable)
}
}
--
To unsubscribe, e-mail: <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>