cziegeler 2004/04/05 01:46:06
Modified: fortress/container-impl/src/java/org/apache/avalon/fortress/impl/role
AbstractRoleManager.java ECMRoleManager.java
Added: fortress/container-impl/src/java/org/apache/avalon/fortress/impl
DefaultECMContainer.java
Log:
Add ECM compatible container implementation
Revision Changes Path
1.14 +2 -2
avalon-excalibur/fortress/container-impl/src/java/org/apache/avalon/fortress/impl/role/AbstractRoleManager.java
Index: AbstractRoleManager.java
===================================================================
RCS file:
/home/cvs/avalon-excalibur/fortress/container-impl/src/java/org/apache/avalon/fortress/impl/role/AbstractRoleManager.java,v
retrieving revision 1.13
retrieving revision 1.14
diff -u -r1.13 -r1.14
--- AbstractRoleManager.java 28 Feb 2004 15:16:25 -0000 1.13
+++ AbstractRoleManager.java 5 Apr 2004 08:46:06 -0000 1.14
@@ -98,7 +98,7 @@
/**
* Addition of a role to the role manager.
- * @param shortName the shor name for the role
+ * @param shortName the short name for the role
* @param role the role
* @param className the class name
* @param handlerClassName the handler classname
1.2 +49 -6
avalon-excalibur/fortress/container-impl/src/java/org/apache/avalon/fortress/impl/role/ECMRoleManager.java
Index: ECMRoleManager.java
===================================================================
RCS file:
/home/cvs/avalon-excalibur/fortress/container-impl/src/java/org/apache/avalon/fortress/impl/role/ECMRoleManager.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- ECMRoleManager.java 3 Apr 2004 18:10:35 -0000 1.1
+++ ECMRoleManager.java 5 Apr 2004 08:46:06 -0000 1.2
@@ -17,11 +17,17 @@
package org.apache.avalon.fortress.impl.role;
+import org.apache.avalon.excalibur.pool.Poolable;
import org.apache.avalon.fortress.RoleManager;
+import org.apache.avalon.fortress.impl.handler.FactoryComponentHandler;
+import org.apache.avalon.fortress.impl.handler.PerThreadComponentHandler;
+import org.apache.avalon.fortress.impl.handler.PoolableComponentHandler;
import org.apache.avalon.fortress.impl.role.AbstractRoleManager;
import org.apache.avalon.framework.configuration.Configurable;
import org.apache.avalon.framework.configuration.Configuration;
import org.apache.avalon.framework.configuration.ConfigurationException;
+import org.apache.avalon.framework.thread.SingleThreaded;
+import org.apache.avalon.framework.thread.ThreadSafe;
/**
* This role manager implementation is able to read ECM based role files.
@@ -93,17 +99,54 @@
{
final String role = roles[i].getAttribute( "name" );
final String shorthand = roles[i].getAttribute( "shorthand" );
- final String className = roles[i].getAttribute( "default-class", null );
-
- if ( ! addRole( shorthand, role, className, null ) )
+ final String defaultClassName = roles[i].getAttribute( "default-class",
null );
+
+ if ( ! addRole( shorthand, role, defaultClassName,
getComponentHandlerClassName(defaultClassName)) )
{
-
+
final String message = "Configuration error on invalid
entry:\n\tRole: " + role +
"\n\tShorthand: " + shorthand +
- "\n\tDefault Class: " + className;
+ "\n\tDefault Class: " + defaultClassName;
getLogger().warn(message);
}
+
+ }
+ }
+
+ protected String getComponentHandlerClassName(final String defaultClassName)
+ {
+ if ( defaultClassName == null )
+ {
+ return null;
+ }
+ Class clazz;
+ try
+ {
+ clazz = getLoader().loadClass( defaultClassName );
+ }
+ catch ( final Exception e )
+ {
+ final String message =
+ "Unable to load class " + defaultClassName + ". Using dfault
component handler.";
+ getLogger().warn( message );
+ return null;
+ }
+
+ if ( ThreadSafe.class.isAssignableFrom( clazz ) )
+ {
+ return PerThreadComponentHandler.class.getName();
+ }
+ else if ( Poolable.class.isAssignableFrom( clazz ) )
+ {
+ return PoolableComponentHandler.class.getName();
+ }
+ else if ( SingleThreaded.class.isAssignableFrom( clazz) )
+ {
+ return FactoryComponentHandler.class.getName();
}
+
+ // Don't know, use default
+ return null ;
}
}
1.1
avalon-excalibur/fortress/container-impl/src/java/org/apache/avalon/fortress/impl/DefaultECMContainer.java
Index: DefaultECMContainer.java
===================================================================
/*
* Copyright 1999-2004 The Apache Software Foundation.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.avalon.fortress.impl;
import org.apache.avalon.fortress.MetaInfoEntry;
import org.apache.avalon.fortress.RoleManager;
import org.apache.avalon.fortress.impl.ComponentHandlerMetaData;
import org.apache.avalon.fortress.impl.DefaultContainer;
import org.apache.avalon.framework.configuration.Configuration;
import org.apache.avalon.framework.configuration.ConfigurationException;
import org.apache.avalon.framework.context.Context;
import org.apache.avalon.framework.context.ContextException;
import org.apache.avalon.framework.service.ServiceException;
import org.apache.avalon.framework.service.ServiceManager;
/**
* Customize the Fortress container to handle ECM compatibility
*
* @author <a href="mailto:[EMAIL PROTECTED]">The Avalon Team</a>
* @version CVS $ Revision: 1.1 $
*/
public class DefaultECMContainer extends DefaultContainer {
protected RoleManager m_roleManager;
/**
* Retrieve the classname for component configuration.
*
* @param config the component configuration
* @return the class name
*/
private String getClassname( final Configuration config )
throws ConfigurationException {
final String className;
if ( "component".equals( config.getName() ) ) {
className = config.getAttribute( "class" );
} else {
final MetaInfoEntry roleEntry = m_metaManager.getMetaInfoForShortName(
config.getName() );
if ( null == roleEntry )
{
final String message = "No class found matching configuration name "
+
"[name: " + config.getName() + ", location: " +
config.getLocation() + "]";
throw new ConfigurationException( message );
}
className = roleEntry.getComponentClass().getName();
}
if ( getLogger().isDebugEnabled() ) {
getLogger().debug( "Configuration processed for: " + className );
}
return className;
}
/**
* Provide some validation for the core Cocoon components
*
* @param conf The configuration
* @throws ConfigurationException if the coniguration is invalid
*/
public void configure( Configuration conf )
throws ConfigurationException {
this.interpretProxy( conf.getAttribute("proxy-type", "none") );
final Configuration[] elements = conf.getChildren();
for ( int i = 0; i < elements.length; i++ )
{
final Configuration element = elements[i];
String hint = element.getAttribute( "id", null );
if ( null == hint ) {
// Fortress requires a hint, so we just give it one :)
hint = element.getLocation();
}
final String classname = getClassname( element );
final int activation = ComponentHandlerMetaData.ACTIVATION_BACKGROUND;
final ComponentHandlerMetaData metaData =
new ComponentHandlerMetaData( hint, classname, element, activation );
try {
addComponent( metaData );
} catch ( Exception e ) {
throw new ConfigurationException( "Could not add component", e );
}
}
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]