User: starksm
Date: 01/11/12 11:31:07
Modified: src/main/org/jboss/configuration Tag: Branch_2_4
ConfigurationService.java
Log:
Add support for a mbean/config element that allows an mbean to import an
arbitrary XML configuration tree if it implements the importXml(Element)
method.
Revision Changes Path
No revision
No revision
1.30.2.3 +125 -102 jboss/src/main/org/jboss/configuration/ConfigurationService.java
Index: ConfigurationService.java
===================================================================
RCS file:
/cvsroot/jboss/jboss/src/main/org/jboss/configuration/ConfigurationService.java,v
retrieving revision 1.30.2.2
retrieving revision 1.30.2.3
diff -u -r1.30.2.2 -r1.30.2.3
--- ConfigurationService.java 2001/10/19 01:31:29 1.30.2.2
+++ ConfigurationService.java 2001/11/12 19:31:07 1.30.2.3
@@ -8,7 +8,8 @@
package org.jboss.configuration;
import java.io.*;
-import java.beans.*;
+import java.beans.PropertyEditor;
+import java.beans.PropertyEditorManager;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
@@ -19,11 +20,31 @@
import java.util.Hashtable;
import java.util.Iterator;
-import javax.management.*;
+import javax.management.Attribute;
+import javax.management.InstanceNotFoundException;
+import javax.management.JMException;
+import javax.management.JMRuntimeException;
+import javax.management.MalformedObjectNameException;
+import javax.management.MBeanAttributeInfo;
+import javax.management.MBeanInfo;
+import javax.management.MBeanOperationInfo;
+import javax.management.MBeanServer;
+import javax.management.ObjectInstance;
+import javax.management.ObjectName;
+import javax.management.RuntimeErrorException;
+import javax.management.RuntimeMBeanException;
+import javax.management.RuntimeOperationsException;
+import javax.management.MBeanException;
+import javax.management.ReflectionException;
-import org.w3c.dom.*;
-import org.xml.sax.*;
-import javax.xml.parsers.*;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.NodeList;
+import org.w3c.dom.Text;
+import org.xml.sax.InputSource;
+import org.xml.sax.SAXException;
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
import org.jboss.logging.Log;
import org.jboss.util.Service;
@@ -46,11 +67,11 @@
* @author Rickard �berg ([EMAIL PROTECTED])
* @author [EMAIL PROTECTED]
* @author Jason Dillon <a
href="mailto:[EMAIL PROTECTED]"><[EMAIL PROTECTED]></a>
- * @version $Revision: 1.30.2.2 $
+ * @version $Revision: 1.30.2.3 $
*/
public class ConfigurationService
-extends ServiceMBeanSupport
-implements ConfigurationServiceMBean
+ extends ServiceMBeanSupport
+ implements ConfigurationServiceMBean
{
/** The name of the file initial configuration is read from. */
public static final String CONFIGURATION_FILE = "jboss.jcml";
@@ -187,18 +208,19 @@
try
{
info = server.getMBeanInfo(objectName);
- } catch (InstanceNotFoundException e)
+ }
+ catch (InstanceNotFoundException e)
{
// The MBean is no longer available
// It's ok, skip to next one
continue;
}
-
+
// Set attributes
NodeList attrs = mbeanElement.getElementsByTagName("attribute");
for (int j = 0; j < attrs.getLength(); j++)
{
- Element attributeElement = (Element)attrs.item(j);
+ Element attributeElement = (Element) attrs.item(j);
String attributeName = attributeElement.getAttribute("name");
if (attributeElement.hasChildNodes())
{
@@ -239,7 +261,25 @@
}
}
}
-
+ /* Look for a config element and if it exists invoke the
importXml(Element)
+ operation to allow the MBean to support its own arbitrary
configuration.
+ */
+ NodeList configs = mbeanElement.getElementsByTagName("config");
+ if( configs.getLength() > 0 )
+ {
+ Element configElement = (Element) configs.item(0);
+ Object[] args = { configElement };
+ String[] signature = { "org.w3c.dom.Element" };
+ try
+ {
+ server.invoke(objectName, "importXml", args, signature);
+ }
+ catch(Exception e)
+ {
+ logException(e);
+ }
+ }
+
// Register the mbean with the JBoss ServiceControl mbean
registerService(objectName, info, mbeanElement);
}
@@ -434,7 +474,7 @@
* @throws MalformedObjectNameException
*/
private ObjectName parseObjectName(final Element element)
- throws ConfigurationException, MalformedObjectNameException
+ throws ConfigurationException, MalformedObjectNameException
{
String name = element.getAttribute("name");
if (name == null || name.trim().equals(""))
@@ -465,12 +505,10 @@
private static class ConstructorInfo
{
/** An empty parameters list. */
- public static final Object EMPTY_PARAMS[] =
- {};
+ public static final Object EMPTY_PARAMS[] = {};
/** An signature list. */
- public static final String EMPTY_SIGNATURE[] =
- {};
+ public static final String EMPTY_SIGNATURE[] = {};
/** The constructor signature. */
public String[] signature = EMPTY_SIGNATURE;
@@ -487,7 +525,7 @@
* @throws ConfigurationException Failed to create info object.
*/
public static ConstructorInfo create(Element element)
- throws ConfigurationException
+ throws ConfigurationException
{
ConstructorInfo info = new ConstructorInfo();
@@ -524,62 +562,62 @@
{
signature = Short.TYPE.getName();
realValue = new Short( value );
- } else
- if( signature.equals( "int" ) )
+ }
+ else if( signature.equals( "int" ) )
+ {
+ signature = Integer.TYPE.getName();
+ realValue = new Integer( value );
+ }
+ else if( signature.equals( "long" ) )
+ {
+ signature = Long.TYPE.getName();
+ realValue = new Long( value );
+ }
+ else if( signature.equals( "byte" ) )
+ {
+ signature = Byte.TYPE.getName();
+ realValue = new Byte( value );
+ }
+ else if( signature.equals( "char" ) )
+ {
+ signature = Character.TYPE.getName();
+ realValue = new Character( value.charAt( 0 ) );
+ }
+ else if( signature.equals( "float" ) )
+ {
+ signature = Float.TYPE.getName();
+ realValue = new Float( value );
+ }
+ else if( signature.equals( "double" ) )
+ {
+ signature = Double.TYPE.getName();
+ realValue = new Double( value );
+ }
+ else if( signature.equals( "boolean" ) )
+ {
+ signature = Boolean.TYPE.getName();
+ realValue = new Boolean( value );
+ }
+ else
+ {
+ try
{
- signature = Integer.TYPE.getName();
- realValue = new Integer( value );
- } else
- if( signature.equals( "long" ) )
- {
- signature = Long.TYPE.getName();
- realValue = new Long( value );
- } else
- if( signature.equals( "byte" ) )
- {
- signature = Byte.TYPE.getName();
- realValue = new Byte( value );
- } else
- if( signature.equals( "char" ) )
- {
- signature = Character.TYPE.getName();
- realValue = new Character( value.charAt( 0 ) );
- } else
- if( signature.equals( "float" ) )
- {
- signature = Float.TYPE.getName();
- realValue = new Float( value );
- } else
- if( signature.equals( "double" ) )
- {
- signature = Double.TYPE.getName();
- realValue = new Double( value );
- } else
- if( signature.equals( "boolean" ) )
- {
- signature = Boolean.TYPE.getName();
- realValue = new Boolean( value );
- }
- else
- {
- try
- {
- // Check if there is a constructor
with a single String as
- // only parameter
- Class signatureClass =
-
Thread.currentThread().getContextClassLoader().loadClass( signature );
- Constructor signatureConstructor =
- signatureClass.getConstructor( new
Class[]
- { String.class } );
- realValue =
signatureConstructor.newInstance(
- new Object[]
- { value }
- );
- }
- catch( Exception e )
- {
- }
- }
+ // Check if there is a constructor with a single String as
+ // only parameter
+ Class signatureClass =
+ Thread.currentThread().getContextClassLoader().loadClass(
signature );
+ Constructor signatureConstructor =
+ signatureClass.getConstructor( new Class[]
+ { String.class } );
+ realValue = signatureConstructor.newInstance(
+ new Object[]
+ { value }
+ );
+ }
+ catch( Exception e )
+ {
+ }
+ }
}
info.signature[j] = signature;
info.params[j] = realValue;
@@ -640,10 +678,10 @@
// Create the MBean instance
ObjectInstance instance =
server.createMBean(code,
- objectName,
- loader,
- constructor.params,
- constructor.signature);
+ objectName,
+ loader,
+ constructor.params,
+ constructor.signature);
info = server.getMBeanInfo(instance.getObjectName());
} catch (Throwable ex)
{
@@ -759,9 +797,8 @@
* @throws IllegalAccessException
*/
private void registerService(ObjectName objectName,
- MBeanInfo info,
- Element mbeanElement)
- throws ClassNotFoundException, InstantiationException, IllegalAccessException
+ MBeanInfo info, Element mbeanElement)
+ throws ClassNotFoundException, InstantiationException, IllegalAccessException
{
// Check for a serviceFactory attribute
String serviceFactory = mbeanElement.getAttribute("serviceFactory");
@@ -769,10 +806,8 @@
if (service != null)
{
- Object[] args =
- { service };
- String[] signature =
- { "org.jboss.util.Service" };
+ Object[] args = { service };
+ String[] signature = { "org.jboss.util.Service" };
try
{
server.invoke(serviceControl, "register", args, signature);
@@ -796,9 +831,8 @@
* @throws IllegalAccessException
*/
private Service getServiceInstance(ObjectName objectName,
- MBeanInfo info,
- String serviceFactory)
- throws ClassNotFoundException, InstantiationException, IllegalAccessException
+ MBeanInfo info, String serviceFactory)
+ throws ClassNotFoundException, InstantiationException, IllegalAccessException
{
Service service = null;
ClassLoader loader = Thread.currentThread().getContextClassLoader();
@@ -857,8 +891,7 @@
*/
private class ServiceProxy implements InvocationHandler
{
- private boolean[] hasOp =
- { false, false, false, false };
+ private boolean[] hasOp = { false, false, false, false };
private ObjectName objectName;
/**
@@ -870,7 +903,7 @@
* @param opInfo
*/
public ServiceProxy(ObjectName objectName,
- MBeanOperationInfo[] opInfo)
+ MBeanOperationInfo[] opInfo)
{
this.objectName = objectName;
int opCount = 0;
@@ -898,8 +931,7 @@
// Log a warning if the mbean does not implement
// any Service methods
if (opCount == 0)
- log.warning(objectName +
- " does not implement any Service methods");
+ log.warning(objectName + " does not implement any Service methods");
}
/**
@@ -924,9 +956,7 @@
{
try
{
- String[] sig =
- {}
- ;
+ String[] sig = {};
server.invoke(objectName, name, args, sig);
} catch (JMRuntimeException e)
{
@@ -942,10 +972,3 @@
}
}
}
-
-/* Log
-6/13/2001 Andreas Schaefer Added type "short" for constructor argument and
- any class having a constructor taking a "String"
- as only parameter
- */
-
_______________________________________________
Jboss-development mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/jboss-development