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]