costin 2003/02/26 14:17:32 Modified: modeler/src/java/org/apache/commons/modeler Registry.java modeler/src/java/org/apache/commons/modeler/modules MbeansDescriptorsDOMSource.java MbeansDescriptorsDigesterSource.java MbeansDescriptorsIntrospectionSource.java MbeansDescriptorsSerSource.java MbeansSource.java ModelerSource.java Log: Few more changes ( to the new APIs ). Eliminate the side-effects - the descriptor reader will return a list. Improve the MbeansSource - it can read jboss or mlet style xml files and create the mbeans. It no longer needs the type to be specified. Also added a method to allow support for lifecycle methods on the mbeans. Most JMX applications include a lifecycle mechanism - and the method names and behavior is pretty common. If an mbean is used in such environment - the init/start/stop/destroy will be called automatically. The intention is to allow for such mbeans to work if used outside such a container, and to support this behavior in tomcat standalone. Revision Changes Path 1.20 +47 -4 jakarta-commons/modeler/src/java/org/apache/commons/modeler/Registry.java Index: Registry.java =================================================================== RCS file: /home/cvs/jakarta-commons/modeler/src/java/org/apache/commons/modeler/Registry.java,v retrieving revision 1.19 retrieving revision 1.20 diff -u -r1.19 -r1.20 --- Registry.java 20 Feb 2003 05:54:22 -0000 1.19 +++ Registry.java 26 Feb 2003 22:17:32 -0000 1.20 @@ -313,22 +313,65 @@ public void loadDescriptors( String sourceType, Object source, String param) throws Exception { + List mbeans=load( sourceType, source, param ); + if( mbeans == null) return; + Iterator itr=mbeans.iterator(); + while( itr.hasNext() ) { + Object mb=itr.next(); + if( mb instanceof ManagedBean) { + addManagedBean((ManagedBean)mb); + } + } + } + + public List load( String sourceType, Object source, String param) + throws Exception + { if( log.isTraceEnabled()) - log.trace("loadDescriptors " + source ); + log.trace("load " + source ); + ModelerSource ds=getModelerSource(sourceType); + List mbeans=null; if( source instanceof URL ) { URL url=(URL)source; InputStream stream=url.openStream(); - ds.loadDescriptors(this, url.toString(), param, stream); + mbeans=ds.loadDescriptors(this, url.toString(), param, stream); } if( source instanceof InputStream ) { - ds.loadDescriptors(this, null, param, source); + mbeans=ds.loadDescriptors(this, null, param, source); } if( source instanceof Class ) { - ds.loadDescriptors(this, ((Class)source).getName(), param, source); + mbeans=ds.loadDescriptors(this, ((Class)source).getName(), param, source); + } + return mbeans; + } + + public void invoke( List mbeans, String operation, boolean failFirst ) + throws Throwable + { + if( mbeans==null ) return; + Iterator itr=mbeans.iterator(); + while(itr.hasNext()) { + Object current=itr.next(); + ObjectName oN=null; + try { + if( current instanceof ObjectName) { + oN=(ObjectName)current; + } + if( current instanceof String ) { + oN=new ObjectName( (String)current ); + } + if( oN==null ) continue; + getMBeanServer().invoke(oN, operation, + new Object[] {}, new String[] {}); + + } catch( Throwable t ) { + if( failFirst ) throw t; + log.info("Error initializing " + current); + } } } 1.5 +7 -2 jakarta-commons/modeler/src/java/org/apache/commons/modeler/modules/MbeansDescriptorsDOMSource.java Index: MbeansDescriptorsDOMSource.java =================================================================== RCS file: /home/cvs/jakarta-commons/modeler/src/java/org/apache/commons/modeler/modules/MbeansDescriptorsDOMSource.java,v retrieving revision 1.4 retrieving revision 1.5 diff -u -r1.4 -r1.5 --- MbeansDescriptorsDOMSource.java 23 Jan 2003 19:42:08 -0000 1.4 +++ MbeansDescriptorsDOMSource.java 26 Feb 2003 22:17:32 -0000 1.5 @@ -68,6 +68,8 @@ import org.apache.commons.logging.LogFactory; import java.io.InputStream; +import java.util.ArrayList; +import java.util.List; public class MbeansDescriptorsDOMSource extends ModelerSource @@ -78,6 +80,7 @@ String location; String type; Object source; + List mbeans=new ArrayList(); public void setRegistry(Registry reg) { this.registry=reg; @@ -99,7 +102,7 @@ this.source=source; } - public void loadDescriptors( Registry registry, String location, + public List loadDescriptors( Registry registry, String location, String type, Object source) throws Exception { @@ -108,6 +111,7 @@ setType(type); setSource(source); execute(); + return mbeans; } public void execute() throws Exception { @@ -320,7 +324,8 @@ } // Add the completed managed bean info to the registry - registry.addManagedBean(managed); + //registry.addManagedBean(managed); + mbeans.add( managed ); } 1.5 +8 -4 jakarta-commons/modeler/src/java/org/apache/commons/modeler/modules/MbeansDescriptorsDigesterSource.java Index: MbeansDescriptorsDigesterSource.java =================================================================== RCS file: /home/cvs/jakarta-commons/modeler/src/java/org/apache/commons/modeler/modules/MbeansDescriptorsDigesterSource.java,v retrieving revision 1.4 retrieving revision 1.5 diff -u -r1.4 -r1.5 --- MbeansDescriptorsDigesterSource.java 23 Jan 2003 19:42:08 -0000 1.4 +++ MbeansDescriptorsDigesterSource.java 26 Feb 2003 22:17:32 -0000 1.5 @@ -67,6 +67,8 @@ import java.io.InputStream; import java.net.URL; +import java.util.List; +import java.util.ArrayList; public class MbeansDescriptorsDigesterSource extends ModelerSource { @@ -77,6 +79,7 @@ String location; String type; Object source; + List mbeans=new ArrayList(); public void setRegistry(Registry reg) { this.registry=reg; @@ -98,7 +101,7 @@ this.source=source; } - public void loadDescriptors( Registry registry, String location, + public List loadDescriptors( Registry registry, String location, String type, Object source) throws Exception { @@ -107,6 +110,7 @@ setType(type); setSource(source); execute(); + return mbeans; } public void execute() throws Exception { @@ -126,7 +130,7 @@ url.toString()); // Push our registry object onto the stack - digester.push(registry); + digester.push(mbeans); // Configure the parsing rules digester.addObjectCreate @@ -136,8 +140,8 @@ ("mbeans-descriptors/mbean"); digester.addSetNext ("mbeans-descriptors/mbean", - "addManagedBean", - "org.apache.commons.modeler.ManagedBean"); + "add", + "java.lang.Object"); digester.addObjectCreate ("mbeans-descriptors/mbean/attribute", 1.7 +6 -2 jakarta-commons/modeler/src/java/org/apache/commons/modeler/modules/MbeansDescriptorsIntrospectionSource.java Index: MbeansDescriptorsIntrospectionSource.java =================================================================== RCS file: /home/cvs/jakarta-commons/modeler/src/java/org/apache/commons/modeler/modules/MbeansDescriptorsIntrospectionSource.java,v retrieving revision 1.6 retrieving revision 1.7 diff -u -r1.6 -r1.7 --- MbeansDescriptorsIntrospectionSource.java 20 Feb 2003 05:48:34 -0000 1.6 +++ MbeansDescriptorsIntrospectionSource.java 26 Feb 2003 22:17:32 -0000 1.7 @@ -12,6 +12,8 @@ import java.lang.reflect.Modifier; import java.util.Hashtable; import java.util.Enumeration; +import java.util.ArrayList; +import java.util.List; import javax.management.ObjectName; @@ -23,6 +25,7 @@ String location; String type; Object source; + List mbeans=new ArrayList(); public void setRegistry(Registry reg) { this.registry=reg; @@ -44,7 +47,7 @@ this.source=source; } - public void loadDescriptors( Registry registry, String location, + public List loadDescriptors( Registry registry, String location, String type, Object source) throws Exception { @@ -53,6 +56,7 @@ setType(type); setSource(source); execute(); + return mbeans; } public void execute() throws Exception { @@ -62,7 +66,7 @@ if( managed==null ) return; managed.setName( type ); - registry.addManagedBean(managed); + mbeans.add(managed); } catch( Exception ex ) { log.error( "Error reading descriptors ", ex); 1.4 +6 -2 jakarta-commons/modeler/src/java/org/apache/commons/modeler/modules/MbeansDescriptorsSerSource.java Index: MbeansDescriptorsSerSource.java =================================================================== RCS file: /home/cvs/jakarta-commons/modeler/src/java/org/apache/commons/modeler/modules/MbeansDescriptorsSerSource.java,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- MbeansDescriptorsSerSource.java 21 Jan 2003 00:33:45 -0000 1.3 +++ MbeansDescriptorsSerSource.java 26 Feb 2003 22:17:32 -0000 1.4 @@ -11,6 +11,8 @@ import java.io.ObjectInputStream; import java.io.EOFException; import java.net.URL; +import java.util.ArrayList; +import java.util.List; public class MbeansDescriptorsSerSource extends ModelerSource @@ -20,6 +22,7 @@ String location; String type; Object source; + List mbeans=new ArrayList(); public void setRegistry(Registry reg) { this.registry=reg; @@ -41,7 +44,7 @@ this.source=source; } - public void loadDescriptors( Registry registry, String location, + public List loadDescriptors( Registry registry, String location, String type, Object source) throws Exception { @@ -50,6 +53,7 @@ setType(type); setSource(source); execute(); + return mbeans; } public void execute() throws Exception { @@ -73,7 +77,7 @@ ManagedBean beans[]=(ManagedBean[])obj; // after all are read without error for( int i=0; i<beans.length; i++ ) { - registry.addManagedBean(beans[i]); + mbeans.add(beans[i]); } } catch( Exception ex ) { 1.6 +33 -5 jakarta-commons/modeler/src/java/org/apache/commons/modeler/modules/MbeansSource.java Index: MbeansSource.java =================================================================== RCS file: /home/cvs/jakarta-commons/modeler/src/java/org/apache/commons/modeler/modules/MbeansSource.java,v retrieving revision 1.5 retrieving revision 1.6 diff -u -r1.5 -r1.6 --- MbeansSource.java 17 Feb 2003 01:01:35 -0000 1.5 +++ MbeansSource.java 26 Feb 2003 22:17:32 -0000 1.6 @@ -11,6 +11,8 @@ import javax.management.loading.MLet; import java.io.InputStream; import java.net.URL; +import java.util.ArrayList; +import java.util.List; /** This will create mbeans based on a config file. @@ -24,6 +26,7 @@ String location; String type; Object source; + List mbeans=new ArrayList(); static boolean loaderLoaded=false; public void setRegistry(Registry reg) { @@ -46,7 +49,16 @@ this.source=source; } - public void loadDescriptors( Registry registry, String location, + /** Return the list of mbeans created by this source. + * It can be used to implement runtime services. + * + * @return + */ + public List getMBeans() { + return mbeans; + } + + public List loadDescriptors( Registry registry, String location, String type, Object source) throws Exception { @@ -55,6 +67,7 @@ setType(type); setSource(source); execute(); + return mbeans; } public void execute() throws Exception { @@ -97,8 +110,12 @@ { String nodeName=mbeanN.getNodeName(); - if( "mbean".equals(nodeName) || "MLET".equals(nodeName)) { + if( "mbean".equals(nodeName) || "MLET".equals(nodeName) || + "service".equals(nodeName)) { String code=DomUtil.getAttribute( mbeanN, "code" ); + if( code==null ) { + code=DomUtil.getAttribute( mbeanN, "class" ); + } String objectName=DomUtil.getAttribute( mbeanN, "objectName" ); if( objectName==null ) { objectName=DomUtil.getAttribute( mbeanN, "name" ); @@ -117,6 +134,7 @@ try { ObjectName oname=new ObjectName(objectName); server.createMBean(code, oname); + mbeans.add(oname); // XXX Arguments, loader !!! } catch( Exception ex ) { log.error( "Error creating mbean " + objectName, ex); @@ -182,7 +200,7 @@ Node descN, String objectName ) { String attName=DomUtil.getAttribute(descN, "name"); String value=DomUtil.getAttribute(descN, "value"); - String type=DomUtil.getAttribute(descN, "type"); + String type=null; // DomUtil.getAttribute(descN, "type"); if( value==null ) { // The value may be specified as CDATA value=DomUtil.getContent(descN); @@ -192,8 +210,18 @@ log.debug("Set attribute " + objectName + " " + attName + " " + value); ObjectName oname=new ObjectName(objectName); - Object valueO=getValueObject( value, type); - server.setAttribute(oname, new Attribute(attName, valueO)); + // find the type + MBeanInfo info=server.getMBeanInfo(oname); + MBeanAttributeInfo attInfo[]=info.getAttributes(); + for( int i=0; i<attInfo.length; i++ ) { + if( attName.equals(attInfo[i].getName())) { + type=attInfo[i].getType(); + Object valueO=getValueObject( value, type); + server.setAttribute(oname, new Attribute(attName, valueO)); + return; + } + } + log.info("Can't find attribute " + objectName + " " + attName ); } catch( Exception ex) { log.error("Error processing attribute " + objectName + " " + attName + " " + value, ex); 1.2 +3 -1 jakarta-commons/modeler/src/java/org/apache/commons/modeler/modules/ModelerSource.java Index: ModelerSource.java =================================================================== RCS file: /home/cvs/jakarta-commons/modeler/src/java/org/apache/commons/modeler/modules/ModelerSource.java,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- ModelerSource.java 21 Jan 2003 00:31:05 -0000 1.1 +++ ModelerSource.java 26 Feb 2003 22:17:32 -0000 1.2 @@ -1,16 +1,18 @@ package org.apache.commons.modeler.modules; import org.apache.commons.modeler.Registry; +import java.util.List; /** Source for descriptor data. More sources can be added. * */ public class ModelerSource { - public void loadDescriptors( Registry registry, String location, + public List loadDescriptors( Registry registry, String location, String type, Object source) throws Exception { // TODO + return null; } }
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]