costin      2003/01/10 23:23:29

  Modified:    modeler/src/java/org/apache/commons/modeler Registry.java
  Removed:     modeler/src/java/org/apache/commons/modeler
                        BaseRegistry.java
  Log:
  I added BaseRegistry few weeks ago - attempting to make
  modeler useable without a dependency on JMX. That doesn't seem
  to work - modeler is too specific to JMX, and many features
  can't be exposed.
  
  I also cleaned up some of the new APIs ( I hope I didn't broke
  any of the old ones and nobody started to use them - gump will
  tell very soon )
  
  Revision  Changes    Path
  1.14      +100 -38   
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.13
  retrieving revision 1.14
  diff -u -r1.13 -r1.14
  --- Registry.java     7 Jan 2003 21:07:40 -0000       1.13
  +++ Registry.java     11 Jan 2003 07:23:29 -0000      1.14
  @@ -83,9 +83,8 @@
    *
    * @author Craig R. McClanahan
    * @author Costin Manolache
  - * @version $Revision$ $Date$
    */
  -public final class Registry extends BaseRegistry {
  +public final class Registry {
   
   
       // ----------------------------------------------------------- Constructors
  @@ -259,6 +258,7 @@
        *
        * @exception Exception if any parsing or processing error occurs
        * @deprecated use normal class method instead
  +     * @since 1.0
        */
       public static void loadRegistry(InputStream stream) throws Exception {
           Registry registry = getRegistry();
  @@ -292,11 +292,38 @@
           return ds;
       }
   
  -    public void loadDescriptors( String location, String type, InputStream stream )
  +    public void loadDescriptors( String type, Object source )
           throws Exception
       {
  -        DescriptorSource ds=getDescriptorSource(type);
  -        ds.loadDescriptors(this, location, type, stream);
  +        log.trace("loadDescriptors " + source );
  +
  +        if( source instanceof URL ) {
  +            System.out.println("Try " + source );
  +            URL url=(URL)source;
  +//            URL url1=new URL( url.toString() + ".ser");
  +//            try {
  +//                System.out.println("Ser: " + url1);
  +//                InputStream stream=url1.openStream();
  +//                if( stream != null ) {
  +//                    DescriptorSource 
ds=getDescriptorSource("MbeansDescriptorsSer");
  +//                    ds.loadDescriptors(this, url1.toString(), type, stream);
  +//                    return;
  +//                }
  +//            }  catch( FileNotFoundException ex ) {
  +//                // nothing
  +//                log.debug("Not found: " + url1 );
  +//            }  catch( Exception ex ) {
  +//                ex.printStackTrace();
  +//            }
  +            InputStream stream=url.openStream();
  +            DescriptorSource ds=getDescriptorSource(type);
  +            ds.loadDescriptors(this, url.toString(), type, stream);
  +        }
  +
  +        if( source instanceof InputStream ) {
  +            DescriptorSource ds=getDescriptorSource(type);
  +            ds.loadDescriptors(this, null, type, (InputStream)source);
  +        }
       }
   
       /**
  @@ -307,11 +334,12 @@
        *  information
        *
        * @exception Exception if any parsing or processing error occurs
  +     * @since 1.0
        */
       public void loadDescriptors(InputStream stream, String type)
           throws Exception
       {
  -        loadDescriptors(null, type, stream );
  +        loadDescriptors( type, stream );
       }
   
       /**
  @@ -338,29 +366,34 @@
                                     String name)
              throws Exception
       {
  -        if( type==null ) {
  -            // XXX find type from bean name.
  -        }
  -        ManagedBean managed = registry.findManagedBean(type);
  -        if( managed==null ) {
  -            // TODO: check package and parent packages
  -
  -            // TODO: check super-class
  -
  -            // introspection
  -            managed=createManagedBean(domain, bean.getClass(), type);
  -            addManagedBean(managed);
  -        }
  -
  -        // The real mbean is created and registered
  -        ModelMBean mbean = managed.createMBean(bean);
  +        String nameStr=null;
  +        try {
  +            if( type==null ) {
  +                // XXX find type from bean name.
  +            }
  +            ManagedBean managed = registry.findManagedBean(type);
  +            if( managed==null ) {
  +                // TODO: check package and parent packages
  +
  +                // TODO: check super-class
  +
  +                // introspection
  +                managed=createManagedBean(domain, bean.getClass(), type);
  +                managed.setName( type );
  +                addManagedBean(managed);
  +            }
   
  -        if( name==null ) {
  -            // XXX generate a seq or hash ?
  -            // should we genereate the seq automatically ?
  +            // The real mbean is created and registered
  +            ModelMBean mbean = managed.createMBean(bean);
  +            StringBuffer sb=new StringBuffer();
  +            sb.append( domain ).append(":");
  +            sb.append( name );
  +            nameStr=sb.toString();
  +            getServer().registerMBean( mbean, new ObjectName( nameStr ));
  +        } catch( Exception ex) {
  +            log.error("Error registering " + nameStr );
  +            throw ex;
           }
  -        getServer().registerMBean( mbean, new ObjectName( domain + ": type="
  -                + type + " ; " + name ));
       }
   
       public void unregisterComponent( String name ) {
  @@ -375,15 +408,6 @@
       }
   
   
  -    public void registerClass(Class beanClass, String domain, String className,
  -                              String type, Object source)
  -    {
  -        // use intropsection. Source is not supported yet.
  -        ManagedBean managed=createManagedBean(domain, beanClass, type);
  -
  -    }
  -
  -
       public String registerMBean( String domain, String name ) {
           try {
               // XXX use aliases, suffix only, proxy.getName(), etc
  @@ -434,13 +458,51 @@
           try {
               DescriptorSource 
ds=getDescriptorSource("MbeansDescriptorsIntrospection");
               ds.loadDescriptors(this, type, type, realClass);
  -            System.out.println("Loading " + realClass.getName());
  -            return findManagedBean(realClass.getName());
  +            if( log.isDebugEnabled())
  +                log.debug("Loading " + type + " " + realClass.getName());
  +            return findManagedBean(type);
           } catch( Exception ex ) {
               ex.printStackTrace();
           }
           return null;
       }
   
  +    /** Find the 'type' for this class
  +     *
  +     */
  +    public String getType( String domain, Class realClass ) {
  +        // first look at explicit mappings ( exceptions in MBeanUtils )
  +
  +        // We could also look up super classes and locate one we know about
  +
  +        // We could use the domain as a discriminator
  +
  +        String name=realClass.getName();
  +        name=name.substring( name.lastIndexOf( ".") + 1 );
  +
   
  +        return name;
  +    }
  +
  +    // Store all objects that have been registered via modeler
  +    // it is used to generate unique names automatically - using seq=
  +    // scheme
  +    Hashtable instances=new Hashtable();
  +    /** If a name was not provided, generate a name based on the
  +     *  class name and a sequence number.
  +     */
  +    public String generateSeqName(String domain, Class realClass) {
  +        String name=getType( domain, realClass );
  +
  +        Integer iInt=(Integer)instances.get(name );
  +        int seq=0;
  +        if( iInt!= null ) {
  +            seq=iInt.intValue();
  +            seq++;
  +            instances.put( name, new Integer( seq ));
  +        } else {
  +            instances.put( name, new Integer( 0 ));
  +        }
  +        return "name=" + name + ",seq=" + seq;
  +    }
   }
  
  
  

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

Reply via email to