You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@avalon.apache.org by do...@apache.org on 2001/11/17 12:44:51 UTC

cvs commit: jakarta-avalon-phoenix/src/java/org/apache/avalon/phoenix/components/embeddor DefaultEmbeddor.java

donaldp     01/11/17 03:44:51

  Modified:    src/java/org/apache/avalon/phoenix/components/embeddor
                        DefaultEmbeddor.java
  Log:
  Add another component to embeddor. This component represents the extensions repository via which OptionalPackages are loaded and referenced.
  
  Revision  Changes    Path
  1.33      +76 -79    jakarta-avalon-phoenix/src/java/org/apache/avalon/phoenix/components/embeddor/DefaultEmbeddor.java
  
  Index: DefaultEmbeddor.java
  ===================================================================
  RCS file: /home/cvs/jakarta-avalon-phoenix/src/java/org/apache/avalon/phoenix/components/embeddor/DefaultEmbeddor.java,v
  retrieving revision 1.32
  retrieving revision 1.33
  diff -u -r1.32 -r1.33
  --- DefaultEmbeddor.java	2001/11/09 22:04:31	1.32
  +++ DefaultEmbeddor.java	2001/11/17 11:44:51	1.33
  @@ -8,11 +8,10 @@
   package org.apache.avalon.phoenix.components.embeddor;
   
   import java.io.File;
  -import java.net.URL;
  -import org.apache.avalon.excalibur.container.Container;
   import org.apache.avalon.excalibur.i18n.ResourceManager;
   import org.apache.avalon.excalibur.i18n.Resources;
   import org.apache.avalon.excalibur.io.ExtensionFileFilter;
  +import org.apache.avalon.framework.CascadingException;
   import org.apache.avalon.framework.activity.Disposable;
   import org.apache.avalon.framework.activity.Initializable;
   import org.apache.avalon.framework.activity.Startable;
  @@ -20,9 +19,7 @@
   import org.apache.avalon.framework.component.ComponentManager;
   import org.apache.avalon.framework.component.Composable;
   import org.apache.avalon.framework.component.DefaultComponentManager;
  -import org.apache.avalon.framework.configuration.Configurable;
   import org.apache.avalon.framework.configuration.Configuration;
  -import org.apache.avalon.framework.configuration.ConfigurationException;
   import org.apache.avalon.framework.configuration.DefaultConfigurationBuilder;
   import org.apache.avalon.framework.logger.AbstractLogEnabled;
   import org.apache.avalon.framework.logger.AvalonFormatter;
  @@ -31,7 +28,6 @@
   import org.apache.avalon.framework.parameters.ParameterException;
   import org.apache.avalon.framework.parameters.Parameterizable;
   import org.apache.avalon.framework.parameters.Parameters;
  -import org.apache.avalon.phoenix.interfaces.Application;
   import org.apache.avalon.phoenix.interfaces.ClassLoaderManager;
   import org.apache.avalon.phoenix.interfaces.ConfigurationRepository;
   import org.apache.avalon.phoenix.interfaces.Deployer;
  @@ -39,6 +35,7 @@
   import org.apache.avalon.phoenix.interfaces.Embeddor;
   import org.apache.avalon.phoenix.interfaces.Kernel;
   import org.apache.avalon.phoenix.interfaces.LogManager;
  +import org.apache.avalon.phoenix.interfaces.PackageRepository;
   import org.apache.avalon.phoenix.interfaces.SystemManager;
   import org.apache.log.Hierarchy;
   import org.apache.log.LogTarget;
  @@ -59,26 +56,25 @@
       private static final Resources REZ =
           ResourceManager.getPackageResources( DefaultEmbeddor.class );
   
  -    private static final String    PHOENIX_HOME         =
  -        System.getProperty( "phoenix.home", ".." );
  +    private static final String DEFAULT_LOG_FILE = "/logs/phoenix.log";
  +    private static final String DEFAULT_APPS_PATH = "/apps";
   
  -    private static final String    DEFAULT_LOG_FILE     = PHOENIX_HOME + "/logs/phoenix.log";
  -    private static final String    DEFAULT_APPS_PATH    = PHOENIX_HOME + "/apps";
  -
  -    private final static String  DEFAULT_FORMAT =
  +    private final static String DEFAULT_FORMAT =
           "%{time} [%7.7{priority}] (%{category}): %{message}\\n%{throwable}";
   
  -    private Parameters     m_parameters;
  +    private Parameters m_parameters;
  +    private String m_phoenixHome;
   
  -    private ClassLoaderManager       m_classLoaderManager;
  -    private ConfigurationRepository  m_repository;
  -    private Kernel                   m_kernel;
  -    private Deployer                 m_deployer;
  -    private DeploymentRecorder       m_recorder;
  -    private LogManager               m_logManager;
  -    private SystemManager            m_systemManager;
  +    private ClassLoaderManager m_classLoaderManager;
  +    private ConfigurationRepository m_repository;
  +    private Kernel m_kernel;
  +    private Deployer m_deployer;
  +    private DeploymentRecorder m_recorder;
  +    private LogManager m_logManager;
  +    private SystemManager m_systemManager;
  +    private PackageRepository m_packageRepository;
   
  -    private boolean                  m_shutdown;
  +    private boolean m_shutdown;
   
       /**
        * Set parameters for this component.
  @@ -86,25 +82,28 @@
        *
        * Make sure to provide all the neccessary information through
        * these parameters. All information it needs consists of strings.
  -     * Neccessary are:
  +     * There are two types of strings included in parameters. The first
  +     * type include parameters used to setup proeprties of the embeddor.
  +     * The second type include the implementation names of the components
  +     * that the Embeddor manages. For instance if you want to replace the
  +     * <code>ConfigurationRepository</code> with your own repository you
  +     * would pass in a parameter such as;</p>
  +     * <p>org.apache.avalon.phoenix.interfaces.ConfigurationRepository =
  +     * com.biz.MyCustomConfigurationRepository</p>
  +     *
  +     * <p>Of the other type of parameters, the following are supported by
  +     * the DefaultEmbeddor implementation of Embeddor. Note that some of 
  +     * the embedded components may support other parameters.</p>
        * <ul>
  -     * <li><b>kernel-class</b>, the classname of the
  -     * org.apache.avalon.phoenix.engine.ServerKernel to be used.</li>
  -     * <li><b>deployer-class</b>, the classname of the
  -     * org.apache.avalon.phoenix.components.deployer.Deployer to be used.</li>
  -     * <li><b>kernel-configuration-source</b>, the location
  -     * of the configuration file to be used for configuring the
  -     * kernel. (If kernel is configurable)</li>
  +     * <li><b>phoenix.home</b>, the home directory of phoenix. Defaults 
  +     * to "..".</li>
        * <li><b>log-destination</b>, the file to save log
  -     * messages in. If omitted, no logs are written.</li>
  -     * <li>TODO: <b>facilities-directory</b>, the directory in
  -     * which the  facilities you wish to load into the kernel
  -     * are stored (in .far format).<br />
  -     * When ommited, the default facilities are used.</li>
  +     * messages in. If omitted, ${phoenix.home}/logs/phoenix.log is used.</li>
  +     * <li><b>log-priority</b>, the priority at which log messages are filteres.
  +     * If omitted, then INFO will be default level used.</li>
        * <li><b>applications-directory</b>, the directory in which
        * the defaul applications to be loaded by the kernel are stored
  -     * (in .sar format).<br />
  -     * When ommited, no applications are loaded.</li>
  +     * (in .sar format). Defaults to ${phoenix.home}/apps</li>
        * </ul>
        *
        * @param parameters the Parameters for embeddor
  @@ -115,6 +114,8 @@
       {
           m_parameters = createDefaultParameters();
           m_parameters.merge( parameters );
  +
  +        m_phoenixHome = m_parameters.getParameter( "phoenix.home" );
       }
   
       /**
  @@ -130,6 +131,7 @@
               createComponents();
   
               // setup core handler components
  +            setupComponent( m_packageRepository, "packages" );
               setupComponent( m_logManager, "logs" );
               setupComponent( m_classLoaderManager, "classes" );
               setupComponent( m_repository, "config" );
  @@ -165,8 +167,16 @@
           while( !m_shutdown )
           {
               // wait() for shutdown() to take action...
  -            try { synchronized( this ) { wait(); } }
  -            catch( final InterruptedException e ) {}
  +            try
  +            {
  +                synchronized( this )
  +                {
  +                    wait();
  +                }
  +            }
  +            catch( final InterruptedException e )
  +            {
  +            }
           }
       }
   
  @@ -176,16 +186,16 @@
       public synchronized void dispose()
       {
           shutdown();
  -
           try
           {
  -            shutdownComponent( m_systemManager );            
  +            shutdownComponent( m_systemManager );
               shutdownComponent( m_recorder );
               shutdownComponent( m_deployer );
               shutdownComponent( m_kernel );
               shutdownComponent( m_repository );
               shutdownComponent( m_logManager );
               shutdownComponent( m_classLoaderManager );
  +            shutdownComponent( m_packageRepository );
           }
           catch( final Exception e )
           {
  @@ -194,13 +204,13 @@
               getLogger().fatalError( message, e );
           }
   
  +        m_packageRepository = null;
           m_systemManager = null;
           m_kernel = null;
           m_repository = null;
           m_classLoaderManager = null;
           m_logManager = null;
           m_deployer = null;
  -
           System.gc(); // make sure resources are released
       }
   
  @@ -210,7 +220,10 @@
       public void shutdown()
       {
           m_shutdown = true;
  -        synchronized( this ) { notifyAll(); }
  +        synchronized( this )
  +        {
  +            notifyAll();
  +        }
       }
   
       //////////////////////
  @@ -230,17 +243,17 @@
   
           String component = null;
   
  +        component = m_parameters.getParameter( PackageRepository.ROLE );
  +        m_packageRepository = (PackageRepository)createComponent( component, PackageRepository.class );
  +
           component = m_parameters.getParameter( ConfigurationRepository.ROLE );
  -        m_repository =
  -            (ConfigurationRepository)createComponent( component, ConfigurationRepository.class );
  +        m_repository = (ConfigurationRepository)createComponent( component, ConfigurationRepository.class );
   
           component = m_parameters.getParameter( LogManager.ROLE );
  -        m_logManager =
  -            (LogManager)createComponent( component, LogManager.class );
  +        m_logManager = (LogManager)createComponent( component, LogManager.class );
   
           component = m_parameters.getParameter( ClassLoaderManager.ROLE );
  -        m_classLoaderManager =
  -            (ClassLoaderManager)createComponent( component, ClassLoaderManager.class );
  +        m_classLoaderManager = (ClassLoaderManager)createComponent( component, ClassLoaderManager.class );
   
           component = m_parameters.getParameter( Deployer.ROLE );
           m_deployer = (Deployer)createComponent( component, Deployer.class );
  @@ -267,11 +280,9 @@
           throws Exception
       {
           final String logDestination =
  -            m_parameters.getParameter( "log-destination", DEFAULT_LOG_FILE );
  -
  +            m_parameters.getParameter( "log-destination", m_phoenixHome + DEFAULT_LOG_FILE );
           final String logPriority =
               m_parameters.getParameter( "log-priority", "INFO" );
  -
           final AvalonFormatter formatter = new AvalonFormatter( DEFAULT_FORMAT );
           final File file = new File( logDestination );
           final FileTarget logTarget = new FileTarget( file, false, formatter );
  @@ -280,9 +291,8 @@
           //components can get access to logging hierarchy
           final Hierarchy hierarchy = new Hierarchy();
           final org.apache.log.Logger logger = hierarchy.getLoggerFor( "Phoenix" );
  -        logger.setLogTargets( new LogTarget[] { logTarget } );
  +        logger.setLogTargets( new LogTarget[]{ logTarget } );
           logger.setPriority( Priority.getPriorityForName( logPriority ) );
  -
           logger.info( "Logger started" );
           return new LogKitLogger( logger );
       }
  @@ -299,20 +309,16 @@
       {
           //Name of optional application specified on CLI
           final String application = m_parameters.getParameter( "application-location", null );
  -
           if( null != application )
           {
               final File file = new File( application );
               deployFile( file );
           }
  -
           final String defaultAppsLocation =
  -            m_parameters.getParameter( "applications-directory", DEFAULT_APPS_PATH );
  -        
  +            m_parameters.getParameter( "applications-directory", m_phoenixHome + DEFAULT_APPS_PATH );
           if( null != defaultAppsLocation )
           {
               final File directory = new File( defaultAppsLocation );
  -
               final ExtensionFileFilter filter = new ExtensionFileFilter( ".sar" );
               final File[] files = directory.listFiles( filter );
               if( null != files )
  @@ -335,13 +341,10 @@
           throws Exception
       {
           final String filename = file.getName();
  -        
           int index = filename.lastIndexOf( '.' );
           if( -1 == index ) index = filename.length();
  -        
           final String name = filename.substring( 0, index );
           final File canonicalFile = file.getCanonicalFile();
  -        
           deployFile( name, canonicalFile );
       }
   
  @@ -362,26 +365,22 @@
           throws Exception
       {
           setupLogger( component, loggerName );
  -
           if( component instanceof Composable )
           {
               final ComponentManager componentManager = getComponentManager();
  -            ((Composable)component).compose( componentManager );
  +            ( (Composable)component ).compose( componentManager );
           }
  -
           if( component instanceof Parameterizable )
           {
  -            ((Parameterizable)component).parameterize( m_parameters );
  +            ( (Parameterizable)component ).parameterize( m_parameters );
           }
  -
           if( component instanceof Initializable )
           {
  -            ((Initializable)component).initialize();
  +            ( (Initializable)component ).initialize();
           }
  -
           if( component instanceof Startable )
           {
  -            ((Startable)component).start();
  +            ( (Startable)component ).start();
           }
       }
   
  @@ -396,15 +395,13 @@
           throws Exception
       {
           if( null == component ) return;
  -
           if( component instanceof Startable )
           {
  -            ((Startable)component).stop();
  +            ( (Startable)component ).stop();
           }
  -
           if( component instanceof Disposable )
           {
  -            ((Disposable)component).dispose();
  +            ( (Disposable)component ).dispose();
           }
       }
   
  @@ -422,47 +419,44 @@
           try
           {
               final Object object = Class.forName( component ).newInstance();
  -
               if( !clazz.isInstance( object ) )
               {
                   final String message = REZ.getString( "bad-type.error", component, clazz.getName() );
                   throw new Exception( message );
               }
  -
               return object;
           }
           catch( final IllegalAccessException iae )
           {
               final String message = REZ.getString( "bad-ctor.error", clazz.getName(), component );
  -            throw new Exception( message );
  +            throw new CascadingException( message, iae );
           }
           catch( final InstantiationException ie )
           {
               final String message =
                   REZ.getString( "no-instantiate.error", clazz.getName(), component );
  -            throw new Exception( message );
  +            throw new CascadingException( message, ie );
           }
           catch( final ClassNotFoundException cnfe )
           {
               final String message =
                   REZ.getString( "no-class.error", clazz.getName(), component );
  -            throw new Exception( message );
  +            throw new CascadingException( message, cnfe );
           }
       }
   
       private ComponentManager getComponentManager()
       {
           final DefaultComponentManager componentManager = new DefaultComponentManager();
  -
           componentManager.put( Embeddor.ROLE, this );
           componentManager.put( LogManager.ROLE, m_logManager );
  +        componentManager.put( PackageRepository.ROLE, m_packageRepository );
           componentManager.put( ClassLoaderManager.ROLE, m_classLoaderManager );
           componentManager.put( ConfigurationRepository.ROLE, m_repository );
           componentManager.put( Deployer.ROLE, m_deployer );
           componentManager.put( DeploymentRecorder.ROLE, m_recorder );
           componentManager.put( SystemManager.ROLE, m_systemManager );
           componentManager.put( Kernel.ROLE, m_kernel );
  -
           return componentManager;
       }
   
  @@ -475,6 +469,7 @@
       protected Parameters createDefaultParameters()
       {
           final Parameters defaults = new Parameters();
  +        defaults.setParameter( "phoenix.home", ".." );
   
           final String PREFIX = "org.apache.avalon.phoenix.components.";
           defaults.setParameter( Deployer.ROLE, PREFIX + "deployer.DefaultDeployer" );
  @@ -487,6 +482,8 @@
                                  PREFIX + "configuration.DefaultConfigurationRepository" );
           defaults.setParameter( ClassLoaderManager.ROLE,
                                  PREFIX + "classloader.DefaultClassLoaderManager" );
  +        defaults.setParameter( PackageRepository.ROLE, 
  +                               PREFIX + "classloader.PhoenixPackageRepository" );
           return defaults;
       }
   
  
  
  

--
To unsubscribe, e-mail:   <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>