I have written a Poolable Transformer which does a lookup to the Sitemap
TransformerSelector (in the compose method).
public void compose(ComponentManager manager)
throws ComponentException
{
this.manager = manager;
transformerSelector = (ComponentSelector)
manager.lookup(Transformer.ROLE + "Selector");
}
The TransformerSelector is needed, because this transformer uses other
Transformers at runtime. If I add this Transformer to the Sitemap, the
ComponentSelector runs in a endless loop (see Stacktrace).
The reason is, that the ComponentPool is initialized before the
ComponentSelector itself is initialized. This mean, that the lookup to the
ComponentSelector is called before the ComponentSelector itself is initialized.
For me, it looks like a design problem handling pooled components.
What is your opinion? I am not sure if this is a bug or a feature ;-)
A workaround is, setting pool-min="0", because the instance (Transformer) is
created by the first request and then the ComponentSelector is initialized.
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: [EMAIL PROTECTED]
For additional commands, email: [EMAIL PROTECTED]