hammett     2004/01/31 17:04:44

  Modified:    fortress/container/src/impl/org/apache/avalon/fortress/impl/role
                        ServiceMetaManager.java
               fortress/container/src/impl/org/apache/avalon/fortress/util
                        Service.java
  Log:
  Patch for use context classloader to obtain info files (meta and etc)
  
  Revision  Changes    Path
  1.10      +2 -2      
avalon/fortress/container/src/impl/org/apache/avalon/fortress/impl/role/ServiceMetaManager.java
  
  Index: ServiceMetaManager.java
  ===================================================================
  RCS file: 
/home/cvs/avalon/fortress/container/src/impl/org/apache/avalon/fortress/impl/role/ServiceMetaManager.java,v
  retrieving revision 1.9
  retrieving revision 1.10
  diff -u -r1.9 -r1.10
  --- ServiceMetaManager.java   2 Jul 2003 12:28:42 -0000       1.9
  +++ ServiceMetaManager.java   1 Feb 2004 01:04:44 -0000       1.10
  @@ -196,7 +196,7 @@
       private void setupImplementations( final String role )
           throws ClassNotFoundException
       {
  -        final Iterator it = Service.providers( getLoader().loadClass( role ) );
  +        final Iterator it = Service.providers( getLoader().loadClass( role ), 
getLoader() );
   
           while ( it.hasNext() )
           {
  
  
  
  1.9       +88 -75    
avalon/fortress/container/src/impl/org/apache/avalon/fortress/util/Service.java
  
  Index: Service.java
  ===================================================================
  RCS file: 
/home/cvs/avalon/fortress/container/src/impl/org/apache/avalon/fortress/util/Service.java,v
  retrieving revision 1.8
  retrieving revision 1.9
  diff -u -r1.8 -r1.9
  --- Service.java      18 Jun 2003 13:16:48 -0000      1.8
  +++ Service.java      1 Feb 2004 01:04:44 -0000       1.9
  @@ -82,6 +82,93 @@
       {
       }
   
  +     /**
  +      * Get all the providers for the specified services.
  +      *
  +      * @param klass  the interface <code>Class</code>
  +      * @param loader  the <code>ClassLoader to be used.</code>
  +      *
  +      * @return an <code>Iterator</code> for the providers.
  +      */
  +     public static synchronized Iterator providers( final Class klass, ClassLoader 
loader )
  +     {
  +             final String serviceFile = SERVICES + klass.getName();
  +             
  +             if ( null == loader )
  +             {
  +                     loader = klass.getClassLoader();
  +             }
  +
  +             Set providerSet = (Set) providers.get( serviceFile );
  +
  +             if ( null == providerSet )
  +             {
  +                     providerSet = new HashSet();
  +                     Enumeration enum = null;
  +                     boolean errorOccurred = false;
  +
  +                     providers.put( serviceFile, providerSet );
  +
  +                     try
  +                     {
  +                             enum = loader.getResources( serviceFile );
  +                     }
  +                     catch ( IOException ioe )
  +                     {
  +                             errorOccurred = true;
  +                     }
  +
  +                     if ( !errorOccurred )
  +                     {
  +                             while ( enum.hasMoreElements() )
  +                             {
  +                                     try
  +                                     {
  +                                             final URL url = (URL) 
enum.nextElement();
  +                                             final InputStream is = 
url.openStream();
  +                                             final BufferedReader reader = new 
BufferedReader(
  +                                                     new InputStreamReader( is,
  +                                                             "UTF-8" ) );
  +
  +                                             String line = reader.readLine();
  +                                             while ( null != line )
  +                                             {
  +                                                     try
  +                                                     {
  +                                                             final int comment = 
line.indexOf( '#' );
  +
  +                                                             if ( comment > -1 )
  +                                                             {
  +                                                                     line = 
line.substring( 0, comment );
  +                                                             }
  +
  +                                                             line.trim();
  +
  +                                                             if ( line.length() > 0 
)
  +                                                             {
  +                                                                     // We just 
want the types, not the instances
  +                                                                     
providerSet.add( loader.loadClass( line ) );
  +                                                             }
  +                                                     }
  +                                                     catch ( Exception e )
  +                                                     {
  +                                                             // try the next line
  +                                                     }
  +
  +                                                     line = reader.readLine();
  +                                             }
  +                                     }
  +                                     catch ( Exception e )
  +                                     {
  +                                             // try the next file
  +                                     }
  +                             }
  +                     }
  +             }
  +
  +             return providerSet.iterator();          
  +     }
  +
       /**
        * Get all the providers for the specified services.
        *
  @@ -91,82 +178,8 @@
        */
       public static synchronized Iterator providers( final Class klass )
       {
  -        final String serviceFile = SERVICES + klass.getName();
           ClassLoader loader = Thread.currentThread().getContextClassLoader();
   
  -        if ( null == loader )
  -        {
  -            loader = klass.getClassLoader();
  -        }
  -
  -        Set providerSet = (Set) providers.get( serviceFile );
  -
  -        if ( null == providerSet )
  -        {
  -            providerSet = new HashSet();
  -            Enumeration enum = null;
  -            boolean errorOccurred = false;
  -
  -            providers.put( serviceFile, providerSet );
  -
  -            try
  -            {
  -                enum = loader.getResources( serviceFile );
  -            }
  -            catch ( IOException ioe )
  -            {
  -                errorOccurred = true;
  -            }
  -
  -            if ( !errorOccurred )
  -            {
  -                while ( enum.hasMoreElements() )
  -                {
  -                    try
  -                    {
  -                        final URL url = (URL) enum.nextElement();
  -                        final InputStream is = url.openStream();
  -                        final BufferedReader reader = new BufferedReader(
  -                            new InputStreamReader( is,
  -                                "UTF-8" ) );
  -
  -                        String line = reader.readLine();
  -                        while ( null != line )
  -                        {
  -                            try
  -                            {
  -                                final int comment = line.indexOf( '#' );
  -
  -                                if ( comment > -1 )
  -                                {
  -                                    line = line.substring( 0, comment );
  -                                }
  -
  -                                line.trim();
  -
  -                                if ( line.length() > 0 )
  -                                {
  -                                    // We just want the types, not the instances
  -                                    providerSet.add( loader.loadClass( line ) );
  -                                }
  -                            }
  -                            catch ( Exception e )
  -                            {
  -                                // try the next line
  -                            }
  -
  -                            line = reader.readLine();
  -                        }
  -                    }
  -                    catch ( Exception e )
  -                    {
  -                        // try the next file
  -                    }
  -                }
  -            }
  -        }
  -
  -        return providerSet.iterator();
  +        return providers( klass, loader );
       }
  -
   }
  
  
  

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

Reply via email to