donaldp 2002/11/10 16:10:01
Modified: fortress/src/java/org/apache/excalibur/fortress/container
AbstractContainer.java DefaultContainer.java
fortress/src/java/org/apache/excalibur/fortress/role
AbstractRoleManager.java RoleManager.java
fortress/src/test/org/apache/excalibur/fortress/test
ContainerProfile.xconf
fortress/src/test/org/apache/excalibur/fortress/test/data
test1.roles test1.xconf
Log:
Remove handler/role attributes from within the .xconf file. These are derivable from
the values stored in the roles file and thus there is no need to try and duplicate the
same data across multiple places.
Revision Changes Path
1.17 +28 -16
jakarta-avalon-excalibur/fortress/src/java/org/apache/excalibur/fortress/container/AbstractContainer.java
Index: AbstractContainer.java
===================================================================
RCS file:
/home/cvs/jakarta-avalon-excalibur/fortress/src/java/org/apache/excalibur/fortress/container/AbstractContainer.java,v
retrieving revision 1.16
retrieving revision 1.17
diff -u -r1.16 -r1.17
--- AbstractContainer.java 10 Nov 2002 16:16:43 -0000 1.16
+++ AbstractContainer.java 11 Nov 2002 00:10:01 -0000 1.17
@@ -81,6 +81,7 @@
import org.apache.excalibur.fortress.lookup.FortressServiceSelector;
import org.apache.excalibur.fortress.role.ExcaliburRoleManager;
import org.apache.excalibur.fortress.role.RoleManager;
+import org.apache.excalibur.fortress.role.RoleEntry;
import org.apache.excalibur.instrument.InstrumentManager;
import org.apache.excalibur.instrument.Instrumentable;
import org.apache.excalibur.mpool.ObjectFactory;
@@ -241,14 +242,22 @@
throw new IllegalArgumentException( message );
}
- String role = component.getAttribute( "role", null );
- String klass = component.getAttribute( "class", null );
+ final String classname = component.getAttribute( "class", null );
boolean isLazy = isLazyComponentHandler( component );
- ComponentHandler handler = getComponentHandler(
- component.getAttribute( "handler", null ), klass, component, isLazy
- );
- if( null != role && null != klass && null != handler )
+ final RoleEntry roleEntry = m_roleManager.getRoleForClassname( classname );
+ if( null == roleEntry )
+ {
+ final String message = "No role defined for " + classname;
+ throw new IllegalArgumentException( message );
+ }
+
+ final ComponentHandler handler =
+ getComponentHandler( roleEntry, component, isLazy );
+
+ final String role = roleEntry.getRole();
+
+ if( null != role && null != classname && null != handler )
{
Map hintMap = (StaticBucketMap)m_mapper.get( role );
@@ -319,20 +328,19 @@
* Get a ComponentHandler with the standard
* <code>HANDLER_CONSTRUCTOR</code> for the component class passed in.
*/
- private ComponentHandler getComponentHandler( final String handlerClassName,
- final String classname,
+ private ComponentHandler getComponentHandler( final RoleEntry roleEntry,
final Configuration configuration,
final boolean isLazy )
{
ComponentHandler handler = null;
+ final String classname = roleEntry.getComponentClass().getName();
try
{
- final Class handlerClazz = m_classLoader.loadClass( handlerClassName );
final ObjectFactory factory =
createObjectFactory( classname, configuration );
final ComponentHandler targetHandler =
- (ComponentHandler)handlerClazz.newInstance();
+ (ComponentHandler)roleEntry.getHandlerClass().newInstance();
ContainerUtil.contextualize( targetHandler, m_context );
@@ -359,16 +367,20 @@
{
if( getLogger().isDebugEnabled() )
{
- getLogger().debug( "Could not create the '" + handlerClassName +
- "' handler for the '" + classname +
- "' component.", e );
+ final String message =
+ "Could not create the handler for the '" +
+ classname + "' component.";
+ getLogger().debug( message, e );
}
+ return null;
}
if( getLogger().isDebugEnabled() )
{
- getLogger().debug( "Component " + classname +
- " uses handler " + handlerClassName );
+ final String message =
+ "Component " + classname +
+ " uses handler " + roleEntry.getHandlerClass().getName();
+ getLogger().debug( message );
}
final ComponentHandlerEntry entry =
1.12 +1 -4
jakarta-avalon-excalibur/fortress/src/java/org/apache/excalibur/fortress/container/DefaultContainer.java
Index: DefaultContainer.java
===================================================================
RCS file:
/home/cvs/jakarta-avalon-excalibur/fortress/src/java/org/apache/excalibur/fortress/container/DefaultContainer.java,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -r1.11 -r1.12
--- DefaultContainer.java 10 Nov 2002 16:16:43 -0000 1.11
+++ DefaultContainer.java 11 Nov 2002 00:10:01 -0000 1.12
@@ -156,10 +156,7 @@
//We set these before copying all other attributes so the class / handler
can be overriden if needed if
//the shorthand name is used
- temp.setAttribute( "role", roleEntry.getRole() );
temp.setAttribute( "class", roleEntry.getComponentClass().getName() );
- temp.setAttribute( "handler", roleEntry.getHandlerClass().getName() );
-
temp.setValue( configItem.getValue( null ) );
String[] attributes = configItem.getAttributeNames();
1.4 +25 -1
jakarta-avalon-excalibur/fortress/src/java/org/apache/excalibur/fortress/role/AbstractRoleManager.java
Index: AbstractRoleManager.java
===================================================================
RCS file:
/home/cvs/jakarta-avalon-excalibur/fortress/src/java/org/apache/excalibur/fortress/role/AbstractRoleManager.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- AbstractRoleManager.java 10 Nov 2002 16:16:43 -0000 1.3
+++ AbstractRoleManager.java 11 Nov 2002 00:10:01 -0000 1.4
@@ -74,6 +74,11 @@
private Map m_shorthands = new Hashtable();
/**
+ * Map for classname to RoleEntry
+ */
+ private Map m_classnames = new Hashtable();
+
+ /**
* Parent <code>RoleManager</code> for nested resolution
*/
private final RoleManager m_parent;
@@ -164,11 +169,30 @@
final RoleEntry entry = new RoleEntry( role, clazz, handlerKlass );
m_shorthands.put( shortName, entry );
+ m_classnames.put( className, entry );
}
protected Class guessHandlerFor( final Class clazz )
{
return PerThreadComponentHandler.class;
+ }
+
+
+ public RoleEntry getRoleForClassname( final String classname )
+ {
+ final RoleEntry roleEntry = (RoleEntry)m_classnames.get( classname );
+ if( null != roleEntry )
+ {
+ return roleEntry;
+ }
+ else if( null != m_parent )
+ {
+ return m_parent.getRoleForClassname( classname );
+ }
+ else
+ {
+ return null;
+ }
}
public RoleEntry getRoleForShortName( final String shortname )
1.4 +3 -1
jakarta-avalon-excalibur/fortress/src/java/org/apache/excalibur/fortress/role/RoleManager.java
Index: RoleManager.java
===================================================================
RCS file:
/home/cvs/jakarta-avalon-excalibur/fortress/src/java/org/apache/excalibur/fortress/role/RoleManager.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- RoleManager.java 10 Nov 2002 16:16:43 -0000 1.3
+++ RoleManager.java 11 Nov 2002 00:10:01 -0000 1.4
@@ -64,4 +64,6 @@
String ROLE = RoleManager.class.getName();
RoleEntry getRoleForShortName( String shortname );
+
+ RoleEntry getRoleForClassname( String classname );
}
1.8 +5 -24
jakarta-avalon-excalibur/fortress/src/test/org/apache/excalibur/fortress/test/ContainerProfile.xconf
Index: ContainerProfile.xconf
===================================================================
RCS file:
/home/cvs/jakarta-avalon-excalibur/fortress/src/test/org/apache/excalibur/fortress/test/ContainerProfile.xconf,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -r1.7 -r1.8
--- ContainerProfile.xconf 24 Sep 2002 21:45:10 -0000 1.7
+++ ContainerProfile.xconf 11 Nov 2002 00:10:01 -0000 1.8
@@ -1,33 +1,14 @@
<test>
-<!--
- <component id="test1"
- class="org.apache.avalon.excalibur.datasource.JdbcDataSource"
- role="org.apache.avalon.excalibur.datasource.DataSourceComponent"
- handler="org.apache.excalibur.fortress.handler.ThreadSafeComponentHandler"
- logger="test">
- <pool-controller min="5" max="10">
- <keep-alive>SELECT 1 FROM groups</keep-alive>
- </pool-controller>
- <driver>@test.jdbc.driver@</driver>
- <dburl>@test.jdbc.url@</dburl>
- <user>@test.jdbc.user@</user>
- <password>@test.jdbc.password@</password>
- </component>
--->
<component id="test2"
class="org.apache.avalon.excalibur.monitor.ActiveMonitor"
- role="org.apache.avalon.excalibur.monitor.Monitor"
- handler="org.apache.excalibur.fortress.handler.ThreadSafeComponentHandler"
- logger="test"
- activation="startup">
+ logger="test"
+ activation="startup">
<thread priority="10" frequency="1"/>
</component>
<component id="test3"
- class="org.apache.avalon.excalibur.xml.JaxpParser"
- role="org.apache.avalon.excalibur.xml.Parser"
- handler="org.apache.excalibur.fortress.handler.PoolableComponentHandler"
- logger="test"
- activation="startup">
+ class="org.apache.avalon.excalibur.xml.JaxpParser"
+ logger="test"
+ activation="startup">
<parameter name="validate" value="false"/>
<parameter name="namespace-prefixes" value="false"/>
<parameter name="reuse-parsers" value="true"/>
1.2 +3 -3
jakarta-avalon-excalibur/fortress/src/test/org/apache/excalibur/fortress/test/data/test1.roles
Index: test1.roles
===================================================================
RCS file:
/home/cvs/jakarta-avalon-excalibur/fortress/src/test/org/apache/excalibur/fortress/test/data/test1.roles,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- test1.roles 10 Nov 2002 12:39:04 -0000 1.1
+++ test1.roles 11 Nov 2002 00:10:01 -0000 1.2
@@ -7,17 +7,17 @@
<role name="org.apache.excalibur.fortress.test.data.Role2">
<component shorthand="component2"
class="org.apache.excalibur.fortress.test.data.Component2"
-
handler="org.apache.excalibur.fortress.handler.ThreadSafeComponentHandler"/>
+
handler="org.apache.excalibur.fortress.handler.PoolableComponentHandler"/>
</role>
<role name="org.apache.excalibur.fortress.test.data.Role3">
<component shorthand="component3"
class="org.apache.excalibur.fortress.test.data.Component3"
-
handler="org.apache.excalibur.fortress.handler.ThreadSafeComponentHandler"/>
+
handler="org.apache.excalibur.fortress.handler.PerThreadComponentHandler"/>
</role>
<role name="org.apache.excalibur.fortress.test.data.Role4">
<component shorthand="component4"
class="org.apache.excalibur.fortress.test.data.Component4"
-
handler="org.apache.excalibur.fortress.handler.ThreadSafeComponentHandler"/>
+
handler="org.apache.excalibur.fortress.handler.FactoryComponentHandler"/>
</role>
</test>
1.3 +0 -8
jakarta-avalon-excalibur/fortress/src/test/org/apache/excalibur/fortress/test/data/test1.xconf
Index: test1.xconf
===================================================================
RCS file:
/home/cvs/jakarta-avalon-excalibur/fortress/src/test/org/apache/excalibur/fortress/test/data/test1.xconf,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- test1.xconf 10 Nov 2002 12:43:57 -0000 1.2
+++ test1.xconf 11 Nov 2002 00:10:01 -0000 1.3
@@ -1,27 +1,19 @@
<test>
<component id="component1"
class="org.apache.excalibur.fortress.test.data.Component1"
- role="org.apache.excalibur.fortress.test.data.Role1"
- handler="org.apache.excalibur.fortress.handler.ThreadSafeComponentHandler"
logger="component1"
activation="startup"/>
<component id="component2"
class="org.apache.excalibur.fortress.test.data.Component2"
- role="org.apache.excalibur.fortress.test.data.Role2"
- handler="org.apache.excalibur.fortress.handler.PoolableComponentHandler"
logger="component2"
pool-min="2"
activation="startup"/>
<component id="component3"
class="org.apache.excalibur.fortress.test.data.Component3"
- role="org.apache.excalibur.fortress.test.data.Role3"
- handler="org.apache.excalibur.fortress.handler.PerThreadComponentHandler"
logger="component3"
activation="startup"/>
<component id="component4"
class="org.apache.excalibur.fortress.test.data.Component4"
- role="org.apache.excalibur.fortress.test.data.Role4"
- handler="org.apache.excalibur.fortress.handler.FactoryComponentHandler"
logger="component4"
activation="startup"/>
</test>
--
To unsubscribe, e-mail: <mailto:avalon-cvs-unsubscribe@;jakarta.apache.org>
For additional commands, e-mail: <mailto:avalon-cvs-help@;jakarta.apache.org>