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]