avalon-cvs mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From dona...@apache.org
Subject cvs commit: jakarta-avalon-phoenix/src/java/org/apache/avalon/phoenix/interfaces ApplicationContext.java Kernel.java
Date Fri, 06 Sep 2002 09:42:35 GMT
donaldp     2002/09/06 02:42:35

  Modified:    src/java/org/apache/avalon/phoenix BlockContext.java
               src/java/org/apache/avalon/phoenix/components/application
                        DefaultBlockContext.java
               src/java/org/apache/avalon/phoenix/components/classloader
                        DefaultPolicy.java
               src/java/org/apache/avalon/phoenix/components/deployer
                        DefaultDeployer.java
               src/java/org/apache/avalon/phoenix/components/kernel
                        DefaultApplicationContext.java DefaultKernel.java
                        SarEntry.java
               src/java/org/apache/avalon/phoenix/interfaces
                        ApplicationContext.java Kernel.java
  Added:       src/java/org/apache/avalon/phoenix/components/util
                        ResourceUtil.java
  Log:
  Implement BlockContext.getResourceAsStream() so that a block is capable of
  locating resources in the sar file. This method will retrieve the resource
  regardless of where it is located.
  
  This allows blocks to aquire resources regardless of where they are located;
  * in base directory
  * in work directory
  * in .sar file (in future)
  * in some vfs (in future)
  
  Revision  Changes    Path
  1.15      +13 -8     jakarta-avalon-phoenix/src/java/org/apache/avalon/phoenix/BlockContext.java
  
  Index: BlockContext.java
  ===================================================================
  RCS file: /home/cvs/jakarta-avalon-phoenix/src/java/org/apache/avalon/phoenix/BlockContext.java,v
  retrieving revision 1.14
  retrieving revision 1.15
  diff -u -r1.14 -r1.15
  --- BlockContext.java	31 Aug 2002 06:34:00 -0000	1.14
  +++ BlockContext.java	6 Sep 2002 09:42:35 -0000	1.15
  @@ -8,6 +8,7 @@
   package org.apache.avalon.phoenix;
   
   import java.io.File;
  +import java.io.InputStream;
   import org.apache.avalon.framework.context.Context;
   import org.apache.avalon.framework.logger.Logger;
   
  @@ -51,6 +52,18 @@
       void requestShutdown();
   
       /**
  +     * Retrieve a resource from the SAR file. The specified
  +     * name is relative the root of the archive. So you could
  +     * use it to retrieve a html page from within sar by loading
  +     * the resource named "data/main.html" or similar.
  +     * Names may be prefixed with '/' character.
  +     *
  +     * @param name the name of resource
  +     * @return the InputStream for resource or null if no such resource
  +     */
  +    InputStream getResourceAsStream( String name );
  +
  +    /**
        * Retrieve logger coresponding to named category.
        *
        * @return the logger
  @@ -99,14 +112,6 @@
        * getProxy( Object other )
        */
       //Object getProxy( Object other, Class[] interfaces );
  -
  -    /**
  -     * Retrieve a resource from the SAR file. The specified
  -     * name is relative the root of the archive. So you could
  -     * use it to retrieve a html page from within sar by loading
  -     * the resource named "data/main.html" or similar.
  -     */
  -    //InputStream getResourceAsStream( String name );
   
       /**
        * This method gives you access to a named ClassLoader. The ClassLoaders
  
  
  
  1.19      +6 -0      jakarta-avalon-phoenix/src/java/org/apache/avalon/phoenix/components/application/DefaultBlockContext.java
  
  Index: DefaultBlockContext.java
  ===================================================================
  RCS file: /home/cvs/jakarta-avalon-phoenix/src/java/org/apache/avalon/phoenix/components/application/DefaultBlockContext.java,v
  retrieving revision 1.18
  retrieving revision 1.19
  diff -u -r1.18 -r1.19
  --- DefaultBlockContext.java	31 Aug 2002 06:34:00 -0000	1.18
  +++ DefaultBlockContext.java	6 Sep 2002 09:42:35 -0000	1.19
  @@ -8,6 +8,7 @@
   package org.apache.avalon.phoenix.components.application;
   
   import java.io.File;
  +import java.io.InputStream;
   import org.apache.avalon.framework.context.ContextException;
   import org.apache.avalon.framework.logger.Logger;
   import org.apache.avalon.phoenix.BlockContext;
  @@ -77,6 +78,11 @@
       public void requestShutdown()
       {
           m_applicationContext.requestShutdown();
  +    }
  +
  +    public InputStream getResourceAsStream( final String name )
  +    {
  +        return m_applicationContext.getResourceAsStream( name );
       }
   
       /**
  
  
  
  1.12      +4 -51     jakarta-avalon-phoenix/src/java/org/apache/avalon/phoenix/components/classloader/DefaultPolicy.java
  
  Index: DefaultPolicy.java
  ===================================================================
  RCS file: /home/cvs/jakarta-avalon-phoenix/src/java/org/apache/avalon/phoenix/components/classloader/DefaultPolicy.java,v
  retrieving revision 1.11
  retrieving revision 1.12
  diff -u -r1.11 -r1.12
  --- DefaultPolicy.java	6 Aug 2002 11:57:39 -0000	1.11
  +++ DefaultPolicy.java	6 Sep 2002 09:42:35 -0000	1.12
  @@ -28,6 +28,7 @@
   import org.apache.avalon.framework.configuration.Configuration;
   import org.apache.avalon.framework.configuration.ConfigurationException;
   import org.apache.avalon.framework.context.DefaultContext;
  +import org.apache.avalon.phoenix.components.util.ResourceUtil;
   
   /**
    * Policy that extracts information from policy files.
  @@ -41,14 +42,6 @@
       private static final Resources REZ =
           ResourceManager.getPackageResources( DefaultPolicy.class );
   
  -    private static final String SAR_PROTOCOL = "sar:";
  -
  -    private static final String SAR_INF = SAR_PROTOCOL + "SAR-INF/";
  -
  -    private static final String CLASSES = SAR_INF + "classes";
  -
  -    private static final String LIB = SAR_INF + "lib";
  -
       private final File m_baseDirectory;
   
       private final File m_workDirectory;
  @@ -188,7 +181,9 @@
           if( null != codeBase )
           {
               codeBase = expand( codeBase );
  -            codeBase = expandSarURL( codeBase );
  +            codeBase = ResourceUtil.expandSarURL( codeBase,
  +                                                  m_baseDirectory,
  +                                                  m_workDirectory );
           }
   
           final Certificate[] signers = getSigners( signedBy, keyStoreName, keyStores );
  @@ -241,48 +236,6 @@
           final Permission permission = createPermission( type, target, actions, signers
);
   
           permissions.add( permission );
  -    }
  -
  -    /**
  -     * Expand any URLs with sar: protocol so that
  -     * they accurately match the actual location
  -     *
  -     * @param codeBase the input url
  -     * @return the result url, modified to file url if it
  -     *         is protocol "sar:"
  -     * @throws ConfigurationException if invalidly specified URL
  -     */
  -    private String expandSarURL( final String codeBase )
  -        throws ConfigurationException
  -    {
  -        if( codeBase.startsWith( SAR_PROTOCOL ) )
  -        {
  -            final String filename =
  -                codeBase.substring( 4 ).replace( '/', File.separatorChar );
  -            File baseDir = null;
  -            if( codeBase.startsWith( CLASSES )
  -                || codeBase.startsWith( LIB ) )
  -            {
  -                baseDir = m_workDirectory;
  -            }
  -            else
  -            {
  -                baseDir = m_baseDirectory;
  -            }
  -            final File file = new File( baseDir, filename );
  -            try
  -            {
  -                return file.toURL().toString();
  -            }
  -            catch( MalformedURLException e )
  -            {
  -                throw new ConfigurationException( e.getMessage(), e );
  -            }
  -        }
  -        else
  -        {
  -            return codeBase;
  -        }
       }
   
       private String expand( final String value )
  
  
  
  1.54      +5 -1      jakarta-avalon-phoenix/src/java/org/apache/avalon/phoenix/components/deployer/DefaultDeployer.java
  
  Index: DefaultDeployer.java
  ===================================================================
  RCS file: /home/cvs/jakarta-avalon-phoenix/src/java/org/apache/avalon/phoenix/components/deployer/DefaultDeployer.java,v
  retrieving revision 1.53
  retrieving revision 1.54
  diff -u -r1.53 -r1.54
  --- DefaultDeployer.java	6 Sep 2002 07:03:58 -0000	1.53
  +++ DefaultDeployer.java	6 Sep 2002 09:42:35 -0000	1.54
  @@ -337,7 +337,11 @@
                   m_logManager.createHierarchy( metaData, logs, classLoader );
   
               //Finally add application to kernel
  -            m_kernel.addApplication( metaData, classLoader, logger, environment );
  +            m_kernel.addApplication( metaData,
  +                                     installation.getWorkDirectory(),
  +                                     classLoader,
  +                                     logger,
  +                                     environment );
   
               m_installations.put( metaData.getName(), installation );
   
  
  
  
  1.29      +49 -0     jakarta-avalon-phoenix/src/java/org/apache/avalon/phoenix/components/kernel/DefaultApplicationContext.java
  
  Index: DefaultApplicationContext.java
  ===================================================================
  RCS file: /home/cvs/jakarta-avalon-phoenix/src/java/org/apache/avalon/phoenix/components/kernel/DefaultApplicationContext.java,v
  retrieving revision 1.28
  retrieving revision 1.29
  diff -u -r1.28 -r1.29
  --- DefaultApplicationContext.java	31 Aug 2002 06:34:00 -0000	1.28
  +++ DefaultApplicationContext.java	6 Sep 2002 09:42:35 -0000	1.29
  @@ -7,6 +7,10 @@
    */
   package org.apache.avalon.phoenix.components.kernel;
   
  +import java.io.File;
  +import java.io.FileInputStream;
  +import java.io.InputStream;
  +import java.io.FileNotFoundException;
   import java.util.HashMap;
   import org.apache.avalon.excalibur.i18n.ResourceManager;
   import org.apache.avalon.excalibur.i18n.Resources;
  @@ -18,6 +22,7 @@
   import org.apache.avalon.framework.service.ServiceException;
   import org.apache.avalon.framework.service.ServiceManager;
   import org.apache.avalon.framework.service.Serviceable;
  +import org.apache.avalon.phoenix.components.util.ResourceUtil;
   import org.apache.avalon.phoenix.interfaces.ApplicationContext;
   import org.apache.avalon.phoenix.interfaces.ConfigurationRepository;
   import org.apache.avalon.phoenix.interfaces.ConfigurationValidator;
  @@ -63,6 +68,7 @@
       private SystemManager m_blockManager;
   
       private final SarMetaData m_metaData;
  +    private final File m_workDirectory;
   
       /**
        * The kernel associate with context
  @@ -70,12 +76,31 @@
       private Kernel m_kernel;
   
       protected DefaultApplicationContext( final SarMetaData metaData,
  +                                         final File workDirectory,
                                            final ClassLoader classLoader,
                                            final Logger hierarchy )
       {
  +        if( null == metaData )
  +        {
  +            throw new NullPointerException( "metaData" );
  +        }
  +        if( null == classLoader )
  +        {
  +            throw new NullPointerException( "classLoader" );
  +        }
  +        if( null == hierarchy )
  +        {
  +            throw new NullPointerException( "hierarchy" );
  +        }
  +        if( null == workDirectory )
  +        {
  +            throw new NullPointerException( "workDirectory" );
  +        }
  +
           m_metaData = metaData;
           m_classLoader = classLoader;
           m_hierarchy = hierarchy;
  +        m_workDirectory = workDirectory;
   
           final DefaultThreadContextPolicy policy = new DefaultThreadContextPolicy();
           final HashMap map = new HashMap( 1 );
  @@ -99,6 +124,30 @@
           throws Exception
       {
           m_blockManager = getManagementContext();
  +    }
  +
  +    public InputStream getResourceAsStream( final String name )
  +    {
  +        final File file =
  +            ResourceUtil.getFileForResource( name,
  +                                             m_metaData.getHomeDirectory(),
  +                                             m_workDirectory );
  +        if( !file.exists() )
  +        {
  +            return null;
  +        }
  +        else
  +        {
  +            try
  +            {
  +                return new FileInputStream( file );
  +            }
  +            catch( FileNotFoundException e )
  +            {
  +                //Should never happen
  +                return null;
  +            }
  +        }
       }
   
       public SarMetaData getMetaData()
  
  
  
  1.79      +4 -1      jakarta-avalon-phoenix/src/java/org/apache/avalon/phoenix/components/kernel/DefaultKernel.java
  
  Index: DefaultKernel.java
  ===================================================================
  RCS file: /home/cvs/jakarta-avalon-phoenix/src/java/org/apache/avalon/phoenix/components/kernel/DefaultKernel.java,v
  retrieving revision 1.78
  retrieving revision 1.79
  diff -u -r1.78 -r1.79
  --- DefaultKernel.java	31 Aug 2002 06:34:00 -0000	1.78
  +++ DefaultKernel.java	6 Sep 2002 09:42:35 -0000	1.79
  @@ -8,6 +8,7 @@
   package org.apache.avalon.phoenix.components.kernel;
   
   import java.util.HashMap;
  +import java.io.File;
   import org.apache.avalon.excalibur.i18n.ResourceManager;
   import org.apache.avalon.excalibur.i18n.Resources;
   import org.apache.avalon.framework.CascadingException;
  @@ -237,6 +238,7 @@
       }
   
       public void addApplication( final SarMetaData metaData,
  +                                final File workDirectory,
                                   final ClassLoader classLoader,
                                   final Logger logger,
                                   final Configuration server )
  @@ -244,7 +246,7 @@
       {
           final String name = metaData.getName();
           final SarEntry entry =
  -            new SarEntry( metaData, classLoader, logger, server );
  +            new SarEntry( metaData, workDirectory, classLoader, logger, server );
           m_entries.put( name, entry );
   
           try
  @@ -267,6 +269,7 @@
   
           final DefaultApplicationContext context =
               new DefaultApplicationContext( metaData,
  +                                           entry.getWorkDirectory(),
                                              entry.getClassLoader(),
                                              entry.getLogger() );
   
  
  
  
  1.12      +27 -4     jakarta-avalon-phoenix/src/java/org/apache/avalon/phoenix/components/kernel/SarEntry.java
  
  Index: SarEntry.java
  ===================================================================
  RCS file: /home/cvs/jakarta-avalon-phoenix/src/java/org/apache/avalon/phoenix/components/kernel/SarEntry.java,v
  retrieving revision 1.11
  retrieving revision 1.12
  diff -u -r1.11 -r1.12
  --- SarEntry.java	6 Aug 2002 11:57:40 -0000	1.11
  +++ SarEntry.java	6 Sep 2002 09:42:35 -0000	1.12
  @@ -11,6 +11,7 @@
   import org.apache.avalon.framework.logger.Logger;
   import org.apache.avalon.phoenix.interfaces.Application;
   import org.apache.avalon.phoenix.metadata.SarMetaData;
  +import java.io.File;
   
   /**
    * This is the structure describing each server application before it is loaded.
  @@ -20,24 +21,46 @@
   final class SarEntry
   {
       private SarMetaData m_metaData;
  -
       private Configuration m_configuration;
  -
       private ClassLoader m_classLoader;
  -
       private Application m_application;
  -
       private Logger m_logger;
  +    private File m_workDirectory;
  +
   
       protected SarEntry( final SarMetaData metaData,
  +                        final File workDirectory,
                           final ClassLoader classLoader,
                           final Logger logger,
                           final Configuration configuration )
       {
  +        if( null == metaData )
  +        {
  +            throw new NullPointerException( "metaData" );
  +        }
  +        if( null == classLoader )
  +        {
  +            throw new NullPointerException( "classLoader" );
  +        }
  +        if( null == logger )
  +        {
  +            throw new NullPointerException( "logger" );
  +        }
  +        if( null == workDirectory )
  +        {
  +            throw new NullPointerException( "workDirectory" );
  +        }
  +
           m_metaData = metaData;
           m_classLoader = classLoader;
           m_logger = logger;
           m_configuration = configuration;
  +        m_workDirectory = workDirectory;
  +    }
  +
  +    public File getWorkDirectory()
  +    {
  +        return m_workDirectory;
       }
   
       public Application getApplication()
  
  
  
  1.1                  jakarta-avalon-phoenix/src/java/org/apache/avalon/phoenix/components/util/ResourceUtil.java
  
  Index: ResourceUtil.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.txt file.
   */
  package org.apache.avalon.phoenix.components.util;
  
  import org.apache.avalon.framework.configuration.ConfigurationException;
  import java.io.File;
  import java.net.MalformedURLException;
  
  /**
   * A utility class for working with resources in default sar layout.
   *
   * @author <a href="mailto:peter at apache.org">Peter Donald</a>
   * @version $Revision: 1.1 $ $Date: 2002/09/06 09:42:35 $
   */
  public class ResourceUtil
  {
      private static final String SAR_PROTOCOL = "sar:";
      private static final String SAR_INF = "SAR-INF/";
      private static final String CLASSES = SAR_INF + "classes";
      private static final String LIB = SAR_INF + "lib";
  
      /**
       * Expand any URLs with sar: protocol so that
       * they accurately match the actual location
       *
       * @param codeBase the input url
       * @return the result url, modified to file url if it
       *         is protocol "sar:"
       * @throws ConfigurationException if invalidly specified URL
       */
      public static String expandSarURL( final String codeBase,
                                         final File baseDirectory,
                                         final File workDirectory )
          throws ConfigurationException
      {
          if( codeBase.startsWith( SAR_PROTOCOL ) )
          {
              final File file =
                  getFileForResource( codeBase.substring( 4 ),
                                      baseDirectory,
                                      workDirectory );
              try
              {
                  return file.toURL().toString();
              }
              catch( MalformedURLException e )
              {
                  throw new ConfigurationException( e.getMessage(), e );
              }
          }
          else
          {
              return codeBase;
          }
      }
  
      public static File getFileForResource( final String location,
                                             final File baseDirectory,
                                             final File workDirectory )
      {
          String filename =
              location.replace( '/', File.separatorChar );
          if( filename.startsWith( "/" ) )
          {
              filename = filename.substring( 1 );
          }
  
          final File baseDir =
              getBaseDirectoryFor( location, baseDirectory, workDirectory );
          return new File( baseDir, filename );
      }
  
      private static File getBaseDirectoryFor( final String location,
                                               final File baseDirectory,
                                               final File workDirectory )
      {
          if( location.startsWith( CLASSES ) ||
              location.startsWith( LIB ) )
          {
              return workDirectory;
          }
          else
          {
              return baseDirectory;
          }
      }
  }
  
  
  
  1.17      +9 -0      jakarta-avalon-phoenix/src/java/org/apache/avalon/phoenix/interfaces/ApplicationContext.java
  
  Index: ApplicationContext.java
  ===================================================================
  RCS file: /home/cvs/jakarta-avalon-phoenix/src/java/org/apache/avalon/phoenix/interfaces/ApplicationContext.java,v
  retrieving revision 1.16
  retrieving revision 1.17
  diff -u -r1.16 -r1.17
  --- ApplicationContext.java	31 Aug 2002 06:34:00 -0000	1.16
  +++ ApplicationContext.java	6 Sep 2002 09:42:35 -0000	1.17
  @@ -12,6 +12,7 @@
   import org.apache.avalon.framework.logger.Logger;
   import org.apache.avalon.phoenix.metadata.SarMetaData;
   import org.apache.excalibur.threadcontext.ThreadContext;
  +import java.io.InputStream;
   
   /**
    * Manage the "context" in which Applications operate.
  @@ -58,6 +59,14 @@
        * @return the ClassLoader
        */
       ClassLoader getClassLoader();
  +
  +    /**
  +     * Retrieve a resource from the SAR file. The specified
  +     * name is relative the root of the archive. So you could
  +     * use it to retrieve a html page from within sar by loading
  +     * the resource named "data/main.html" or similar.
  +     */
  +    InputStream getResourceAsStream( String name );
   
       /**
        * Get the Configuration for specified component.
  
  
  
  1.14      +2 -0      jakarta-avalon-phoenix/src/java/org/apache/avalon/phoenix/interfaces/Kernel.java
  
  Index: Kernel.java
  ===================================================================
  RCS file: /home/cvs/jakarta-avalon-phoenix/src/java/org/apache/avalon/phoenix/interfaces/Kernel.java,v
  retrieving revision 1.13
  retrieving revision 1.14
  diff -u -r1.13 -r1.14
  --- Kernel.java	7 Aug 2002 02:57:15 -0000	1.13
  +++ Kernel.java	6 Sep 2002 09:42:35 -0000	1.14
  @@ -10,6 +10,7 @@
   import org.apache.avalon.framework.configuration.Configuration;
   import org.apache.avalon.framework.logger.Logger;
   import org.apache.avalon.phoenix.metadata.SarMetaData;
  +import java.io.File;
   
   /**
    * @author <a href="mailto:peter at apache.org">Peter Donald</a>
  @@ -22,6 +23,7 @@
        * Adds an application to the container
        */
       void addApplication( SarMetaData metaData,
  +                         File workDirectory,
                            ClassLoader classLoader,
                            Logger hierarchy,
                            Configuration server )
  
  
  

--
To unsubscribe, e-mail:   <mailto:avalon-cvs-unsubscribe@jakarta.apache.org>
For additional commands, e-mail: <mailto:avalon-cvs-help@jakarta.apache.org>


Mime
View raw message