let me explain my problem with this testcase:
<?xml version="1.0" encoding="UTF-8"?>
<testcase>
<components>
<component role="selector"
class="org.apache.avalon.excalibur.component.ExcaliburComponentSelector">
<component-instance name="pooledTestClass1" class="MyPooledComponent1"
/>
<component-instance name="pooledTestClass2" class="MyPooledComponent2"
/>
</component>
</components>
</testcase>
this testcase runs in a endlessloop if one of the the component-instance
implements the following compose method:
public void compose(ComponentManager componentManager)
throws ComponentException
{
this.selector =
(ComponentSelector) componentManager.lookup("selector");
}
If the component-instance itself does a lookup to it's own ComponentSelector
then this testcase run in a loop. The reason is, that the pooled components are
created before the ComponentSelector itself is marked initialized. If I set
pool-min="0" it works.
Is this a bug, feature or a design problem ? ;-)
I know, I can do the lookup of the selector outside of the compose method, but
then I need to check every time if the lookup is already done.
I run in this problem using Cocoon where I have implemented a Transformer which
need another Transformer at runtime. I have add the Stacktrace of this loop.
Thanks for your response
Volker
The Stacktrace:
Thread [HttpProcessor[8080][4]] (Suspended (breakpoint at line 127 in
TagTransformer))
TagTransformer.compose(ComponentManager) line: 127
DefaultComponentFactory.newInstance() line: 157
DefaultComponentPool(AbstractPool).newPoolable() line: 82
DefaultComponentPool(AbstractPool).internalGrow(int) line: 126
DefaultComponentPool(SoftResourceLimitingPool).grow(int) line: 91
DefaultComponentPool(SoftResourceLimitingPool).initialize() line: 80
PoolableComponentHandler.initialize() line: 88
ComponentsSelector(ExcaliburComponentSelector).initialize() line: 163
ComponentsSelector.initialize() line: 238
DefaultComponentFactory.newInstance() line: 183
ThreadSafeComponentHandler.initialize() line: 84
CocoonComponentManager(ExcaliburComponentManager).lookup(String) line: 331
CocoonComponentManager.lookup(String) line: 188
TagTransformer.compose(ComponentManager) line: 129
DefaultComponentFactory.newInstance() line: 157
DefaultComponentPool(AbstractPool).newPoolable() line: 82
DefaultComponentPool(AbstractPool).internalGrow(int) line: 126
DefaultComponentPool(SoftResourceLimitingPool).grow(int) line: 91
DefaultComponentPool(SoftResourceLimitingPool).initialize() line: 80
PoolableComponentHandler.initialize() line: 88
ComponentsSelector(ExcaliburComponentSelector).initialize() line: 163
ComponentsSelector.initialize() line: 238
DefaultComponentFactory.newInstance() line: 183
ThreadSafeComponentHandler.initialize() line: 84
CocoonComponentManager(ExcaliburComponentManager).initialize() line: 167
LifecycleHelper.setupComponent(Object, Logger, Context, ComponentManager,
RoleManager, LogKitManager, Configuration, boolean) line: 275
LifecycleHelper.setupComponent(Object, Logger, Context, ComponentManager,
RoleManager, LogKitManager, Configuration) line: 190
SitemapLanguage.createComponentManager(Configuration) line: 109
SitemapLanguage(TreeBuilder).build(Configuration) line: 382
TreeProcessor.setupRootNode(Environment) line: 409
TreeProcessor.process(Environment, InvokeContext) line: 357
TreeProcessor.process(Environment) line: 329
Cocoon.process(Environment) line: 575
CocoonServlet.service(HttpServletRequest, HttpServletResponse) line: 989
CocoonServlet(HttpServlet).service(ServletRequest, ServletResponse) line:
853
--
To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>