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/02/26 02:37:12 UTC
cvs commit: jakarta-avalon-phoenix/src/java/org/apache/phoenix/engine/facilitys DefaultLogManager.java DefaultPolicy.java DefaultThreadManager.java
donaldp 01/02/25 17:37:11
Modified: src/java/org/apache/phoenix/engine
DefaultServerApplication.java
Added: src/java/org/apache/phoenix/engine/facilitys
DefaultLogManager.java DefaultPolicy.java
DefaultThreadManager.java
Log:
Moved DefaultLog/Thread Managers and DefaultPolicy into Phoenix.
Revision Changes Path
1.3 +3 -3 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.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- DefaultServerApplication.java 2001/02/24 07:27:55 1.2
+++ DefaultServerApplication.java 2001/02/26 01:37:11 1.3
@@ -35,9 +35,6 @@
import org.apache.avalon.configuration.Configurable;
import org.apache.avalon.configuration.Configuration;
import org.apache.avalon.configuration.ConfigurationException;
-import org.apache.avalon.util.log.DefaultLogManager;
-import org.apache.avalon.util.security.DefaultPolicy;
-import org.apache.avalon.util.thread.DefaultThreadManager;
import org.apache.avalon.util.thread.ThreadManager;
import org.apache.phoenix.engine.blocks.BlockDAG;
import org.apache.phoenix.engine.blocks.BlockEntry;
@@ -47,6 +44,9 @@
import org.apache.phoenix.engine.facilitys.DefaultConfigurationRepository;
import org.apache.phoenix.engine.facilitys.DefaultContextBuilder;
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.DefaultLogManager;
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/facilitys/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.facilitys;
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.Component;
import org.apache.avalon.Context;
import org.apache.avalon.Contextualizable;
import org.apache.avalon.configuration.Configurable;
import org.apache.avalon.configuration.Configuration;
import org.apache.avalon.configuration.ConfigurationException;
import org.apache.log.Category;
import org.apache.log.LogKit;
import org.apache.log.LogTarget;
import org.apache.log.output.FileOutputLogTarget;
import org.apache.avalon.util.log.AvalonLogFormatter;
/**
* Component responsible for managing logs.
*
* @author <a href="mailto:donaldp@apache.org">Peter Donald</a>
*/
public class DefaultLogManager
extends AbstractLoggable
implements Component, 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/facilitys/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.facilitys;
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/facilitys/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.facilitys;
import java.util.Hashtable;
import java.util.Iterator;
import org.apache.avalon.AbstractLoggable;
import org.apache.avalon.configuration.Configurable;
import org.apache.avalon.configuration.Configuration;
import org.apache.avalon.configuration.ConfigurationException;
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 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 ThreadPool threadPool = new ThreadPool( 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;
}
}