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]

Reply via email to