donaldp     01/04/15 06:27:43

  Added:       src/java/org/apache/phoenix/engine/facilities
                        ClassLoaderManager.java
               src/java/org/apache/phoenix/engine/facilities/classloader
                        DefaultClassLoaderManager.java
                        PolicyClassLoader.java SarClassLoader.java
  Log:
  Define and Implement ClassLoaderManager facility
  
  Revision  Changes    Path
  1.1                  
jakarta-avalon-phoenix/src/java/org/apache/phoenix/engine/facilities/ClassLoaderManager.java
  
  Index: ClassLoaderManager.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;
  
  /**
   * This facility manages the ClassLoader for an application instance.
   *
   * @author <a href="mailto:[EMAIL PROTECTED]">Peter Donald</a>
   */
  public interface ClassLoaderManager
      extends Facility
  {
      /**
       * Get ClassLoader for the current application.
       *
       * @return the ClassLoader
       */
      ClassLoader getClassLoader();
  }
  
  
  
  1.1                  
jakarta-avalon-phoenix/src/java/org/apache/phoenix/engine/facilities/classloader/DefaultClassLoaderManager.java
  
  Index: DefaultClassLoaderManager.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.classloader;
  
  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.DefaultContext;
  import org.apache.avalon.Initializable;
  import org.apache.phoenix.engine.facilities.ClassLoaderManager;
  
  /**
   * This facility manages the ClassLoader for an application instance.
   *
   * @author <a href="mailto:[EMAIL PROTECTED]">Peter Donald</a>
   */
  public class DefaultClassLoaderManager
      implements ClassLoaderManager, Contextualizable, Composer, Initializable
  {
      private SarClassLoader   m_classLoader = new SarClassLoader();
  
      public void contextualize( final Context context )
      {
          m_classLoader.contextualize( context );
      }
  
      public void compose( final ComponentManager componentManager )
          throws ComponentManagerException
      {
          m_classLoader.compose( componentManager );
      }
  
      public void init()
          throws Exception
      {
          m_classLoader.init();
      }
  
      /**
       * Get ClassLoader for the current application.
       *
       * @return the ClassLoader
       */
      public ClassLoader getClassLoader()
      {
          return m_classLoader;
      }
  }
  
  
  
  1.1                  
jakarta-avalon-phoenix/src/java/org/apache/phoenix/engine/facilities/classloader/PolicyClassLoader.java
  
  Index: PolicyClassLoader.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.classloader;
  
  import java.net.URL;
  import java.net.URLClassLoader;
  import java.security.CodeSource;
  import java.security.PermissionCollection;
  import java.security.Permissions;
  import java.security.Policy;
  
  /**
   * Classloader that applies correct policy information.
   *
   * @author <a href="mailto:[EMAIL PROTECTED]">Peter Donald</a>
   */
  public class PolicyClassLoader
      extends URLClassLoader
  {
      protected Policy      m_policy;
  
      public PolicyClassLoader( final URL[] urls,
                                final ClassLoader classLoader,
                                final Policy policy )
      {
          super( urls, classLoader );
          m_policy = policy;
      }
  
      /**
       * Overide so we can have a per-application security policy with
       * no side-effects to other applications.
       *
       * @param codeSource the codeSource to get permissions for
       * @return the PermissionCollection
       */
      protected PermissionCollection getPermissions( final CodeSource codeSource )
      {
          if( null == m_policy )
          {
              final Permissions permissions = new Permissions();
              permissions.add( new java.security.AllPermission() );
              return permissions;
          }
          else
          {
              return m_policy.getPermissions( codeSource );
          }
      }
  }
  
  
  
  1.1                  
jakarta-avalon-phoenix/src/java/org/apache/phoenix/engine/facilities/classloader/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.classloader;
  
  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.phoenix.engine.SarContextResources;
  import org.apache.phoenix.engine.facilities.PolicyManager;
  
  /**
   * This component creates blocks and blockInfos.
   *
   * @author <a href="mailto:[EMAIL PROTECTED]">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
      {
          final PolicyManager policyManager = (PolicyManager)componentManager.
              lookup( "org.apache.phoenix.engine.facilities.PolicyManager" );
  
          m_policy = policyManager.getPolicy();
      }
  
      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: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to