costin      2002/08/09 10:39:07

  Modified:    util/java/org/apache/tomcat/util/mx DynamicMBeanProxy.java
  Log:
  Added 'createMBean( Object, domain, name )'.
  Any component that wants to be visible in JMX needs one line
  in the constructor:
  
    org.apache.tomcat.util.mx.DynamicMBeanProxy.createMBean( this, "domain", "name" );
  
  ( you can do that for other components as well ).
  
  I'll eventually refactor this into 2 classes and move to modeler,
  with one class beeing independent of JMX.
  
  Revision  Changes    Path
  1.4       +29 -2     
jakarta-tomcat-connectors/util/java/org/apache/tomcat/util/mx/DynamicMBeanProxy.java
  
  Index: DynamicMBeanProxy.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat-connectors/util/java/org/apache/tomcat/util/mx/DynamicMBeanProxy.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- DynamicMBeanProxy.java    2 Jul 2002 19:56:24 -0000       1.3
  +++ DynamicMBeanProxy.java    9 Aug 2002 17:39:07 -0000       1.4
  @@ -112,7 +112,15 @@
   
           if( real==null ) return null;
   
  -        name=real.getClass().getName();
  +        name=generateName(real.getClass());
  +        return name;
  +    }
  +
  +    /** If a name was not provided, generate a name based on the
  +     *  class name and a sequence number.
  +     */
  +    public String generateName(Class realClass) {
  +        name=realClass.getName();
           name=name.substring( name.lastIndexOf( ".") + 1 );
           Integer iInt=(Integer)instances.get(name );
           if( iInt!= null ) {
  @@ -125,12 +133,30 @@
           }
           return name;
       }
  +
  +    public static void createMBean( Object proxy, String domain, String name ) {
  +        try {
  +            DynamicMBeanProxy mbean=new DynamicMBeanProxy();
  +            mbean.setReal( proxy );
  +            if( name!=null ) {
  +                mbean.setName( name );
  +            }
  +
  +            mbean.registerMBean( domain );
  +        } catch( Throwable t ) {
  +            log.error( "Error creating mbean ", t );
  +        }
  +    }
       
       public void registerMBean( String domain ) {
           try {
               // XXX use aliases, suffix only, proxy.getName(), etc
               ObjectName oname=new ObjectName( domain + ": name=" +  getName());
  -            
  +
  +            if(  getMBeanServer().isRegistered( oname )) {
  +                log.info("Unregistering " + oname );
  +                getMBeanServer().unregisterMBean( oname );
  +            }
               getMBeanServer().registerMBean( this, oname );
           } catch( Throwable t ) {
               log.error( "Error creating mbean ", t );
  @@ -298,6 +324,7 @@
           throws AttributeNotFoundException, InvalidAttributeValueException, 
MBeanException, ReflectionException
       {
           if( methods==null ) init();
  +        // XXX Send notification !!!
           Method m=(Method)setAttMap.get( attribute.getName() );
           if( m==null ) throw new AttributeNotFoundException(attribute.getName());
   
  
  
  

--
To unsubscribe, e-mail:   <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>

Reply via email to