You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@avalon.apache.org by do...@apache.org on 2001/03/18 09:35:08 UTC

cvs commit: jakarta-avalon-phoenix/src/java/org/apache/phoenix/engine/facilitys DefaultComponentBuilder.java DefaultComponentManagerBuilder.java DefaultConfigurationRepository.java DefaultContextBuilder.java DefaultLogManager.java DefaultLoggerBuilder.java DefaultPolicy.java DefaultThreadManager.java SarBlockFactory.java SarClassLoader.java

donaldp     01/03/18 00:35:07

  Modified:    src/java/org/apache/phoenix/engine
                        DefaultServerApplication.java
  Added:       src/java/org/apache/phoenix/engine/facilities
                        DefaultComponentBuilder.java
                        DefaultComponentManagerBuilder.java
                        DefaultConfigurationRepository.java
                        DefaultContextBuilder.java DefaultLogManager.java
                        DefaultLoggerBuilder.java DefaultPolicy.java
                        DefaultThreadManager.java SarBlockFactory.java
                        SarClassLoader.java
  Removed:     src/java/org/apache/phoenix/engine/facilitys
                        DefaultComponentBuilder.java
                        DefaultComponentManagerBuilder.java
                        DefaultConfigurationRepository.java
                        DefaultContextBuilder.java DefaultLogManager.java
                        DefaultLoggerBuilder.java DefaultPolicy.java
                        DefaultThreadManager.java SarBlockFactory.java
                        SarClassLoader.java
  Log:
  Change package name facilitys to facilities to fix spelling mistake ;)
  
  Revision  Changes    Path
  1.7       +9 -9      jakarta-avalon-phoenix/src/java/org/apache/phoenix/engine/DefaultServerApplication.java
  
  Index: DefaultServerApplication.java
  ===================================================================
  RCS file: /home/cvs/jakarta-avalon-phoenix/src/java/org/apache/phoenix/engine/DefaultServerApplication.java,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- DefaultServerApplication.java	2001/02/28 08:28:32	1.6
  +++ DefaultServerApplication.java	2001/03/18 08:35:02	1.7
  @@ -39,15 +39,15 @@
   import org.apache.phoenix.engine.blocks.BlockDAG;
   import org.apache.phoenix.engine.blocks.BlockEntry;
   import org.apache.phoenix.engine.blocks.RoleEntry;
  -import org.apache.phoenix.engine.facilitys.DefaultComponentBuilder;
  -import org.apache.phoenix.engine.facilitys.DefaultComponentManagerBuilder;
  -import org.apache.phoenix.engine.facilitys.DefaultConfigurationRepository;
  -import org.apache.phoenix.engine.facilitys.DefaultContextBuilder;
  -import org.apache.phoenix.engine.facilitys.DefaultLogManager;
  -import org.apache.phoenix.engine.facilitys.DefaultLoggerBuilder;
  -import org.apache.phoenix.engine.facilitys.DefaultPolicy;
  -import org.apache.phoenix.engine.facilitys.DefaultThreadManager;
  -import org.apache.phoenix.engine.facilitys.SarClassLoader;
  +import org.apache.phoenix.engine.facilities.DefaultComponentBuilder;
  +import org.apache.phoenix.engine.facilities.DefaultComponentManagerBuilder;
  +import org.apache.phoenix.engine.facilities.DefaultConfigurationRepository;
  +import org.apache.phoenix.engine.facilities.DefaultContextBuilder;
  +import org.apache.phoenix.engine.facilities.DefaultLogManager;
  +import org.apache.phoenix.engine.facilities.DefaultLoggerBuilder;
  +import org.apache.phoenix.engine.facilities.DefaultPolicy;
  +import org.apache.phoenix.engine.facilities.DefaultThreadManager;
  +import org.apache.phoenix.engine.facilities.SarClassLoader;
   import org.apache.phoenix.engine.phases.DefaultPhase;
   import org.apache.phoenix.engine.phases.Phase;
   import org.apache.phoenix.engine.phases.Traversal;
  
  
  
  1.1                  jakarta-avalon-phoenix/src/java/org/apache/phoenix/engine/facilities/DefaultComponentBuilder.java
  
  Index: DefaultComponentBuilder.java
  ===================================================================
  /*
   * Copyright (C) The Apache Software Foundation. All rights reserved.
   *
   * This software is published under the terms of the Apache Software License
   * version 1.1, a copy of which has been included with this distribution in
   * the LICENSE file.
   */
  package org.apache.phoenix.engine.facilities;
  
  import org.apache.avalon.AbstractLoggable;
  import org.apache.avalon.Component;
  import org.apache.avalon.ComponentManager;
  import org.apache.avalon.ComponentManagerException;
  import org.apache.avalon.Composer;
  import org.apache.avalon.Initializable;
  import org.apache.avalon.atlantis.ApplicationException;
  import org.apache.avalon.atlantis.Facility;
  import org.apache.avalon.camelot.Entry;
  import org.apache.avalon.camelot.Factory;
  import org.apache.avalon.camelot.FactoryException;
  import org.apache.avalon.camelot.pipeline.ComponentBuilder;
  import org.apache.log.Logger;
  import org.apache.phoenix.Block;
  import org.apache.phoenix.engine.blocks.BlockEntry;
  import org.apache.phoenix.metainfo.BlockUtil;
  import org.apache.phoenix.metainfo.ServiceInfo;
  
  /**
   * Component responsible for building componentManager information for entry.
   *
   * @author <a href="mailto:donaldp@apache.org">Peter Donald</a>
   */
  public class DefaultComponentBuilder
      extends AbstractLoggable
      implements Facility, ComponentBuilder, Composer, Initializable
  {
      protected SarBlockFactory      m_factory = new SarBlockFactory();
  
      public void setLogger( final Logger logger )
      {
          super.setLogger( logger );
          setupLogger( m_factory, "<core>.factory" );
      }
  
      public void compose( final ComponentManager componentManager )
          throws ComponentManagerException
      {
          m_factory.compose( componentManager );
      }
  
      public void init()
          throws Exception
      {
          m_factory.init();
      }
  
      public Object createComponent( final String name, final Entry entry )
          throws Exception
      {
          getLogger().info( "Creating block " + name );
  
          final BlockEntry blockEntry = (BlockEntry)entry;
  
          Block block = null;
          
          try { block = (Block)m_factory.create( blockEntry.getLocator(), Block.class ); }
          catch( final FactoryException fe )
          {
              throw new ApplicationException( "Failed to create block " + name, fe );
          }
          
          getLogger().debug( "Created block " + block );
          verifyBlockServices( name, blockEntry, block );
  
          return block;
      }
  
      /**
       * Verify that all the services that a block 
       * declares it provides are actually provided.
       *
       * @param name the name of block
       * @param blockEntry the blockEntry
       * @param block the Block
       * @exception ApplicationException if verification fails
       */
      protected void verifyBlockServices( final String name, 
                                          final BlockEntry blockEntry,  
                                          final Block block )
          throws ApplicationException
      {
          final ServiceInfo[] services = blockEntry.getBlockInfo().getServices();
          for( int i = 0; i < services.length; i++ )
          {
              if( false == BlockUtil.implementsService( block, services[ i ] ) )
              {
                  final String message = "Block " + name + " fails to implement " + 
                      "advertised service " + services[ i ];
                  getLogger().warn( message );
                  throw new ApplicationException( message );
              }
          }        
      }
  }
  
  
  
  1.1                  jakarta-avalon-phoenix/src/java/org/apache/phoenix/engine/facilities/DefaultComponentManagerBuilder.java
  
  Index: DefaultComponentManagerBuilder.java
  ===================================================================
  /*
   * Copyright (C) The Apache Software Foundation. All rights reserved.
   *
   * This software is published under the terms of the Apache Software License
   * version 1.1, a copy of which has been included with this distribution in
   * the LICENSE file.
   */
  package org.apache.phoenix.engine.facilities;
  
  import org.apache.avalon.ComponentManager;
  import org.apache.avalon.ComponentManagerException;
  import org.apache.avalon.Composer;
  import org.apache.avalon.DefaultComponentManager;
  import org.apache.avalon.atlantis.Facility;
  import org.apache.avalon.camelot.ContainerException;
  import org.apache.avalon.camelot.Entry;
  import org.apache.avalon.camelot.pipeline.ComponentManagerBuilder;
  import org.apache.phoenix.engine.ServerApplication;
  import org.apache.phoenix.engine.blocks.BlockEntry;
  import org.apache.phoenix.engine.blocks.RoleEntry;
  
  /**
   * Component responsible for building componentManager information for entry.
   *
   * @author <a href="mailto:donaldp@apache.org">Peter Donald</a>
   */
  public class DefaultComponentManagerBuilder
      implements Facility, ComponentManagerBuilder, Composer
  {
      //container to get dependencies from
      protected ServerApplication        m_serverApplication;
  
      public void compose( final ComponentManager componentManager )
          throws ComponentManagerException
      {
          m_serverApplication = (ServerApplication)componentManager.
              lookup( "org.apache.phoenix.engine.ServerApplication" );
      }
  
      /**
       * Build a ComponentManager for a specific Block.
       *
       * @param name the name of the block
       * @param entry the BlockEntry
       * @return the created ComponentManager
       */
      public ComponentManager createComponentManager( String name, Entry entry )
          throws ComponentManagerException
      {
          final DefaultComponentManager componentManager = new DefaultComponentManager();       
          final RoleEntry[] roleEntrys = ((BlockEntry)entry).getRoleEntrys();
          
          for( int i = 0; i < roleEntrys.length; i++ )
          {
              final String dependencyName = roleEntrys[ i ].getName();
  
              try
              {
                  //dependency should NEVER be null here as it 
                  //is validated at entry time
                  final BlockEntry dependency = 
                      (BlockEntry)m_serverApplication.getEntry( dependencyName );
                  componentManager.put( roleEntrys[ i ].getRole(), dependency.getBlock() );
              }
              catch( final ContainerException ce ) {}
          }
          
          return componentManager;
      }
  }
  
  
  
  1.1                  jakarta-avalon-phoenix/src/java/org/apache/phoenix/engine/facilities/DefaultConfigurationRepository.java
  
  Index: DefaultConfigurationRepository.java
  ===================================================================
  /*
   * Copyright (C) The Apache Software Foundation. All rights reserved.
   *
   * This software is published under the terms of the Apache Software License
   * version 1.1, a copy of which has been included with this distribution in
   * the LICENSE file.
   */
  package org.apache.phoenix.engine.facilities;
  
  import org.apache.avalon.atlantis.Facility;
  import org.apache.avalon.camelot.Entry;
  import org.apache.avalon.camelot.pipeline.ConfigurationRepository;
  import org.apache.avalon.configuration.Configuration;
  import org.apache.avalon.configuration.ConfigurationException;
  import org.apache.phoenix.engine.blocks.BlockEntry;
  
  /**
   * Repository from which all configuration data is retrieved.
   *
   * @author <a href="mailto:donaldp@apache.org">Peter Donald</a>
   */
  public class DefaultConfigurationRepository
      implements Facility, ConfigurationRepository
  {
      public Configuration getConfiguration( String name, Entry entry ) 
          throws ConfigurationException
      {
          final BlockEntry blockEntry = (BlockEntry)entry;
          return blockEntry.getConfiguration();
      }
  }
  
  
  
  1.1                  jakarta-avalon-phoenix/src/java/org/apache/phoenix/engine/facilities/DefaultContextBuilder.java
  
  Index: DefaultContextBuilder.java
  ===================================================================
  /*
   * Copyright (C) The Apache Software Foundation. All rights reserved.
   *
   * This software is published under the terms of the Apache Software License
   * version 1.1, a copy of which has been included with this distribution in
   * the LICENSE file.
   */
  package org.apache.phoenix.engine.facilities;
  
  import java.io.File;
  import org.apache.avalon.AbstractLoggable;
  import org.apache.avalon.ComponentManager;
  import org.apache.avalon.ComponentManagerException;
  import org.apache.avalon.Composer;
  import org.apache.avalon.Context;
  import org.apache.avalon.Contextualizable;
  import org.apache.avalon.DefaultContext;
  import org.apache.avalon.atlantis.Facility;
  import org.apache.avalon.camelot.Entry;
  import org.apache.avalon.camelot.pipeline.ContextBuilder;
  import org.apache.avalon.util.thread.ThreadManager;
  import org.apache.phoenix.BlockContext;
  import org.apache.phoenix.engine.SarContextResources;
  import org.apache.phoenix.engine.blocks.DefaultBlockContext;
  
  /**
   * Component responsible for building context information for block.
   *
   * @author <a href="mailto:donaldp@apache.org">Peter Donald</a>
   */
  public class DefaultContextBuilder
      extends AbstractLoggable
      implements Facility, ContextBuilder, Contextualizable, Composer
  {
      //context used to setup hosted blocks
      protected DefaultContext           m_baseBlockContext;
  
      //thread manager used to build contexts with
      protected ThreadManager            m_threadManager;
  
      public void contextualize( final Context context )
      {
          final File baseDirectory = (File)context.get( SarContextResources.APP_HOME_DIR );
          final String name = (String)context.get( SarContextResources.APP_NAME );
          
          //base contxt that all block contexts inherit from 
          final DefaultContext blockContext = new DefaultContext();
          blockContext.put( BlockContext.APP_NAME, name );
          blockContext.put( BlockContext.APP_HOME_DIR, baseDirectory );
          m_baseBlockContext = blockContext;
      }
  
      public void compose( final ComponentManager componentManager )
          throws ComponentManagerException
      {
          m_threadManager = (ThreadManager)componentManager.
              lookup( "org.apache.avalon.util.thread.ThreadManager" );
      }
  
      public Context createContext( String name, Entry entry )
      {
          final DefaultBlockContext context =
              new DefaultBlockContext( getLogger(), m_threadManager, m_baseBlockContext );
          context.put( BlockContext.NAME, name );
          return context;        
      }
  }
  
  
  
  1.1                  jakarta-avalon-phoenix/src/java/org/apache/phoenix/engine/facilities/DefaultLogManager.java
  
  Index: DefaultLogManager.java
  ===================================================================
  /*
   * Copyright (C) The Apache Software Foundation. All rights reserved.
   *
   * This software is published under the terms of the Apache Software License
   * version 1.1, a copy of which has been included  with this distribution in
   * the LICENSE file.
   */
  package org.apache.phoenix.engine.facilities;
  
  import java.io.File;
  import java.io.IOException;
  import java.lang.reflect.InvocationTargetException;
  import java.lang.reflect.Method;
  import java.util.Iterator;
  import org.apache.avalon.AbstractLoggable;
  import org.apache.avalon.Context;
  import org.apache.avalon.Contextualizable;
  import org.apache.avalon.atlantis.Facility;
  import org.apache.avalon.configuration.Configurable;
  import org.apache.avalon.configuration.Configuration;
  import org.apache.avalon.configuration.ConfigurationException;
  import org.apache.avalon.util.log.AvalonLogFormatter;
  import org.apache.log.Category;
  import org.apache.log.LogKit;
  import org.apache.log.LogTarget;
  import org.apache.log.output.FileOutputLogTarget;
  
  /**
   * Component responsible for managing logs.
   *
   * @author <a href="mailto:donaldp@apache.org">Peter Donald</a>
   */
  public class DefaultLogManager
      extends AbstractLoggable
      implements Facility, Contextualizable, Configurable
  {
      protected String        m_baseName;
      protected File          m_baseDirectory;
  
      public void contextualize( final Context context )
      {
          m_baseName = (String)context.get( "name" );
          if( null == m_baseName ) m_baseName = "<base>";
  
          m_baseDirectory = (File)context.get( "directory" );
          if( null == m_baseDirectory ) m_baseDirectory = new File( "." );
      }
  
      public void configure( final Configuration configuration )
          throws ConfigurationException
      {
          final Configuration[] targets = configuration.getChildren( "log-target" );
          configureTargets( m_baseName, m_baseDirectory, targets );
          
          final Configuration[] categories = configuration.getChildren( "category" );
          configureCategories( m_baseName, categories );
  
          /*
            final String logPriority = configuration.getChild( "global-priority" ).getValue();
            final Priority.Enum priority = LogKit.getPriorityForName( logPriority );
            LogKit.setGlobalPriority( priority );
          */
      }
    
      protected void configureTargets( final String baseName, 
                                       final File baseDirectory, 
                                       final Configuration[] targets )
          throws ConfigurationException
      {
          for( int i = 0; i < targets.length; i++ )
          {
              final Configuration target = targets[ i ];
              final String name = baseName + '.' + target.getAttribute( "name" );
              String location = target.getAttribute( "location" ).trim();
              final String format = target.getAttribute( "format", null );
              
              if( '/' == location.charAt( 0 ) )
              {
                  location = location.substring( 1 );
              }
              
              final File file = new File( baseDirectory, location );
              
              final FileOutputLogTarget logTarget = new FileOutputLogTarget();
              final AvalonLogFormatter formatter = new AvalonLogFormatter();
              formatter.setFormat( "%{time} [%7.7{priority}] <<%{category}>> " +
                                   "(%{context}): %{message}\\n%{throwable}" );
              logTarget.setFormatter( formatter );
              
              try { logTarget.setFilename( file.getAbsolutePath() ); }
              catch( final IOException ioe )
              {
                  throw new ConfigurationException( "Error initializing log files", ioe );
              }
              
              if( null != format ) 
              {
                  logTarget.setFormat( format );
              }
              
              LogKit.addLogTarget( name, logTarget );
          }
      }
      
      protected void configureCategories( final String baseName, final Configuration[] categories )
          throws ConfigurationException
      {
          for( int i = 0; i < categories.length; i++ )
          {
              final Configuration category = categories[ i ];
              String name = category.getAttribute( "name" );
              final String target = baseName + '.' + category.getAttribute( "target" );
              final String priority = category.getAttribute( "priority" );
              
              if( name.trim().equals( "" ) )
              {
                  name = baseName;
              }
              else
              {
                  name = baseName + '.' + name;
              }
              
              final Category logCategory = 
                  LogKit.createCategory( name, LogKit.getPriorityForName( priority ) );
              final LogTarget logTarget = LogKit.getLogTarget( target );
              LogTarget logTargets[] = null;
              
              if( null != target ) logTargets = new LogTarget[] { logTarget };
              
              LogKit.createLogger( logCategory, logTargets );    
          }
      }
  }
  
  
  
  1.1                  jakarta-avalon-phoenix/src/java/org/apache/phoenix/engine/facilities/DefaultLoggerBuilder.java
  
  Index: DefaultLoggerBuilder.java
  ===================================================================
  /*
   * Copyright (C) The Apache Software Foundation. All rights reserved.
   *
   * This software is published under the terms of the Apache Software License
   * version 1.1, a copy of which has been included with this distribution in
   * the LICENSE file.
   */
  package org.apache.phoenix.engine.facilities;
  
  import org.apache.avalon.AbstractLoggable;
  import org.apache.avalon.atlantis.Facility;
  import org.apache.avalon.camelot.Entry;
  import org.apache.avalon.camelot.pipeline.LoggerBuilder;
  import org.apache.log.Logger;
  
  /**
   * Component responsible for building logger for entry.
   *
   * @author <a href="mailto:donaldp@apache.org">Peter Donald</a>
   */
  public class DefaultLoggerBuilder
      extends AbstractLoggable
      implements LoggerBuilder, Facility
  {
      public Logger createLogger( final String name, final Entry entry )
      {
          return  getLogger().getChildLogger( name );
      }
  }
  
  
  
  1.1                  jakarta-avalon-phoenix/src/java/org/apache/phoenix/engine/facilities/DefaultPolicy.java
  
  Index: DefaultPolicy.java
  ===================================================================
  /* 
   * Copyright (C) The Apache Software Foundation. All rights reserved. 
   * 
   * This software is published under the terms of the Apache Software License 
   * version 1.1, a copy of which has been included with this distribution in 
   * the LICENSE file. 
   */
  package org.apache.phoenix.engine.facilities;
  
  import java.io.File;
  import java.io.InputStream;
  import java.lang.reflect.Constructor;
  import java.net.MalformedURLException;
  import java.net.URL;
  import java.security.KeyStore;
  import java.security.KeyStoreException;
  import java.security.Permission;
  import java.security.PermissionCollection;
  import java.security.Permissions;
  import java.security.UnresolvedPermission;
  import java.security.cert.Certificate;
  import java.util.ArrayList;
  import java.util.HashMap;
  import java.util.Hashtable;
  import java.util.Iterator;
  import java.util.PropertyPermission;
  import java.util.StringTokenizer;
  import org.apache.avalon.Component;
  import org.apache.avalon.Context;
  import org.apache.avalon.Contextualizable;
  import org.apache.avalon.DefaultContext;
  import org.apache.avalon.Initializable;
  import org.apache.avalon.atlantis.Facility;
  import org.apache.avalon.configuration.Configurable;
  import org.apache.avalon.configuration.Configuration;
  import org.apache.avalon.configuration.ConfigurationException;
  import org.apache.avalon.util.PropertyException;
  import org.apache.avalon.util.PropertyUtil;
  import org.apache.avalon.util.security.AbstractPolicy;
  
  /**
   * Policy that extracts information from policy files.
   * 
   * @author <a href="mailto:donaldp@apache.org">Peter Donald</a>
   */
  public class DefaultPolicy
      extends AbstractPolicy
      implements Facility, Contextualizable, Configurable, Initializable
  {
      protected DefaultContext    m_context;
  
      public void contextualize( final Context context )
      {
          m_context = new DefaultContext( System.getProperties(), context );
          m_context.put( "/", File.separator );
      }
  
      public void configure( final Configuration configuration )
          throws ConfigurationException
      {
          final Configuration[] keyStoreConfigurations = configuration.getChildren( "keystore" );
          final HashMap keyStores = configureKeyStores( keyStoreConfigurations );
  
          final Configuration[] grants = configuration.getChildren( "grant" );
          configureGrants( grants, keyStores );
      }
  
      public void init()
          throws Exception
      {
          //these properties straight out ot ${java.home}/lib/security/java.policy
          final Permissions permissions = createPermissionSetFor( "file:/-", null );
  
          permissions.add( new PropertyPermission( "os.name", "read" ) );
          permissions.add( new PropertyPermission( "os.arch", "read" ) );
          permissions.add( new PropertyPermission( "os.version", "read" ) );
          permissions.add( new PropertyPermission( "file.separator", "read" ) );
          permissions.add( new PropertyPermission( "path.separator", "read" ) );
          permissions.add( new PropertyPermission( "line.separator", "read" ) );
          
          permissions.add( new PropertyPermission( "java.version", "read" ) );
          permissions.add( new PropertyPermission( "java.vendor", "read" ) );
          permissions.add( new PropertyPermission( "java.vendor.url", "read" ) );
          
          permissions.add( new PropertyPermission( "java.class.version", "read" ) );
          permissions.add( new PropertyPermission( "java.vm.version", "read" ) );
          permissions.add( new PropertyPermission( "java.vm.vendor", "read" ) );
          permissions.add( new PropertyPermission( "java.vm.name", "read" ) );
          
          permissions.add( new PropertyPermission( "java.specification.version", "read" ) );
          permissions.add( new PropertyPermission( "java.specification.vendor", "read" ) );
          permissions.add( new PropertyPermission( "java.specification.name", "read" ) );
          permissions.add( new PropertyPermission( "java.vm.specification.version", "read" ) );
          permissions.add( new PropertyPermission( "java.vm.specification.vendor", "read" ) );
          permissions.add( new PropertyPermission( "java.vm.specification.name", "read" ) );
      }
  
      protected HashMap configureKeyStores( final Configuration[] configurations )
          throws ConfigurationException
      {
          final HashMap keyStores = new HashMap();
  
          for( int i = 0; i < configurations.length; i++ )
          {
              final Configuration configuration = configurations[ i ];
              final String type = configuration.getAttribute( "type" );
              final String location = configuration.getAttribute( "location" );
              final String name = configuration.getAttribute( "name" );
  
              try
              {
                  final KeyStore keyStore = KeyStore.getInstance( type );
                  final URL url = new URL( location );
                  final InputStream ins = url.openStream();
                  
                  keyStore.load( ins, null );
  
                  keyStores.put( name, keyStore );
              }
              catch( final Exception e )
              {
                  throw new ConfigurationException( "Error configuring keystore " + name, e );
              }
          }
  
          return keyStores;
      }
      
      protected void configureGrants( final Configuration[] configurations, 
                                      final HashMap keyStores )
          throws ConfigurationException
      {
          for( int i = 0; i < configurations.length; i++ )
          {
              configureGrant( configurations[ i ], keyStores );
          }
      }
  
      protected void configureGrant( final Configuration configuration, final HashMap keyStores )
          throws ConfigurationException
      {
          //<grant signed-by="Fred" code-base="file:${sar.home}/blocks/*" key-store="foo-keystore">
          //<permission class="java.io.FilePermission" target="/tmp/*" action="read,write" />
          //</grant>
  
          final String signedBy = configuration.getAttribute( "signed-by", null );
          final String keyStoreName = configuration.getAttribute( "key-store", null );
  
          String codeBase = configuration.getAttribute( "code-base", null );
          if( null != codeBase )
          {
              codeBase = expand( codeBase );
          }
  
          final Certificate[] signers = getSigners( signedBy, keyStoreName, keyStores );
  
          Permissions permissions = null;
  
          try { permissions = createPermissionSetFor( codeBase, signers ); }
          catch( final MalformedURLException mue )
          {
              throw new ConfigurationException( "Malformed code-base " + codeBase, mue );
          }
  
          
          configurePermissions( configuration.getChildren( "permission" ), 
                                permissions,
                                keyStores );
      }
  
      protected void configurePermissions( final Configuration[] configurations, 
                                           final Permissions permissions,
                                           final HashMap keyStores )
          throws ConfigurationException
      {
          for( int i = 0; i < configurations.length; i++ )
          {
              configurePermission( configurations[ i ], permissions, keyStores );
          }
      }
  
      protected void configurePermission( final Configuration configuration,
                                          final Permissions permissions,
                                          final HashMap keyStores )
          throws ConfigurationException
      {
          final String type = configuration.getAttribute( "class" );
          final String actions = configuration.getAttribute( "actions", null );
          final String signedBy = configuration.getAttribute( "signed-by", null );
          final String keyStoreName = configuration.getAttribute( "key-store", null );
  
          String target = configuration.getAttribute( "target", null );
          if( null != target )
          {
              target = expand( target );
          }
  
          final Certificate[] signers = getSigners( signedBy, keyStoreName, keyStores );
          final Permission permission = createPermission( type, target, actions, signers );
  
          permissions.add( permission );
      }
  
      protected String expand( final String value )
          throws ConfigurationException
      {
          try
          {
              final Object resolvedValue = PropertyUtil.resolveProperty( value, m_context, false );
              return resolvedValue.toString();
          }
          catch( final PropertyException pe )
          {
              throw new ConfigurationException( "Error resolving property " + value, pe );
          }
      }
  
      protected Permission createPermission( final String type, 
                                             final String target, 
                                             final String actions, 
                                             final Certificate[] signers )
          throws ConfigurationException
      {
          if( null != signers ) 
          {
              return createUnresolvedPermission( type, target, actions, signers );
          }
          
          try
          {
              final Class c = Class.forName( type );
              
              Class paramClasses[] = null;
              Object params[] = null;
  
              if( null == actions && null == target )
              {
                  paramClasses = new Class[ 0 ];
                  params = new Object[ 0 ];
              }
              else if( null == actions ) 
              {
                  paramClasses = new Class[1];
                  paramClasses[0] = String.class;
                  params = new Object[1];
                  params[0] = target;
              }
              else
              {
                  paramClasses = new Class[2];
                  paramClasses[0] = String.class;
                  paramClasses[1] = String.class;
                  params = new Object[2];
                  params[0] = target;
                  params[1] = actions;
              }
              
              final Constructor constructor = c.getConstructor( paramClasses );
              final Object o = constructor.newInstance( params );
              return (Permission)o;                
          }
          catch( final ClassNotFoundException cnfe )
          {
              return createUnresolvedPermission( type, target, actions, signers );
          }
          catch( final Exception e )
          {
              throw new ConfigurationException( "Failed to create permission " + type + 
                                                " due to " + e, e );
          }
      }
      
      protected Permission createUnresolvedPermission( final String type, 
                                                       final String target, 
                                                       final String actions, 
                                                       final Certificate[] signers )
      {
          return new UnresolvedPermission( type, target, actions, signers );
      }
  
      protected Certificate[] getSigners( final String signedBy,
                                          String keyStoreName,
                                          final HashMap keyStores )
          throws ConfigurationException
      {
          if( null != signedBy && null == keyStoreName )
          {
              keyStoreName = "default";
          }
  
          Certificate[] signers = null;
           
          if( null != signedBy )
          {
              signers = getCertificates( signedBy, keyStoreName, keyStores );
          }
  
          return signers;
      }
  
      protected Certificate[] getCertificates( final String signedBy, 
                                               final String keyStoreName,
                                               final HashMap keyStores )
          throws ConfigurationException
      {
          final KeyStore keyStore = (KeyStore)keyStores.get( keyStoreName );
          
          if( null == keyStore )
          {
              throw new ConfigurationException( "Unable to aquire keyStore " + keyStoreName );
          }
  
          final ArrayList certificateSet = new ArrayList();
  
          final StringTokenizer tokenizer = new StringTokenizer( signedBy, "," );
          
          while( tokenizer.hasMoreTokens() ) 
          {
              final String alias = ((String)tokenizer.nextToken()).trim();
              Certificate certificate = null;
              
              try { certificate = keyStore.getCertificate( alias ); }
              catch( final KeyStoreException kse )
              {
                  throw new ConfigurationException( "Error aquiring certificate " + alias,
                                                    kse );
              }
  
              if( null == certificate )
              {
                  throw new ConfigurationException( "Unable to locate alias " + alias + 
                                                    " in keystore named " + keyStoreName );
              }
  
              if( !certificateSet.contains( certificate ) ) 
              {
                  if( DEBUG ) getLogger().debug( "Certificate " + certificate );
                  certificateSet.add( certificate );
              }
          }
          
          return (Certificate[])certificateSet.toArray( new Certificate[ 0 ] );
      }
  }
  
  
  
  1.1                  jakarta-avalon-phoenix/src/java/org/apache/phoenix/engine/facilities/DefaultThreadManager.java
  
  Index: DefaultThreadManager.java
  ===================================================================
  /*
   * Copyright (C) The Apache Software Foundation. All rights reserved.
   *
   * This software is published under the terms of the Apache Software License
   * version 1.1, a copy of which has been included with this distribution in
   * the LICENSE file.
   */
  package org.apache.phoenix.engine.facilities;
  
  import java.util.Hashtable;
  import java.util.Iterator;
  import org.apache.avalon.AbstractLoggable;
  import org.apache.avalon.atlantis.Facility;
  import org.apache.avalon.configuration.Configurable;
  import org.apache.avalon.configuration.Configuration;
  import org.apache.avalon.configuration.ConfigurationException;
  import org.apache.avalon.util.thread.DefaultThreadPool;
  import org.apache.avalon.util.thread.ThreadManager;
  import org.apache.avalon.util.thread.ThreadPool;
  
  /**
   *
   *
   * @author <a href="mailto:fede@apache.org">Federico Barbieri</a>
   * @author <a href="mailto:donaldp@apache.org">Peter Donald</a>
   */
  public class DefaultThreadManager
      extends AbstractLoggable
      implements Facility, ThreadManager, Configurable 
  {
      protected final Hashtable       m_pools = new Hashtable();
  
      public void configure( final Configuration configuration )
          throws ConfigurationException
      {
          final Configuration[] groups = configuration.getChildren( "thread-group" );
          for( int i = 0; i < groups.length; i++ )
          {
              final Configuration group = groups[ i ];
  
              final String name = group.getChild( "name" ).getValue();            
              final int priority = group.getChild( "priority" ).getValueAsInt( 5 );
              final boolean isDaemon = group.getChild( "is-daemon" ).getValueAsBoolean( false );
  
              final int minThreads = group.getChild( "min-threads" ).getValueAsInt( 5 );
              final int maxThreads = group.getChild( "max-threads" ).getValueAsInt( 10 );
              final int minSpareThreads = group.getChild( "min-spare-threads" ).
                  getValueAsInt( maxThreads - minThreads );
  
              try
              {
                  final DefaultThreadPool threadPool = new DefaultThreadPool( name, maxThreads );
                  threadPool.setDaemon( isDaemon );
                  setupLogger( threadPool );
                  m_pools.put( name, threadPool );
              }
              catch( final Exception e )
              {
                  throw new ConfigurationException( "Error creating thread pool " + name,
                                                    e );
              }
          }
      }
  
      public ThreadPool getDefaultThreadPool()
      {
          return getThreadPool( "default" );
      }
  
      public ThreadPool getThreadPool( final String name ) 
      {
          final ThreadPool threadPool = (ThreadPool)m_pools.get( name );
  
          if( null == threadPool )
          {
              //Should this be a ComponentNotFoundException ????
              throw new IllegalArgumentException( "No such thread group " + name );
          }
  
          return threadPool;
      }
  }
  
  
  
  1.1                  jakarta-avalon-phoenix/src/java/org/apache/phoenix/engine/facilities/SarBlockFactory.java
  
  Index: SarBlockFactory.java
  ===================================================================
  /* 
   * Copyright (C) The Apache Software Foundation. All rights reserved. 
   * 
   * This software is published under the terms of the Apache Software License 
   * version 1.1, a copy of which has been included with this distribution in 
   * the LICENSE file. 
   */
  package org.apache.phoenix.engine.facilities;
  
  import java.net.URL;
  import org.apache.avalon.ComponentManager;
  import org.apache.avalon.ComponentManagerException;
  import org.apache.avalon.Composer;
  import org.apache.avalon.Initializable;
  import org.apache.avalon.camelot.DefaultFactory;
  import org.apache.avalon.camelot.DefaultLoader;
  import org.apache.avalon.camelot.Loader;
  
  /**
   * This component used to create blocks.
   *
   * @author <a href="mailto:donaldp@apache.org">Peter Donald</a>
   */
  class SarBlockFactory
      extends DefaultFactory
      implements Composer, Initializable
  {
      protected Loader            m_loader;
      protected ClassLoader       m_classLoader;
  
      public void compose( final ComponentManager componentManager )
          throws ComponentManagerException
      {
          m_classLoader = (ClassLoader)componentManager.lookup( "java.lang.ClassLoader" );
      }
  
      public void init()
          throws Exception
      {
          m_loader = new DefaultLoader( m_classLoader );
      }
  
      /**
       * Overidden so that there is only one Loader per Application rather than one per archive.
       *
       * @param url the url to archive that contains code (ignored)
       * @return the Loader
       */
      protected Loader getLoaderFor( final URL url )
      {
          return m_loader;
      }
  }
  
  
  
  1.1                  jakarta-avalon-phoenix/src/java/org/apache/phoenix/engine/facilities/SarClassLoader.java
  
  Index: SarClassLoader.java
  ===================================================================
  /* 
   * Copyright (C) The Apache Software Foundation. All rights reserved. 
   * 
   * This software is published under the terms of the Apache Software License 
   * version 1.1, a copy of which has been included with this distribution in 
   * the LICENSE file. 
   */
  package org.apache.phoenix.engine.facilities;
  
  import java.io.File;
  import java.net.MalformedURLException;
  import java.net.URL;
  import java.security.Policy;
  import org.apache.avalon.ComponentManager;
  import org.apache.avalon.ComponentManagerException;
  import org.apache.avalon.Composer;
  import org.apache.avalon.Context;
  import org.apache.avalon.Contextualizable;
  import org.apache.avalon.Initializable;
  import org.apache.avalon.atlantis.Facility;
  import org.apache.avalon.util.io.ExtensionFileFilter;
  import org.apache.avalon.util.security.PolicyClassLoader;
  import org.apache.phoenix.engine.SarContextResources;
  
  /**
   * This component creates blocks and blockInfos.
   *
   * @author <a href="mailto:donaldp@apache.org">Peter Donald</a>
   */
  public class SarClassLoader
      extends PolicyClassLoader
      implements Facility, Contextualizable, Composer, Initializable
  {
      protected File              m_baseDirectory;
  
      public SarClassLoader()
      {
          super( new URL[ 0 ], Thread.currentThread().getContextClassLoader(), null );
      }
  
      public void contextualize( final Context context )
      {
          m_baseDirectory = (File)context.get( SarContextResources.APP_HOME_DIR );
      }
  
      public void compose( final ComponentManager componentManager )
          throws ComponentManagerException
      {
          m_policy = (Policy)componentManager.lookup( "java.security.Policy" );
      }
  
      public void init()
          throws Exception
      {
          final File blockDir = 
              (new File( m_baseDirectory, "blocks" )).getAbsoluteFile();
          final File libDir = 
              (new File( m_baseDirectory, "lib" )).getAbsoluteFile();
          
          addURLs( blockDir, new String[] { ".bar" } );
          addURLs( libDir, new String[] { ".jar", ".zip" } );
      }
  
      protected void addURLs( final File directory, final String[] extentions )
          throws MalformedURLException
      {
          final ExtensionFileFilter filter = new ExtensionFileFilter( extentions );
          final File[] files = directory.listFiles( filter );
          if( null == files ) return;
          addURLs( files );
      }
  
      protected void addURLs( final File[] files )
          throws MalformedURLException
      {     
          for( int i = 0; i < files.length; i++ )
          {
              addURL( files[ i ].toURL() );
          }
      }
  
      public String toString()
      {
          final StringBuffer sb = new StringBuffer();
          sb.append( "ClassLoader[" );
  
          final URL[] urls = getURLs();
  
          for( int i = 0; i < urls.length; i++ )
          {
              sb.append( ' ' );
              sb.append( urls[ i ] );
          }
  
          sb.append( " ]" );
          return sb.toString();        
      }
  }
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: avalon-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: avalon-dev-help@jakarta.apache.org


Re: cvs commit: jakarta-avalon-phoenix/src/java/org/apache/phoenix/engine/facilitys DefaultComponentBuilder.java DefaultComponentManagerBuilder.java DefaultConfigurationRepository.java DefaultContextBuilder.java DefaultLogManager.java DefaultLoggerBuilder.

Posted by Eung-ju Park <co...@isoft.co.kr>.
Hi.
I found another spelling mistake. :-)

in /org/apache/phoenix/engine

$ grep Entrys *.java

My English dictionary  says plural of "entry" is "entries". ;-)

Good Luck.

----- Original Message -----
From: <do...@apache.org>
To: <ja...@apache.org>
Sent: Sunday, March 18, 2001 5:35 PM
Subject: cvs commit:
jakarta-avalon-phoenix/src/java/org/apache/phoenix/engine/facilitys
DefaultComponentBuilder.java DefaultComponentManagerBuilder.java
DefaultConfigurationRepository.java DefaultContextBuilder.java
DefaultLogManager.java DefaultLoggerBuilder.java DefaultPolicy.java
DefaultThreadManager.java SarBlockFactory.java SarClassLoader.java


> donaldp     01/03/18 00:35:07
>
>   Modified:    src/java/org/apache/phoenix/engine
>                         DefaultServerApplication.java
>   Added:       src/java/org/apache/phoenix/engine/facilities
>                         DefaultComponentBuilder.java
>                         DefaultComponentManagerBuilder.java
>                         DefaultConfigurationRepository.java
>                         DefaultContextBuilder.java DefaultLogManager.java
>                         DefaultLoggerBuilder.java DefaultPolicy.java
>                         DefaultThreadManager.java SarBlockFactory.java
>                         SarClassLoader.java
>   Removed:     src/java/org/apache/phoenix/engine/facilitys
>                         DefaultComponentBuilder.java
>                         DefaultComponentManagerBuilder.java
>                         DefaultConfigurationRepository.java
>                         DefaultContextBuilder.java DefaultLogManager.java
>                         DefaultLoggerBuilder.java DefaultPolicy.java
>                         DefaultThreadManager.java SarBlockFactory.java
>                         SarClassLoader.java
>   Log:
>   Change package name facilitys to facilities to fix spelling mistake ;)
>
>   Revision  Changes    Path
>   1.7       +9 -9
jakarta-avalon-phoenix/src/java/org/apache/phoenix/engine/DefaultServerAppli
cation.java
>
>   Index: DefaultServerApplication.java
>   ===================================================================
>   RCS file:
/home/cvs/jakarta-avalon-phoenix/src/java/org/apache/phoenix/engine/DefaultS
erverApplication.java,v
>   retrieving revision 1.6
>   retrieving revision 1.7
>   diff -u -r1.6 -r1.7
>   --- DefaultServerApplication.java 2001/02/28 08:28:32 1.6
>   +++ DefaultServerApplication.java 2001/03/18 08:35:02 1.7
>   @@ -39,15 +39,15 @@
>    import org.apache.phoenix.engine.blocks.BlockDAG;
>    import org.apache.phoenix.engine.blocks.BlockEntry;
>    import org.apache.phoenix.engine.blocks.RoleEntry;
>   -import org.apache.phoenix.engine.facilitys.DefaultComponentBuilder;
>   -import
org.apache.phoenix.engine.facilitys.DefaultComponentManagerBuilder;
>   -import
org.apache.phoenix.engine.facilitys.DefaultConfigurationRepository;
>   -import org.apache.phoenix.engine.facilitys.DefaultContextBuilder;
>   -import org.apache.phoenix.engine.facilitys.DefaultLogManager;
>   -import org.apache.phoenix.engine.facilitys.DefaultLoggerBuilder;
>   -import org.apache.phoenix.engine.facilitys.DefaultPolicy;
>   -import org.apache.phoenix.engine.facilitys.DefaultThreadManager;
>   -import org.apache.phoenix.engine.facilitys.SarClassLoader;
>   +import org.apache.phoenix.engine.facilities.DefaultComponentBuilder;
>   +import
org.apache.phoenix.engine.facilities.DefaultComponentManagerBuilder;
>   +import
org.apache.phoenix.engine.facilities.DefaultConfigurationRepository;
>   +import org.apache.phoenix.engine.facilities.DefaultContextBuilder;
>   +import org.apache.phoenix.engine.facilities.DefaultLogManager;
>   +import org.apache.phoenix.engine.facilities.DefaultLoggerBuilder;
>   +import org.apache.phoenix.engine.facilities.DefaultPolicy;
>   +import org.apache.phoenix.engine.facilities.DefaultThreadManager;
>   +import org.apache.phoenix.engine.facilities.SarClassLoader;
>    import org.apache.phoenix.engine.phases.DefaultPhase;
>    import org.apache.phoenix.engine.phases.Phase;
>    import org.apache.phoenix.engine.phases.Traversal;
>
>
>
>   1.1
jakarta-avalon-phoenix/src/java/org/apache/phoenix/engine/facilities/Default
ComponentBuilder.java
>
>   Index: DefaultComponentBuilder.java
>   ===================================================================
>   /*
>    * Copyright (C) The Apache Software Foundation. All rights reserved.
>    *
>    * This software is published under the terms of the Apache Software
License
>    * version 1.1, a copy of which has been included with this distribution
in
>    * the LICENSE file.
>    */
>   package org.apache.phoenix.engine.facilities;
>
>   import org.apache.avalon.AbstractLoggable;
>   import org.apache.avalon.Component;
>   import org.apache.avalon.ComponentManager;
>   import org.apache.avalon.ComponentManagerException;
>   import org.apache.avalon.Composer;
>   import org.apache.avalon.Initializable;
>   import org.apache.avalon.atlantis.ApplicationException;
>   import org.apache.avalon.atlantis.Facility;
>   import org.apache.avalon.camelot.Entry;
>   import org.apache.avalon.camelot.Factory;
>   import org.apache.avalon.camelot.FactoryException;
>   import org.apache.avalon.camelot.pipeline.ComponentBuilder;
>   import org.apache.log.Logger;
>   import org.apache.phoenix.Block;
>   import org.apache.phoenix.engine.blocks.BlockEntry;
>   import org.apache.phoenix.metainfo.BlockUtil;
>   import org.apache.phoenix.metainfo.ServiceInfo;
>
>   /**
>    * Component responsible for building componentManager information for
entry.
>    *
>    * @author <a href="mailto:donaldp@apache.org">Peter Donald</a>
>    */
>   public class DefaultComponentBuilder
>       extends AbstractLoggable
>       implements Facility, ComponentBuilder, Composer, Initializable
>   {
>       protected SarBlockFactory      m_factory = new SarBlockFactory();
>
>       public void setLogger( final Logger logger )
>       {
>           super.setLogger( logger );
>           setupLogger( m_factory, "<core>.factory" );
>       }
>
>       public void compose( final ComponentManager componentManager )
>           throws ComponentManagerException
>       {
>           m_factory.compose( componentManager );
>       }
>
>       public void init()
>           throws Exception
>       {
>           m_factory.init();
>       }
>
>       public Object createComponent( final String name, final Entry
entry )
>           throws Exception
>       {
>           getLogger().info( "Creating block " + name );
>
>           final BlockEntry blockEntry = (BlockEntry)entry;
>
>           Block block = null;
>
>           try { block = (Block)m_factory.create( blockEntry.getLocator(),
Block.class ); }
>           catch( final FactoryException fe )
>           {
>               throw new ApplicationException( "Failed to create block " +
name, fe );
>           }
>
>           getLogger().debug( "Created block " + block );
>           verifyBlockServices( name, blockEntry, block );
>
>           return block;
>       }
>
>       /**
>        * Verify that all the services that a block
>        * declares it provides are actually provided.
>        *
>        * @param name the name of block
>        * @param blockEntry the blockEntry
>        * @param block the Block
>        * @exception ApplicationException if verification fails
>        */
>       protected void verifyBlockServices( final String name,
>                                           final BlockEntry blockEntry,
>                                           final Block block )
>           throws ApplicationException
>       {
>           final ServiceInfo[] services =
blockEntry.getBlockInfo().getServices();
>           for( int i = 0; i < services.length; i++ )
>           {
>               if( false == BlockUtil.implementsService( block,
services[ i ] ) )
>               {
>                   final String message = "Block " + name + " fails to
implement " +
>                       "advertised service " + services[ i ];
>                   getLogger().warn( message );
>                   throw new ApplicationException( message );
>               }
>           }
>       }
>   }
>
>
>
>   1.1
jakarta-avalon-phoenix/src/java/org/apache/phoenix/engine/facilities/Default
ComponentManagerBuilder.java
>
>   Index: DefaultComponentManagerBuilder.java
>   ===================================================================
>   /*
>    * Copyright (C) The Apache Software Foundation. All rights reserved.
>    *
>    * This software is published under the terms of the Apache Software
License
>    * version 1.1, a copy of which has been included with this distribution
in
>    * the LICENSE file.
>    */
>   package org.apache.phoenix.engine.facilities;
>
>   import org.apache.avalon.ComponentManager;
>   import org.apache.avalon.ComponentManagerException;
>   import org.apache.avalon.Composer;
>   import org.apache.avalon.DefaultComponentManager;
>   import org.apache.avalon.atlantis.Facility;
>   import org.apache.avalon.camelot.ContainerException;
>   import org.apache.avalon.camelot.Entry;
>   import org.apache.avalon.camelot.pipeline.ComponentManagerBuilder;
>   import org.apache.phoenix.engine.ServerApplication;
>   import org.apache.phoenix.engine.blocks.BlockEntry;
>   import org.apache.phoenix.engine.blocks.RoleEntry;
>
>   /**
>    * Component responsible for building componentManager information for
entry.
>    *
>    * @author <a href="mailto:donaldp@apache.org">Peter Donald</a>
>    */
>   public class DefaultComponentManagerBuilder
>       implements Facility, ComponentManagerBuilder, Composer
>   {
>       file://container to get dependencies from
>       protected ServerApplication        m_serverApplication;
>
>       public void compose( final ComponentManager componentManager )
>           throws ComponentManagerException
>       {
>           m_serverApplication = (ServerApplication)componentManager.
>               lookup( "org.apache.phoenix.engine.ServerApplication" );
>       }
>
>       /**
>        * Build a ComponentManager for a specific Block.
>        *
>        * @param name the name of the block
>        * @param entry the BlockEntry
>        * @return the created ComponentManager
>        */
>       public ComponentManager createComponentManager( String name, Entry
entry )
>           throws ComponentManagerException
>       {
>           final DefaultComponentManager componentManager = new
DefaultComponentManager();
>           final RoleEntry[] roleEntrys =
((BlockEntry)entry).getRoleEntrys();
>
>           for( int i = 0; i < roleEntrys.length; i++ )
>           {
>               final String dependencyName = roleEntrys[ i ].getName();
>
>               try
>               {
>                   file://dependency should NEVER be null here as it
>                   file://is validated at entry time
>                   final BlockEntry dependency =
>
BlockEntry)m_serverApplication.getEntry( dependencyName );
>                   componentManager.put( roleEntrys[ i ].getRole(),
dependency.getBlock() );
>               }
>               catch( final ContainerException ce ) {}
>           }
>
>           return componentManager;
>       }
>   }
>
>
>
>   1.1
jakarta-avalon-phoenix/src/java/org/apache/phoenix/engine/facilities/Default
ConfigurationRepository.java
>
>   Index: DefaultConfigurationRepository.java
>   ===================================================================
>   /*
>    * Copyright (C) The Apache Software Foundation. All rights reserved.
>    *
>    * This software is published under the terms of the Apache Software
License
>    * version 1.1, a copy of which has been included with this distribution
in
>    * the LICENSE file.
>    */
>   package org.apache.phoenix.engine.facilities;
>
>   import org.apache.avalon.atlantis.Facility;
>   import org.apache.avalon.camelot.Entry;
>   import org.apache.avalon.camelot.pipeline.ConfigurationRepository;
>   import org.apache.avalon.configuration.Configuration;
>   import org.apache.avalon.configuration.ConfigurationException;
>   import org.apache.phoenix.engine.blocks.BlockEntry;
>
>   /**
>    * Repository from which all configuration data is retrieved.
>    *
>    * @author <a href="mailto:donaldp@apache.org">Peter Donald</a>
>    */
>   public class DefaultConfigurationRepository
>       implements Facility, ConfigurationRepository
>   {
>       public Configuration getConfiguration( String name, Entry entry )
>           throws ConfigurationException
>       {
>           final BlockEntry blockEntry = (BlockEntry)entry;
>           return blockEntry.getConfiguration();
>       }
>   }
>
>
>
>   1.1
jakarta-avalon-phoenix/src/java/org/apache/phoenix/engine/facilities/Default
ContextBuilder.java
>
>   Index: DefaultContextBuilder.java
>   ===================================================================
>   /*
>    * Copyright (C) The Apache Software Foundation. All rights reserved.
>    *
>    * This software is published under the terms of the Apache Software
License
>    * version 1.1, a copy of which has been included with this distribution
in
>    * the LICENSE file.
>    */
>   package org.apache.phoenix.engine.facilities;
>
>   import java.io.File;
>   import org.apache.avalon.AbstractLoggable;
>   import org.apache.avalon.ComponentManager;
>   import org.apache.avalon.ComponentManagerException;
>   import org.apache.avalon.Composer;
>   import org.apache.avalon.Context;
>   import org.apache.avalon.Contextualizable;
>   import org.apache.avalon.DefaultContext;
>   import org.apache.avalon.atlantis.Facility;
>   import org.apache.avalon.camelot.Entry;
>   import org.apache.avalon.camelot.pipeline.ContextBuilder;
>   import org.apache.avalon.util.thread.ThreadManager;
>   import org.apache.phoenix.BlockContext;
>   import org.apache.phoenix.engine.SarContextResources;
>   import org.apache.phoenix.engine.blocks.DefaultBlockContext;
>
>   /**
>    * Component responsible for building context information for block.
>    *
>    * @author <a href="mailto:donaldp@apache.org">Peter Donald</a>
>    */
>   public class DefaultContextBuilder
>       extends AbstractLoggable
>       implements Facility, ContextBuilder, Contextualizable, Composer
>   {
>       file://context used to setup hosted blocks
>       protected DefaultContext           m_baseBlockContext;
>
>       file://thread manager used to build contexts with
>       protected ThreadManager            m_threadManager;
>
>       public void contextualize( final Context context )
>       {
>           final File baseDirectory =
File)context.get( SarContextResources.APP_HOME_DIR );
>           final String name =
String)context.get( SarContextResources.APP_NAME );
>
>           file://base contxt that all block contexts inherit from
>           final DefaultContext blockContext = new DefaultContext();
>           blockContext.put( BlockContext.APP_NAME, name );
>           blockContext.put( BlockContext.APP_HOME_DIR, baseDirectory );
>           m_baseBlockContext = blockContext;
>       }
>
>       public void compose( final ComponentManager componentManager )
>           throws ComponentManagerException
>       {
>           m_threadManager = (ThreadManager)componentManager.
>               lookup( "org.apache.avalon.util.thread.ThreadManager" );
>       }
>
>       public Context createContext( String name, Entry entry )
>       {
>           final DefaultBlockContext context =
>               new DefaultBlockContext( getLogger(), m_threadManager,
m_baseBlockContext );
>           context.put( BlockContext.NAME, name );
>           return context;
>       }
>   }
>
>
>
>   1.1
jakarta-avalon-phoenix/src/java/org/apache/phoenix/engine/facilities/Default
LogManager.java
>
>   Index: DefaultLogManager.java
>   ===================================================================
>   /*
>    * Copyright (C) The Apache Software Foundation. All rights reserved.
>    *
>    * This software is published under the terms of the Apache Software
License
>    * version 1.1, a copy of which has been included  with this
distribution in
>    * the LICENSE file.
>    */
>   package org.apache.phoenix.engine.facilities;
>
>   import java.io.File;
>   import java.io.IOException;
>   import java.lang.reflect.InvocationTargetException;
>   import java.lang.reflect.Method;
>   import java.util.Iterator;
>   import org.apache.avalon.AbstractLoggable;
>   import org.apache.avalon.Context;
>   import org.apache.avalon.Contextualizable;
>   import org.apache.avalon.atlantis.Facility;
>   import org.apache.avalon.configuration.Configurable;
>   import org.apache.avalon.configuration.Configuration;
>   import org.apache.avalon.configuration.ConfigurationException;
>   import org.apache.avalon.util.log.AvalonLogFormatter;
>   import org.apache.log.Category;
>   import org.apache.log.LogKit;
>   import org.apache.log.LogTarget;
>   import org.apache.log.output.FileOutputLogTarget;
>
>   /**
>    * Component responsible for managing logs.
>    *
>    * @author <a href="mailto:donaldp@apache.org">Peter Donald</a>
>    */
>   public class DefaultLogManager
>       extends AbstractLoggable
>       implements Facility, Contextualizable, Configurable
>   {
>       protected String        m_baseName;
>       protected File          m_baseDirectory;
>
>       public void contextualize( final Context context )
>       {
>           m_baseName = (String)context.get( "name" );
>           if( null == m_baseName ) m_baseName = "<base>";
>
>           m_baseDirectory = (File)context.get( "directory" );
>           if( null == m_baseDirectory ) m_baseDirectory = new File( "." );
>       }
>
>       public void configure( final Configuration configuration )
>           throws ConfigurationException
>       {
>           final Configuration[] targets =
onfiguration.getChildren( "log-target" );
>           configureTargets( m_baseName, m_baseDirectory, targets );
>
>           final Configuration[] categories =
onfiguration.getChildren( "category" );
>           configureCategories( m_baseName, categories );
>
>           /*
>             final String logPriority =
onfiguration.getChild( "global-priority" ).getValue();
>             final Priority.Enum priority =
ogKit.getPriorityForName( logPriority );
>             LogKit.setGlobalPriority( priority );
>           */
>       }
>
>       protected void configureTargets( final String baseName,
>                                        final File baseDirectory,
>                                        final Configuration[] targets )
>           throws ConfigurationException
>       {
>           for( int i = 0; i < targets.length; i++ )
>           {
>               final Configuration target = targets[ i ];
>               final String name = baseName + '.' +
arget.getAttribute( "name" );
>               String location = target.getAttribute( "location" ).trim();
>               final String format = target.getAttribute( "format", null );
>
>               if( '/' == location.charAt( 0 ) )
>               {
>                   location = location.substring( 1 );
>               }
>
>               final File file = new File( baseDirectory, location );
>
>               final FileOutputLogTarget logTarget = new
FileOutputLogTarget();
>               final AvalonLogFormatter formatter = new
AvalonLogFormatter();
>               formatter.setFormat( "%{time} [%7.7{priority}]
<<%{category}>> " +
>                                    "(%{context}):
%{message}\\n%{throwable}" );
>               logTarget.setFormatter( formatter );
>
>               try { logTarget.setFilename( file.getAbsolutePath() ); }
>               catch( final IOException ioe )
>               {
>                   throw new ConfigurationException( "Error initializing
log files", ioe );
>               }
>
>               if( null != format )
>               {
>                   logTarget.setFormat( format );
>               }
>
>               LogKit.addLogTarget( name, logTarget );
>           }
>       }
>
>       protected void configureCategories( final String baseName, final
Configuration[] categories )
>           throws ConfigurationException
>       {
>           for( int i = 0; i < categories.length; i++ )
>           {
>               final Configuration category = categories[ i ];
>               String name = category.getAttribute( "name" );
>               final String target = baseName + '.' +
category.getAttribute( "target" );
>               final String priority = category.getAttribute( "priority" );
>
>               if( name.trim().equals( "" ) )
>               {
>                   name = baseName;
>               }
>               else
>               {
>                   name = baseName + '.' + name;
>               }
>
>               final Category logCategory =
>                   LogKit.createCategory( name,
ogKit.getPriorityForName( priority ) );
>               final LogTarget logTarget = LogKit.getLogTarget( target );
>               LogTarget logTargets[] = null;
>
>               if( null != target ) logTargets = new LogTarget[]
 logTarget };
>
>               LogKit.createLogger( logCategory, logTargets );
>           }
>       }
>   }
>
>
>
>   1.1
jakarta-avalon-phoenix/src/java/org/apache/phoenix/engine/facilities/Default
LoggerBuilder.java
>
>   Index: DefaultLoggerBuilder.java
>   ===================================================================
>   /*
>    * Copyright (C) The Apache Software Foundation. All rights reserved.
>    *
>    * This software is published under the terms of the Apache Software
License
>    * version 1.1, a copy of which has been included with this distribution
in
>    * the LICENSE file.
>    */
>   package org.apache.phoenix.engine.facilities;
>
>   import org.apache.avalon.AbstractLoggable;
>   import org.apache.avalon.atlantis.Facility;
>   import org.apache.avalon.camelot.Entry;
>   import org.apache.avalon.camelot.pipeline.LoggerBuilder;
>   import org.apache.log.Logger;
>
>   /**
>    * Component responsible for building logger for entry.
>    *
>    * @author <a href="mailto:donaldp@apache.org">Peter Donald</a>
>    */
>   public class DefaultLoggerBuilder
>       extends AbstractLoggable
>       implements LoggerBuilder, Facility
>   {
>       public Logger createLogger( final String name, final Entry entry )
>       {
>           return  getLogger().getChildLogger( name );
>       }
>   }
>
>
>
>   1.1
jakarta-avalon-phoenix/src/java/org/apache/phoenix/engine/facilities/Default
Policy.java
>
>   Index: DefaultPolicy.java
>   ===================================================================
>   /*
>    * Copyright (C) The Apache Software Foundation. All rights reserved.
>    *
>    * This software is published under the terms of the Apache Software
License
>    * version 1.1, a copy of which has been included with this distribution
in
>    * the LICENSE file.
>    */
>   package org.apache.phoenix.engine.facilities;
>
>   import java.io.File;
>   import java.io.InputStream;
>   import java.lang.reflect.Constructor;
>   import java.net.MalformedURLException;
>   import java.net.URL;
>   import java.security.KeyStore;
>   import java.security.KeyStoreException;
>   import java.security.Permission;
>   import java.security.PermissionCollection;
>   import java.security.Permissions;
>   import java.security.UnresolvedPermission;
>   import java.security.cert.Certificate;
>   import java.util.ArrayList;
>   import java.util.HashMap;
>   import java.util.Hashtable;
>   import java.util.Iterator;
>   import java.util.PropertyPermission;
>   import java.util.StringTokenizer;
>   import org.apache.avalon.Component;
>   import org.apache.avalon.Context;
>   import org.apache.avalon.Contextualizable;
>   import org.apache.avalon.DefaultContext;
>   import org.apache.avalon.Initializable;
>   import org.apache.avalon.atlantis.Facility;
>   import org.apache.avalon.configuration.Configurable;
>   import org.apache.avalon.configuration.Configuration;
>   import org.apache.avalon.configuration.ConfigurationException;
>   import org.apache.avalon.util.PropertyException;
>   import org.apache.avalon.util.PropertyUtil;
>   import org.apache.avalon.util.security.AbstractPolicy;
>
>   /**
>    * Policy that extracts information from policy files.
>    *
>    * @author <a href="mailto:donaldp@apache.org">Peter Donald</a>
>    */
>   public class DefaultPolicy
>       extends AbstractPolicy
>       implements Facility, Contextualizable, Configurable, Initializable
>   {
>       protected DefaultContext    m_context;
>
>       public void contextualize( final Context context )
>       {
>           m_context = new DefaultContext( System.getProperties(),
context );
>           m_context.put( "/", File.separator );
>       }
>
>       public void configure( final Configuration configuration )
>           throws ConfigurationException
>       {
>           final Configuration[] keyStoreConfigurations =
configuration.getChildren( "keystore" );
>           final HashMap keyStores =
onfigureKeyStores( keyStoreConfigurations );
>
>           final Configuration[] grants =
onfiguration.getChildren( "grant" );
>           configureGrants( grants, keyStores );
>       }
>
>       public void init()
>           throws Exception
>       {
>           file://these properties straight out ot
${java.home}/lib/security/java.policy
>           final Permissions permissions =
reatePermissionSetFor( "file:/-", null );
>
>           permissions.add( new PropertyPermission( "os.name", "read" ) );
>           permissions.add( new PropertyPermission( "os.arch", "read" ) );
>           permissions.add( new PropertyPermission( "os.version",
"read" ) );
>           permissions.add( new PropertyPermission( "file.separator",
"read" ) );
>           permissions.add( new PropertyPermission( "path.separator",
"read" ) );
>           permissions.add( new PropertyPermission( "line.separator",
"read" ) );
>
>           permissions.add( new PropertyPermission( "java.version",
"read" ) );
>           permissions.add( new PropertyPermission( "java.vendor",
"read" ) );
>           permissions.add( new PropertyPermission( "java.vendor.url",
"read" ) );
>
>           permissions.add( new PropertyPermission( "java.class.version",
"read" ) );
>           permissions.add( new PropertyPermission( "java.vm.version",
"read" ) );
>           permissions.add( new PropertyPermission( "java.vm.vendor",
"read" ) );
>           permissions.add( new PropertyPermission( "java.vm.name",
"read" ) );
>
>           permissions.add( new
ropertyPermission( "java.specification.version", "read" ) );
>           permissions.add( new
ropertyPermission( "java.specification.vendor", "read" ) );
>           permissions.add( new
ropertyPermission( "java.specification.name", "read" ) );
>           permissions.add( new
ropertyPermission( "java.vm.specification.version", "read" ) );
>           permissions.add( new
ropertyPermission( "java.vm.specification.vendor", "read" ) );
>           permissions.add( new
ropertyPermission( "java.vm.specification.name", "read" ) );
>       }
>
>       protected HashMap configureKeyStores( final Configuration[]
configurations )
>           throws ConfigurationException
>       {
>           final HashMap keyStores = new HashMap();
>
>           for( int i = 0; i < configurations.length; i++ )
>           {
>               final Configuration configuration = configurations[ i ];
>               final String type = configuration.getAttribute( "type" );
>               final String location =
onfiguration.getAttribute( "location" );
>               final String name = configuration.getAttribute( "name" );
>
>               try
>               {
>                   final KeyStore keyStore = KeyStore.getInstance( type );
>                   final URL url = new URL( location );
>                   final InputStream ins = url.openStream();
>
>                   keyStore.load( ins, null );
>
>                   keyStores.put( name, keyStore );
>               }
>               catch( final Exception e )
>               {
>                   throw new ConfigurationException( "Error configuring
keystore " + name, e );
>               }
>           }
>
>           return keyStores;
>       }
>
>       protected void configureGrants( final Configuration[]
configurations,
>                                       final HashMap keyStores )
>           throws ConfigurationException
>       {
>           for( int i = 0; i < configurations.length; i++ )
>           {
>               configureGrant( configurations[ i ], keyStores );
>           }
>       }
>
>       protected void configureGrant( final Configuration configuration,
final HashMap keyStores )
>           throws ConfigurationException
>       {
>           file://<grant signed-by="Fred"
code-base="file:${sar.home}/blocks/*" key-store="foo-keystore">
>           file://<permission class="java.io.FilePermission"
target="/tmp/*" action="read,write" />
>           file://</grant>
>
>           final String signedBy = configuration.getAttribute( "signed-by",
null );
>           final String keyStoreName =
onfiguration.getAttribute( "key-store", null );
>
>           String codeBase = configuration.getAttribute( "code-base",
null );
>           if( null != codeBase )
>           {
>               codeBase = expand( codeBase );
>           }
>
>           final Certificate[] signers = getSigners( signedBy,
keyStoreName, keyStores );
>
>           Permissions permissions = null;
>
>           try { permissions = createPermissionSetFor( codeBase,
signers ); }
>           catch( final MalformedURLException mue )
>           {
>               throw new ConfigurationException( "Malformed code-base " +
codeBase, mue );
>           }
>
>
>           configurePermissions( configuration.getChildren( "permission" ),
>                                 permissions,
>                                 keyStores );
>       }
>
>       protected void configurePermissions( final Configuration[]
configurations,
>                                            final Permissions permissions,
>                                            final HashMap keyStores )
>           throws ConfigurationException
>       {
>           for( int i = 0; i < configurations.length; i++ )
>           {
>               configurePermission( configurations[ i ], permissions,
keyStores );
>           }
>       }
>
>       protected void configurePermission( final Configuration
configuration,
>                                           final Permissions permissions,
>                                           final HashMap keyStores )
>           throws ConfigurationException
>       {
>           final String type = configuration.getAttribute( "class" );
>           final String actions = configuration.getAttribute( "actions",
null );
>           final String signedBy = configuration.getAttribute( "signed-by",
null );
>           final String keyStoreName =
onfiguration.getAttribute( "key-store", null );
>
>           String target = configuration.getAttribute( "target", null );
>           if( null != target )
>           {
>               target = expand( target );
>           }
>
>           final Certificate[] signers = getSigners( signedBy,
keyStoreName, keyStores );
>           final Permission permission = createPermission( type, target,
actions, signers );
>
>           permissions.add( permission );
>       }
>
>       protected String expand( final String value )
>           throws ConfigurationException
>       {
>           try
>           {
>               final Object resolvedValue =
ropertyUtil.resolveProperty( value, m_context, false );
>               return resolvedValue.toString();
>           }
>           catch( final PropertyException pe )
>           {
>               throw new ConfigurationException( "Error resolving property
" + value, pe );
>           }
>       }
>
>       protected Permission createPermission( final String type,
>                                              final String target,
>                                              final String actions,
>                                              final Certificate[] signers )
>           throws ConfigurationException
>       {
>           if( null != signers )
>           {
>               return createUnresolvedPermission( type, target, actions,
signers );
>           }
>
>           try
>           {
>               final Class c = Class.forName( type );
>
>               Class paramClasses[] = null;
>               Object params[] = null;
>
>               if( null == actions && null == target )
>               {
>                   paramClasses = new Class[ 0 ];
>                   params = new Object[ 0 ];
>               }
>               else if( null == actions )
>               {
>                   paramClasses = new Class[1];
>                   paramClasses[0] = String.class;
>                   params = new Object[1];
>                   params[0] = target;
>               }
>               else
>               {
>                   paramClasses = new Class[2];
>                   paramClasses[0] = String.class;
>                   paramClasses[1] = String.class;
>                   params = new Object[2];
>                   params[0] = target;
>                   params[1] = actions;
>               }
>
>               final Constructor constructor =
.getConstructor( paramClasses );
>               final Object o = constructor.newInstance( params );
>               return (Permission)o;
>           }
>           catch( final ClassNotFoundException cnfe )
>           {
>               return createUnresolvedPermission( type, target, actions,
signers );
>           }
>           catch( final Exception e )
>           {
>               throw new ConfigurationException( "Failed to create
permission " + type +
>                                                 " due to " + e, e );
>           }
>       }
>
>       protected Permission createUnresolvedPermission( final String type,
>                                                        final String
target,
>                                                        final String
actions,
>                                                        final Certificate[]
signers )
>       {
>           return new UnresolvedPermission( type, target, actions,
signers );
>       }
>
>       protected Certificate[] getSigners( final String signedBy,
>                                           String keyStoreName,
>                                           final HashMap keyStores )
>           throws ConfigurationException
>       {
>           if( null != signedBy && null == keyStoreName )
>           {
>               keyStoreName = "default";
>           }
>
>           Certificate[] signers = null;
>
>           if( null != signedBy )
>           {
>               signers = getCertificates( signedBy, keyStoreName,
keyStores );
>           }
>
>           return signers;
>       }
>
>       protected Certificate[] getCertificates( final String signedBy,
>                                                final String keyStoreName,
>                                                final HashMap keyStores )
>           throws ConfigurationException
>       {
>           final KeyStore keyStore =
(KeyStore)keyStores.get( keyStoreName );
>
>           if( null == keyStore )
>           {
>               throw new ConfigurationException( "Unable to aquire keyStore
" + keyStoreName );
>           }
>
>           final ArrayList certificateSet = new ArrayList();
>
>           final StringTokenizer tokenizer = new StringTokenizer( signedBy,
"," );
>
>           while( tokenizer.hasMoreTokens() )
>           {
>               final String alias = ((String)tokenizer.nextToken()).trim();
>               Certificate certificate = null;
>
>               try { certificate = keyStore.getCertificate( alias ); }
>               catch( final KeyStoreException kse )
>               {
>                   throw new ConfigurationException( "Error aquiring
certificate " + alias,
>                                                     kse );
>               }
>
>               if( null == certificate )
>               {
>                   throw new ConfigurationException( "Unable to locate
alias " + alias +
>                                                     " in keystore named "
+ keyStoreName );
>               }
>
>               if( !certificateSet.contains( certificate ) )
>               {
>                   if( DEBUG ) getLogger().debug( "Certificate " +
certificate );
>                   certificateSet.add( certificate );
>               }
>           }
>
>           return (Certificate[])certificateSet.toArray( new
Certificate[ 0 ] );
>       }
>   }
>
>
>
>   1.1
jakarta-avalon-phoenix/src/java/org/apache/phoenix/engine/facilities/Default
ThreadManager.java
>
>   Index: DefaultThreadManager.java
>   ===================================================================
>   /*
>    * Copyright (C) The Apache Software Foundation. All rights reserved.
>    *
>    * This software is published under the terms of the Apache Software
License
>    * version 1.1, a copy of which has been included with this distribution
in
>    * the LICENSE file.
>    */
>   package org.apache.phoenix.engine.facilities;
>
>   import java.util.Hashtable;
>   import java.util.Iterator;
>   import org.apache.avalon.AbstractLoggable;
>   import org.apache.avalon.atlantis.Facility;
>   import org.apache.avalon.configuration.Configurable;
>   import org.apache.avalon.configuration.Configuration;
>   import org.apache.avalon.configuration.ConfigurationException;
>   import org.apache.avalon.util.thread.DefaultThreadPool;
>   import org.apache.avalon.util.thread.ThreadManager;
>   import org.apache.avalon.util.thread.ThreadPool;
>
>   /**
>    *
>    *
>    * @author <a href="mailto:fede@apache.org">Federico Barbieri</a>
>    * @author <a href="mailto:donaldp@apache.org">Peter Donald</a>
>    */
>   public class DefaultThreadManager
>       extends AbstractLoggable
>       implements Facility, ThreadManager, Configurable
>   {
>       protected final Hashtable       m_pools = new Hashtable();
>
>       public void configure( final Configuration configuration )
>           throws ConfigurationException
>       {
>           final Configuration[] groups =
onfiguration.getChildren( "thread-group" );
>           for( int i = 0; i < groups.length; i++ )
>           {
>               final Configuration group = groups[ i ];
>
>               final String name = group.getChild( "name" ).getValue();
>               final int priority =
group.getChild( "priority" ).getValueAsInt( 5 );
>               final boolean isDaemon =
group.getChild( "is-daemon" ).getValueAsBoolean( false );
>
>               final int minThreads =
group.getChild( "min-threads" ).getValueAsInt( 5 );
>               final int maxThreads =
group.getChild( "max-threads" ).getValueAsInt( 10 );
>               final int minSpareThreads =
roup.getChild( "min-spare-threads" ).
>                   getValueAsInt( maxThreads - minThreads );
>
>               try
>               {
>                   final DefaultThreadPool threadPool = new
DefaultThreadPool( name, maxThreads );
>                   threadPool.setDaemon( isDaemon );
>                   setupLogger( threadPool );
>                   m_pools.put( name, threadPool );
>               }
>               catch( final Exception e )
>               {
>                   throw new ConfigurationException( "Error creating thread
pool " + name,
>                                                     e );
>               }
>           }
>       }
>
>       public ThreadPool getDefaultThreadPool()
>       {
>           return getThreadPool( "default" );
>       }
>
>       public ThreadPool getThreadPool( final String name )
>       {
>           final ThreadPool threadPool = (ThreadPool)m_pools.get( name );
>
>           if( null == threadPool )
>           {
>               file://Should this be a ComponentNotFoundException ????
>               throw new IllegalArgumentException( "No such thread group "
+ name );
>           }
>
>           return threadPool;
>       }
>   }
>
>
>
>   1.1
jakarta-avalon-phoenix/src/java/org/apache/phoenix/engine/facilities/SarBloc
kFactory.java
>
>   Index: SarBlockFactory.java
>   ===================================================================
>   /*
>    * Copyright (C) The Apache Software Foundation. All rights reserved.
>    *
>    * This software is published under the terms of the Apache Software
License
>    * version 1.1, a copy of which has been included with this distribution
in
>    * the LICENSE file.
>    */
>   package org.apache.phoenix.engine.facilities;
>
>   import java.net.URL;
>   import org.apache.avalon.ComponentManager;
>   import org.apache.avalon.ComponentManagerException;
>   import org.apache.avalon.Composer;
>   import org.apache.avalon.Initializable;
>   import org.apache.avalon.camelot.DefaultFactory;
>   import org.apache.avalon.camelot.DefaultLoader;
>   import org.apache.avalon.camelot.Loader;
>
>   /**
>    * This component used to create blocks.
>    *
>    * @author <a href="mailto:donaldp@apache.org">Peter Donald</a>
>    */
>   class SarBlockFactory
>       extends DefaultFactory
>       implements Composer, Initializable
>   {
>       protected Loader            m_loader;
>       protected ClassLoader       m_classLoader;
>
>       public void compose( final ComponentManager componentManager )
>           throws ComponentManagerException
>       {
>           m_classLoader =
ClassLoader)componentManager.lookup( "java.lang.ClassLoader" );
>       }
>
>       public void init()
>           throws Exception
>       {
>           m_loader = new DefaultLoader( m_classLoader );
>       }
>
>       /**
>        * Overidden so that there is only one Loader per Application rather
than one per archive.
>        *
>        * @param url the url to archive that contains code (ignored)
>        * @return the Loader
>        */
>       protected Loader getLoaderFor( final URL url )
>       {
>           return m_loader;
>       }
>   }
>
>
>
>   1.1
jakarta-avalon-phoenix/src/java/org/apache/phoenix/engine/facilities/SarClas
sLoader.java
>
>   Index: SarClassLoader.java
>   ===================================================================
>   /*
>    * Copyright (C) The Apache Software Foundation. All rights reserved.
>    *
>    * This software is published under the terms of the Apache Software
License
>    * version 1.1, a copy of which has been included with this distribution
in
>    * the LICENSE file.
>    */
>   package org.apache.phoenix.engine.facilities;
>
>   import java.io.File;
>   import java.net.MalformedURLException;
>   import java.net.URL;
>   import java.security.Policy;
>   import org.apache.avalon.ComponentManager;
>   import org.apache.avalon.ComponentManagerException;
>   import org.apache.avalon.Composer;
>   import org.apache.avalon.Context;
>   import org.apache.avalon.Contextualizable;
>   import org.apache.avalon.Initializable;
>   import org.apache.avalon.atlantis.Facility;
>   import org.apache.avalon.util.io.ExtensionFileFilter;
>   import org.apache.avalon.util.security.PolicyClassLoader;
>   import org.apache.phoenix.engine.SarContextResources;
>
>   /**
>    * This component creates blocks and blockInfos.
>    *
>    * @author <a href="mailto:donaldp@apache.org">Peter Donald</a>
>    */
>   public class SarClassLoader
>       extends PolicyClassLoader
>       implements Facility, Contextualizable, Composer, Initializable
>   {
>       protected File              m_baseDirectory;
>
>       public SarClassLoader()
>       {
>           super( new URL[ 0 ],
Thread.currentThread().getContextClassLoader(), null );
>       }
>
>       public void contextualize( final Context context )
>       {
>           m_baseDirectory =
File)context.get( SarContextResources.APP_HOME_DIR );
>       }
>
>       public void compose( final ComponentManager componentManager )
>           throws ComponentManagerException
>       {
>           m_policy =
Policy)componentManager.lookup( "java.security.Policy" );
>       }
>
>       public void init()
>           throws Exception
>       {
>           final File blockDir =
>               (new File( m_baseDirectory, "blocks" )).getAbsoluteFile();
>           final File libDir =
>               (new File( m_baseDirectory, "lib" )).getAbsoluteFile();
>
>           addURLs( blockDir, new String[] { ".bar" } );
>           addURLs( libDir, new String[] { ".jar", ".zip" } );
>       }
>
>       protected void addURLs( final File directory, final String[]
extentions )
>           throws MalformedURLException
>       {
>           final ExtensionFileFilter filter = new
xtensionFileFilter( extentions );
>           final File[] files = directory.listFiles( filter );
>           if( null == files ) return;
>           addURLs( files );
>       }
>
>       protected void addURLs( final File[] files )
>           throws MalformedURLException
>

>           for( int i = 0; i < files.length; i++ )
>           {
>               addURL( files[ i ].toURL() );
>           }
>       }
>
>       public String toString()
>       {
>           final StringBuffer sb = new StringBuffer();
>           sb.append( "ClassLoader[" );
>
>           final URL[] urls = getURLs();
>
>           for( int i = 0; i < urls.length; i++ )
>           {
>               sb.append( ' ' );
>               sb.append( urls[ i ] );
>           }
>
>           sb.append( " ]" );
>           return sb.toString();
>       }
>   }
>
>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: avalon-dev-unsubscribe@jakarta.apache.org
> For additional commands, e-mail: avalon-dev-help@jakarta.apache.org
>
>


---------------------------------------------------------------------
To unsubscribe, e-mail: avalon-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: avalon-dev-help@jakarta.apache.org