Andy, reporting back!
I ran into the issue that I feared I would !!! :-(
The exception I get at deployment time leads me to believe that since
renderComponent() has already been enhanced by InjectAjaxComponentRenderWorker
my custom DummyRenderComponentWorker is not able to further enhance this
method!
What is also interesting is that in my hivemodule.xml if I change
after="tacos.enhance.inject-ajaxrender"
to
before="tacos.enhance.inject-ajaxrender"
then I get the exception on the InjectAjaxComponentRenderWorker !! So it
appears to me that this is clearly a case of two EWs trying to enhance the
same method.
I'm hoping it's my ignorance than anything else.
Here's the details.
1) Wrote a DummyRenderComponentWorker.java. It just does this at the End Of
Day:
System.out.println("DummyRenderComponentWorker Here" );
super.renderComponent($$);
Here is the code for DummyRenderComponentWorker.java
<code>
package com.effigent.ui.tapestry.enhance;
public class DummyRenderComponentWorker implements EnhancementWorker {
private static final String RENDER_METHOD = "renderComponent";
private static final Class[] RENDER_PARAMS = { IMarkupWriter.class,
IRequestCycle.class };
public void performEnhancement(EnhancementOperation op,
IComponentSpecification spec)
{
//Only on components
if (!AbstractComponent.class.isAssignableFrom(op.getBaseClass())) {
logger.warn("Not assignable from AbstractComponent:" +
spec.getComponentClassName()
+ " with base class:" + op.getBaseClass().getName());
return;
}
Method renderMethod = null;
try {
renderMethod = op.getBaseClass().getDeclaredMethod(RENDER_METHOD,
RENDER_PARAMS);
} catch (NoSuchMethodException e) {
//log.warn("Error performing ajax enhancement on component class"
// + spec.getComponentClassName());
return;
}
MethodSignature enhancedMethod = new MethodSignature(renderMethod);
op.addMethod(renderMethod.getModifiers(), enhancedMethod,
getAccessorMethodCode(enhancedMethod)
,spec.getLocation());
}
private String getAccessorMethodCode( MethodSignature enhancedMethod ) {
StringBuffer buf = new StringBuffer("{\n");
buf.append("System.out.println(\"DummyRenderComponentWorker Here\"
);\n" );
buf.append(MessageFormat.format("super.{0}($$);\n",
new Object[] { enhancedMethod.getName() }));
buf.append("}\n");
System.out.println( buf );
return buf.toString();
}
}
</code>
2) Configured hivemodule in this way: (Notice that I want to inject
DummyRenderComponentWorker AFTER tacos.enhance.inject-ajaxrender)
<code>
<?xml version="1.0"?>
<module id="com.effigent.ui.tapestry" version="1.0.0" >
<contribution configuration-id="tapestry.enhance.EnhancementWorkers">
Adds dummy renderer into component enhancement chain.
<command id="inject-dummyrender"
object="service:com.effigent.ui.tapestry.DummyRenderInterceptor"
after="tacos.enhance.inject-ajaxrender" />
</contribution>
<service-point id="DummyRenderInterceptor"
interface="org.apache.tapestry.enhance.EnhancementWorker">
<invoke-factory>
<construct
class="
com.effigent.ui.tapestry.enhance.DummyRenderComponentWorker">
The Service that will be wired into all components to call
before
their render method is invoked.
</construct>
</invoke-factory>
</service-point>
</module>
</code>
3) Here is the exception at runtime:
<code>
2006-11-16 13:25:18,773 S#1 R#1 [http-8080-Processor25] ERROR
org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/TapestryTest].[TapestryTest]
- Servlet.service() for servlet TapestryTest threw exception
org.apache.hivemind.ApplicationRuntimeException: A new implementation of
method 'void renderComponent(org.apache.tapestry.IMarkupWriter,
org.apache.tapestry.IRequestCycle)' conflicts with an existing
implementation (at classpath:/org/apache/tapestry/html/Shell.jwc, line 22,
column 96). [classpath:/org/apache/tapestry/html/Shell.jwc, line 22, column
96]
at org.apache.tapestry.enhance.EnhancementOperationImpl.addMethod(
EnhancementOperationImpl.java:370)
at
com.effigent.ui.tapestry.enhance.DummyRenderComponentWorker.performEnhancement
(DummyRenderComponentWorker.java:87)
at
$EnhancementWorker_10eefc2f876.performEnhancement($EnhancementWorker_10eefc2f876.java)
at
$EnhancementWorker_10eefc2f87c.performEnhancement($EnhancementWorker_10eefc2f87c.java)
at
$EnhancementWorker_10eefc2f854.performEnhancement($EnhancementWorker_10eefc2f854.java)
at
org.apache.tapestry.services.impl.ComponentConstructorFactoryImpl.getComponentConstructor
(ComponentConstructorFactoryImpl.java:97)
at
$ComponentConstructorFactory_10eefc2f841.getComponentConstructor($ComponentConstructorFactory_10eefc2f841.java)
at org.apache.tapestry.pageload.PageLoader.instantiateComponent(
PageLoader.java:531)
at org.apache.tapestry.pageload.PageLoader.createImplicitComponent(
PageLoader.java:481)
at
$IPageLoader_10eefc2f831.createImplicitComponent($IPageLoader_10eefc2f831.java)
at
$IPageLoader_10eefc2f832.createImplicitComponent($IPageLoader_10eefc2f832.java)
at
org.apache.tapestry.services.impl.ComponentTemplateLoaderLogic.createImplicitComponent
(ComponentTemplateLoaderLogic.java:218)
at
org.apache.tapestry.services.impl.ComponentTemplateLoaderLogic.process(
ComponentTemplateLoaderLogic.java:172)
at
org.apache.tapestry.services.impl.ComponentTemplateLoaderLogic.process(
ComponentTemplateLoaderLogic.java:111)
at
org.apache.tapestry.services.impl.ComponentTemplateLoaderLogic.loadTemplate(
ComponentTemplateLoaderLogic.java:88)
at
org.apache.tapestry.services.impl.ComponentTemplateLoaderImpl.loadTemplate(
ComponentTemplateLoaderImpl.java:60)
at
$ComponentTemplateLoader_10eefc2f845.loadTemplate($ComponentTemplateLoader_10eefc2f845.java)
at org.apache.tapestry.pageload.PageLoader.loadTemplateForComponent(
PageLoader.java:648)
at org.apache.tapestry.BaseComponent.readTemplate(BaseComponent.java
:77)
at org.apache.tapestry.BaseComponent.finishLoad(BaseComponent.java
:107)
at $Exception_2.finishLoad($Exception_2.java)
at org.apache.tapestry.pageload.PageLoader.constructComponent(
PageLoader.java:439)
at org.apache.tapestry.pageload.PageLoader.loadPage(PageLoader.java
:613)
at $IPageLoader_10eefc2f831.loadPage($IPageLoader_10eefc2f831.java)
at $IPageLoader_10eefc2f832.loadPage($IPageLoader_10eefc2f832.java)
at org.apache.tapestry.pageload.PageSource.getPage(PageSource.java
:120)
</code>
Thanks, Karthik
On 11/14/06, andyhot <[EMAIL PROTECTED]> wrote:
No, nothing is lost... That's why it's cool
Go ahead and try it!
-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys - and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
_______________________________________________
Tacos-devel mailing list
Tacos-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/tacos-devel