You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@tapestry.apache.org by Joachim Van der Auwera <jo...@progs.be> on 2010/03/02 22:34:34 UTC
[5.2] unexpected TransformationException
Hi,
Using the latest snapshot, I get the following error :
Caused by:
org.apache.tapestry5.internal.services.TransformationException: Error
obtaining injected value for field
org.skabacca.gui.pages.Matching.messages: Method
ClassTransformation.extendMethod(TransformMethodSignature, String) has
been deprecated and is no longer functional. Please consult the JavaDoc
for a suitable replacement.
which happens on a field declared as (injecting a service) :
@Inject
private EquandaMessages messages;
This was working a couple of days ago, but is now broken.
Any idea what is wrong and how I can fix this?
Kind regards,
Joachim
--
Joachim Van der Auwera
PROGS bvba, progs.be
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
For additional commands, e-mail: users-help@tapestry.apache.org
Re: [5.2] unexpected TransformationException
Posted by Joachim Van der Auwera <jo...@progs.be>.
Thanks for the help. I refactored the code to remove the need of the
InjectionProvider to assure it will work in both 5.1 and 5.2.
Thanks for pointing me to the problem.
Kind regards,
Joachim
Thiago H. de Paula Figueiredo wrote:
> On Wed, 03 Mar 2010 04:23:58 -0300, Joachim Van der Auwera
> <jo...@progs.be> wrote:
>
>> Caused by: java.lang.RuntimeException: Method
>> ClassTransformation.extendMethod(TransformMethodSignature, String)
>> has been deprecated and is no longer functional. Please consult the
>> JavaDoc for a suitable replacement.
>> at
>> org.apache.tapestry5.internal.services.InternalClassTransformationImpl.removed(InternalClassTransformationImpl.java:2318)
>>
>> at
>> org.apache.tapestry5.internal.services.InternalClassTransformationImpl.extendMethod(InternalClassTransformationImpl.java:1238)
>>
>> at
>> org.equanda.t5gui.services.EquandaMessagesInjectionProvider.provideInjection(EquandaMessagesInjectionProvider.java:53)
>>
>
> You're using EquandaMessages from the Equanda package and its
> InjectionProvider uses a method that was deprecated in 5.2-SNAPSHOT.
>
--
Joachim Van der Auwera
PROGS bvba, progs.be
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
For additional commands, e-mail: users-help@tapestry.apache.org
Re: [5.2] unexpected TransformationException
Posted by "Thiago H. de Paula Figueiredo" <th...@gmail.com>.
On Wed, 03 Mar 2010 09:39:49 -0300, Joachim Van der Auwera (PROGS bvba)
<jo...@progs.be> wrote:
> Thanks Thiago,
You're welcome!
> Should it not still work for backward compatibility?
This change was made very recently and I haven't looked at that yet, so I
don't know the answer. Anyway, from reading Howard's post about it on his
blog, the change was made to make it easier to add class transformations
and to not rely (or at least rely less) on Javassist for that.
--
Thiago H. de Paula Figueiredo
Independent Java, Apache Tapestry 5 and Hibernate consultant, developer,
and instructor
Owner, software architect and developer, Ars Machina Tecnologia da
Informação Ltda.
http://www.arsmachina.com.br
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
For additional commands, e-mail: users-help@tapestry.apache.org
Re: [5.2] unexpected TransformationException
Posted by "Joachim Van der Auwera (PROGS bvba)" <jo...@progs.be>.
Thanks Thiago,
Should it not still work for backward compatibility?
Anyway, I will check whether I can remove this from equanda (and make it
work in both 5.1 and 5.2.
Kind regards,
Joachim
Thiago H. de Paula Figueiredo wrote:
> On Wed, 03 Mar 2010 04:23:58 -0300, Joachim Van der Auwera
> <jo...@progs.be> wrote:
>
>> Caused by: java.lang.RuntimeException: Method
>> ClassTransformation.extendMethod(TransformMethodSignature, String)
>> has been deprecated and is no longer functional. Please consult the
>> JavaDoc for a suitable replacement.
>> at
>> org.apache.tapestry5.internal.services.InternalClassTransformationImpl.removed(InternalClassTransformationImpl.java:2318)
>>
>> at
>> org.apache.tapestry5.internal.services.InternalClassTransformationImpl.extendMethod(InternalClassTransformationImpl.java:1238)
>>
>> at
>> org.equanda.t5gui.services.EquandaMessagesInjectionProvider.provideInjection(EquandaMessagesInjectionProvider.java:53)
>>
>
> You're using EquandaMessages from the Equanda package and its
> InjectionProvider uses a method that was deprecated in 5.2-SNAPSHOT.
>
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
For additional commands, e-mail: users-help@tapestry.apache.org
Re: [5.2] unexpected TransformationException
Posted by "Thiago H. de Paula Figueiredo" <th...@gmail.com>.
On Wed, 03 Mar 2010 04:23:58 -0300, Joachim Van der Auwera
<jo...@progs.be> wrote:
> Caused by: java.lang.RuntimeException: Method
> ClassTransformation.extendMethod(TransformMethodSignature, String) has
> been deprecated and is no longer functional. Please consult the JavaDoc
> for a suitable replacement.
> at
> org.apache.tapestry5.internal.services.InternalClassTransformationImpl.removed(InternalClassTransformationImpl.java:2318)
> at
> org.apache.tapestry5.internal.services.InternalClassTransformationImpl.extendMethod(InternalClassTransformationImpl.java:1238)
> at
> org.equanda.t5gui.services.EquandaMessagesInjectionProvider.provideInjection(EquandaMessagesInjectionProvider.java:53)
You're using EquandaMessages from the Equanda package and its
InjectionProvider uses a method that was deprecated in 5.2-SNAPSHOT.
--
Thiago H. de Paula Figueiredo
Independent Java, Apache Tapestry 5 and Hibernate consultant, developer,
and instructor
Owner, software architect and developer, Ars Machina Tecnologia da
Informação Ltda.
http://www.arsmachina.com.br
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
For additional commands, e-mail: users-help@tapestry.apache.org
Re: [5.2] unexpected TransformationException
Posted by "Thiago H. de Paula Figueiredo" <th...@gmail.com>.
On Wed, 03 Mar 2010 12:54:10 -0300, Howard Lewis Ship <hl...@gmail.com>
wrote:
> The new approach makes it so much easier to add meta-programming to
> component classes and it repesents a path away from Javassist. I've
> been making the judgement call that these benefits outweigh the costs
> ... but what we're seeing is the pain of a popular library that makes
> used of the 5.1 version of the API not working on the 5.2 API. It puts
> the onus on the external libraries to branch and create new versions
> that work against the 5.2 API.
This change affects very few places, so I think the API improment is worth
the non-backward compatibility.
--
Thiago H. de Paula Figueiredo
Independent Java, Apache Tapestry 5 and Hibernate consultant, developer,
and instructor
Owner, software architect and developer, Ars Machina Tecnologia da
Informação Ltda.
http://www.arsmachina.com.br
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
For additional commands, e-mail: users-help@tapestry.apache.org
Re: [5.2] unexpected TransformationException
Posted by Howard Lewis Ship <hl...@gmail.com>.
The problem is that
org.equanda.t5gui.services.EquandaMessagesInjectionProvider is coded
against Tapestry 5.1.
This brings up a painful issue: fixing fundamental problems vs.
perfect backwards compatibility,.
The changes I've made to the ClassTransformation interface are really
keen ... but they don't mix with the Tapestry 5.0/5.1 approach. The
new approach is about adding advice to methods (and a few other
things, like opening access to private fields and methods without
using reflection) ... the old approach is about writing bytecode into
methods.
The new approach makes it so much easier to add meta-programming to
component classes and it repesents a path away from Javassist. I've
been making the judgement call that these benefits outweigh the costs
... but what we're seeing is the pain of a popular library that makes
used of the 5.1 version of the API not working on the 5.2 API. It puts
the onus on the external libraries to branch and create new versions
that work against the 5.2 API.
On Tue, Mar 2, 2010 at 11:23 PM, Joachim Van der Auwera
<jo...@progs.be> wrote:
> Dear Howard,
>
> Thanks for your reply.
>
> I am not using ComponentClassTransformWorker, so it must be something else.
>
> Full stacktrace is :
>
> ERROR [org.apache.tapestry5.services.TapestryModule.RequestExceptionHandler]
> Processing of request failed with uncaught exception:
> java.lang.ClassNotFoundException: caught an exception while obtaining a
> class file for org.skabacca.gui.pages.Matching
> org.apache.tapestry5.The :
> java.lang.ClassNotFoundException: caught an exception while obtaining a
> class file for org.skabacca.gui.pages.Matching [at
> classpath:org/equanda/t5nav/components/PageLink.tml, line 2]
> at
> org.apache.tapestry5.internal.structure.ComponentPageElementImpl.triggerContextEvent(ComponentPageElementImpl.java:1146)
> at
> org.apache.tapestry5.internal.services.ComponentEventRequestHandlerImpl.handle(ComponentEventRequestHandlerImpl.java:87)
> at
> org.apache.tapestry5.internal.services.ImmediateActionRenderResponseFilter.handle(ImmediateActionRenderResponseFilter.java:42)
> at
> $ComponentEventRequestHandler_12720c83991.handle($ComponentEventRequestHandler_12720c83991.java)
> at
> org.apache.tapestry5.internal.services.AjaxFilter.handle(AjaxFilter.java:42)
> at
> $ComponentEventRequestHandler_12720c83991.handle($ComponentEventRequestHandler_12720c83991.java)
> at
> org.apache.tapestry5.upload.internal.services.UploadExceptionFilter.handle(UploadExceptionFilter.java:75)
> at
> $ComponentEventRequestHandler_12720c83991.handle($ComponentEventRequestHandler_12720c83991.java)
> at
> org.apache.tapestry5.services.TapestryModule$38.handle(TapestryModule.java:2499)
> at
> $ComponentEventRequestHandler_12720c83991.handle($ComponentEventRequestHandler_12720c83991.java)
> at
> $ComponentEventRequestHandler_12720c8389f.handle($ComponentEventRequestHandler_12720c8389f.java)
> at
> org.apache.tapestry5.internal.services.ComponentRequestHandlerTerminator.handleComponentEvent(ComponentRequestHandlerTerminator.java:43)
> at
> org.chenillekit.access.services.impl.CookieRedirectAccessFilter.handleComponentEvent(CookieRedirectAccessFilter.java:125)
> at
> $ComponentRequestHandler_12720c838a0.handleComponentEvent($ComponentRequestHandler_12720c838a0.java)
> at
> org.skabacca.gui.services.AppServerLoginFilter.handleComponentEvent(AppServerLoginFilter.java:51)
> at
> $ComponentRequestHandler_12720c838a0.handleComponentEvent($ComponentRequestHandler_12720c838a0.java)
> at
> org.apache.tapestry5.services.InitializeActivePageName.handleComponentEvent(InitializeActivePageName.java:39)
> at
> $ComponentRequestHandler_12720c838a0.handleComponentEvent($ComponentRequestHandler_12720c838a0.java)
> at
> org.chenillekit.access.services.impl.ComponentRequestAccessFilter.handleComponentEvent(ComponentRequestAccessFilter.java:81)
> at
> $ComponentRequestFilter_12720c8389c.handleComponentEvent($ComponentRequestFilter_12720c8389c.java)
> at
> $ComponentRequestHandler_12720c838a0.handleComponentEvent($ComponentRequestHandler_12720c838a0.java)
> at
> $ComponentRequestHandler_12720c8388c.handleComponentEvent($ComponentRequestHandler_12720c8388c.java)
> at
> org.apache.tapestry5.internal.services.ComponentEventDispatcher.dispatch(ComponentEventDispatcher.java:46)
> at $Dispatcher_12720c8388e.dispatch($Dispatcher_12720c8388e.java)
> at $Dispatcher_12720c83884.dispatch($Dispatcher_12720c83884.java)
> at
> org.apache.tapestry5.services.TapestryModule$RequestHandlerTerminator.service(TapestryModule.java:291)
> at org.equanda.t5gui.services.T5guiModule$7.service(T5guiModule.java:188)
> at $RequestFilter_12720c83883.service($RequestFilter_12720c83883.java)
> at $RequestHandler_12720c83885.service($RequestHandler_12720c83885.java)
> at org.skabacca.gui.services.AppModule$1.service(AppModule.java:148)
> at $RequestFilter_12720c83882.service($RequestFilter_12720c83882.java)
> at $RequestHandler_12720c83885.service($RequestHandler_12720c83885.java)
> at
> org.equanda.tapestry5.services.EquandaModule$1.service(EquandaModule.java:84)
> at $RequestFilter_12720c83881.service($RequestFilter_12720c83881.java)
> at $RequestHandler_12720c83885.service($RequestHandler_12720c83885.java)
> at
> org.apache.tapestry5.internal.services.RequestErrorFilter.service(RequestErrorFilter.java:26)
> at $RequestHandler_12720c83885.service($RequestHandler_12720c83885.java)
> at
> org.apache.tapestry5.services.TapestryModule$4.service(TapestryModule.java:917)
> at $RequestHandler_12720c83885.service($RequestHandler_12720c83885.java)
> at
> org.apache.tapestry5.services.TapestryModule$3.service(TapestryModule.java:907)
> at $RequestHandler_12720c83885.service($RequestHandler_12720c83885.java)
> at
> org.apache.tapestry5.internal.services.StaticFilesFilter.service(StaticFilesFilter.java:85)
> at $RequestHandler_12720c83885.service($RequestHandler_12720c83885.java)
> at
> org.apache.tapestry5.internal.services.CheckForUpdatesFilter$2.invoke(CheckForUpdatesFilter.java:90)
> at
> org.apache.tapestry5.internal.services.CheckForUpdatesFilter$2.invoke(CheckForUpdatesFilter.java:81)
> at
> org.apache.tapestry5.ioc.internal.util.ConcurrentBarrier.withRead(ConcurrentBarrier.java:85)
> at
> org.apache.tapestry5.internal.services.CheckForUpdatesFilter.service(CheckForUpdatesFilter.java:103)
> at $RequestHandler_12720c83885.service($RequestHandler_12720c83885.java)
> at $RequestHandler_12720c83878.service($RequestHandler_12720c83878.java)
> at
> org.apache.tapestry5.services.TapestryModule$HttpServletRequestHandlerTerminator.service(TapestryModule.java:242)
> at
> org.apache.tapestry5.upload.internal.services.MultipartServletRequestFilter.service(MultipartServletRequestFilter.java:44)
> at
> $HttpServletRequestHandler_12720c8387a.service($HttpServletRequestHandler_12720c8387a.java)
> at
> org.apache.tapestry5.internal.gzip.GZipFilter.service(GZipFilter.java:53)
> at
> $HttpServletRequestHandler_12720c8387a.service($HttpServletRequestHandler_12720c8387a.java)
> at
> org.apache.tapestry5.internal.services.IgnoredPathsFilter.service(IgnoredPathsFilter.java:62)
> at
> $HttpServletRequestFilter_12720c83876.service($HttpServletRequestFilter_12720c83876.java)
> at
> $HttpServletRequestHandler_12720c8387a.service($HttpServletRequestHandler_12720c8387a.java)
> at
> org.apache.tapestry5.services.TapestryModule$2.service(TapestryModule.java:860)
> at
> $HttpServletRequestHandler_12720c8387a.service($HttpServletRequestHandler_12720c8387a.java)
> at
> $HttpServletRequestHandler_12720c83874.service($HttpServletRequestHandler_12720c83874.java)
> at org.apache.tapestry5.TapestryFilter.doFilter(TapestryFilter.java:147)
> at
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
> at
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
> at
> org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
> at
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
> at
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
> at
> org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)
> at
> org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
> at
> org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:179)
> at
> org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:524)
> at
> org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:84)
> at
> org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
> at
> org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
> at
> org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:157)
> at
> org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
> at
> org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:262)
> at
> org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
> at
> org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
> at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:446)
> at java.lang.Thread.run(Thread.java:619)
> Caused by: java.lang.RuntimeException: java.lang.ClassNotFoundException:
> caught an exception while obtaining a class file for
> org.skabacca.gui.pages.Matching
> at
> org.apache.tapestry5.internal.services.ComponentInstantiatorSourceImpl.findClass(ComponentInstantiatorSourceImpl.java:300)
> at
> org.apache.tapestry5.internal.services.ComponentInstantiatorSourceImpl.getInstantiator(ComponentInstantiatorSourceImpl.java:276)
> at
> $ComponentInstantiatorSource_12720c83865.getInstantiator($ComponentInstantiatorSource_12720c83865.java)
> at
> org.apache.tapestry5.internal.services.ComponentModelSourceImpl.getModel(ComponentModelSourceImpl.java:34)
> at
> org.apache.tapestry5.internal.services.ComponentModelSourceImpl.getPageModel(ComponentModelSourceImpl.java:39)
> at
> $ComponentModelSource_12720c83965.getPageModel($ComponentModelSource_12720c83965.java)
> at
> org.apache.tapestry5.internal.services.PageActivationContextCollectorImpl.collectPageActivationContext(PageActivationContextCollectorImpl.java:63)
> at
> $PageActivationContextCollector_12720c83870.collectPageActivationContext($PageActivationContextCollector_12720c83870.java)
> at
> org.apache.tapestry5.internal.services.LinkSourceImpl.createPageRenderLink(LinkSourceImpl.java:102)
> at
> $LinkSource_12720c8386e.createPageRenderLink($LinkSource_12720c8386e.java)
> at
> org.apache.tapestry5.internal.structure.ComponentPageElementResourcesImpl.createPageRenderLink(ComponentPageElementResourcesImpl.java:100)
> at
> org.apache.tapestry5.internal.structure.ComponentPageElementImpl.createPageLink(ComponentPageElementImpl.java:1276)
> at
> org.apache.tapestry5.internal.structure.InternalComponentResourcesImpl.createPageLink(InternalComponentResourcesImpl.java:206)
> at
> org.equanda.t5nav.components.PageLink.onActionFromPageLink(PageLink.java:74)
> at $MethodAccess_12720c838ec.invoke($MethodAccess_12720c838ec.java)
> at
> org.apache.tapestry5.internal.transform.BaseEventHandlerMethodInvoker.invokeEventHandlerMethod(BaseEventHandlerMethodInvoker.java:52)
> at
> org.apache.tapestry5.internal.transform.OnEventWorker$4.invokeEventHandlers(OnEventWorker.java:136)
> at
> org.apache.tapestry5.internal.transform.OnEventWorker$4.advise(OnEventWorker.java:115)
> at
> org.apache.tapestry5.internal.services.AbstractComponentMethodInvocation.proceed(AbstractComponentMethodInvocation.java:86)
> at
> org.equanda.t5nav.components.PageLink.dispatchComponentEvent(PageLink.java)
> at
> org.apache.tapestry5.internal.structure.ComponentPageElementImpl.dispatchEvent(ComponentPageElementImpl.java:938)
> at
> org.apache.tapestry5.internal.structure.ComponentPageElementImpl.triggerContextEvent(ComponentPageElementImpl.java:1126)
> ... 79 more
> Caused by: java.lang.ClassNotFoundException: caught an exception while
> obtaining a class file for org.skabacca.gui.pages.Matching
> at javassist.Loader.findClass(Loader.java:359)
> at
> org.apache.tapestry5.internal.services.ComponentInstantiatorSourceImpl$PackageAwareLoader.findClass(ComponentInstantiatorSourceImpl.java:94)
> at javassist.Loader.loadClass(Loader.java:311)
> at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
> at
> org.apache.tapestry5.internal.services.ComponentInstantiatorSourceImpl.findClass(ComponentInstantiatorSourceImpl.java:296)
> ... 100 more
> Caused by: org.apache.tapestry5.internal.services.TransformationException:
> Error obtaining injected value for field
> org.skabacca.gui.pages.Matching.messages: Method
> ClassTransformation.extendMethod(TransformMethodSignature, String) has been
> deprecated and is no longer functional. Please consult the JavaDoc for a
> suitable replacement.
> at
> org.apache.tapestry5.internal.services.ComponentClassTransformerImpl.transformComponentClass(ComponentClassTransformerImpl.java:176)
> at
> $ComponentClassTransformer_12720c83867.transformComponentClass($ComponentClassTransformer_12720c83867.java)
> at
> org.apache.tapestry5.internal.services.ComponentInstantiatorSourceImpl.onLoad(ComponentInstantiatorSourceImpl.java:205)
> at javassist.Loader.findClass(Loader.java:340)
> ... 104 more
> Caused by: java.lang.RuntimeException: Error obtaining injected value for
> field org.skabacca.gui.pages.Matching.messages: Method
> ClassTransformation.extendMethod(TransformMethodSignature, String) has been
> deprecated and is no longer functional. Please consult the JavaDoc for a
> suitable replacement.
> at
> org.apache.tapestry5.internal.transform.InjectWorker.transform(InjectWorker.java:68)
> at
> $ComponentClassTransformWorker_12720c838c4.transform($ComponentClassTransformWorker_12720c838c4.java)
> at
> $ComponentClassTransformWorker_12720c838b9.transform($ComponentClassTransformWorker_12720c838b9.java)
> at
> org.apache.tapestry5.internal.services.ComponentClassTransformerImpl.transformComponentClass(ComponentClassTransformerImpl.java:170)
> ... 107 more
> Caused by: java.lang.RuntimeException: Method
> ClassTransformation.extendMethod(TransformMethodSignature, String) has been
> deprecated and is no longer functional. Please consult the JavaDoc for a
> suitable replacement.
> at
> org.apache.tapestry5.internal.services.InternalClassTransformationImpl.removed(InternalClassTransformationImpl.java:2318)
> at
> org.apache.tapestry5.internal.services.InternalClassTransformationImpl.extendMethod(InternalClassTransformationImpl.java:1238)
> at
> org.equanda.t5gui.services.EquandaMessagesInjectionProvider.provideInjection(EquandaMessagesInjectionProvider.java:53)
> at
> $InjectionProvider_12720c838c6.provideInjection($InjectionProvider_12720c838c6.java)
> at
> $InjectionProvider_12720c838bd.provideInjection($InjectionProvider_12720c838bd.java)
> at
> org.apache.tapestry5.internal.transform.InjectWorker.transform(InjectWorker.java:57)
> ... 110 more
>
> Kind regards,
> Joachim
>
> Howard Lewis Ship wrote:
>>
>> You may have to recode some of your custom
>> ComponentClassTransformWorker. If you don't have one, show us the
>> full stack trace so I can see what went wrong.
>>
>> You're seeing some imperfect backwards compatibility in the process of
>> moving away from Javassist. What you used to accomplish (in 5.0 and
>> 5.1) with Javassist scripting is now accomplished largely using
>> ComponentMethodAdvice and some related techniques. The end result is
>> quite nice.
>>
>> On Tue, Mar 2, 2010 at 1:34 PM, Joachim Van der Auwera <jo...@progs.be>
>> wrote:
>>
>>>
>>> Hi,
>>>
>>> Using the latest snapshot, I get the following error :
>>>
>>> Caused by:
>>> org.apache.tapestry5.internal.services.TransformationException:
>>> Error obtaining injected value for field
>>> org.skabacca.gui.pages.Matching.messages: Method
>>> ClassTransformation.extendMethod(TransformMethodSignature, String) has
>>> been
>>> deprecated and is no longer functional. Please consult the JavaDoc for a
>>> suitable replacement.
>>>
>>> which happens on a field declared as (injecting a service) :
>>>
>>> @Inject
>>> private EquandaMessages messages;
>>>
>>>
>>> This was working a couple of days ago, but is now broken.
>>>
>>> Any idea what is wrong and how I can fix this?
>>>
>>> Kind regards,
>>> Joachim
>>>
>>> --
>>> Joachim Van der Auwera
>>> PROGS bvba, progs.be
>>>
>>>
>>> ---------------------------------------------------------------------
>>> To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
>>> For additional commands, e-mail: users-help@tapestry.apache.org
>>>
>>>
>>>
>>
>>
>>
>>
>
>
> --
> Joachim Van der Auwera
> PROGS bvba, progs.be
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
> For additional commands, e-mail: users-help@tapestry.apache.org
>
>
--
Howard M. Lewis Ship
Creator of Apache Tapestry
The source for Tapestry training, mentoring and support. Contact me to
learn how I can get you up and productive in Tapestry fast!
(971) 678-5210
http://howardlewisship.com
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
For additional commands, e-mail: users-help@tapestry.apache.org
Re: [5.2] unexpected TransformationException
Posted by Joachim Van der Auwera <jo...@progs.be>.
Dear Howard,
Thanks for your reply.
I am not using ComponentClassTransformWorker, so it must be something else.
Full stacktrace is :
ERROR
[org.apache.tapestry5.services.TapestryModule.RequestExceptionHandler]
Processing of request failed with uncaught exception:
java.lang.ClassNotFoundException: caught an exception while obtaining a
class file for org.skabacca.gui.pages.Matching
org.apache.tapestry5.runtime.ComponentEventException:
java.lang.ClassNotFoundException: caught an exception while obtaining a
class file for org.skabacca.gui.pages.Matching [at
classpath:org/equanda/t5nav/components/PageLink.tml, line 2]
at
org.apache.tapestry5.internal.structure.ComponentPageElementImpl.triggerContextEvent(ComponentPageElementImpl.java:1146)
at
org.apache.tapestry5.internal.services.ComponentEventRequestHandlerImpl.handle(ComponentEventRequestHandlerImpl.java:87)
at
org.apache.tapestry5.internal.services.ImmediateActionRenderResponseFilter.handle(ImmediateActionRenderResponseFilter.java:42)
at
$ComponentEventRequestHandler_12720c83991.handle($ComponentEventRequestHandler_12720c83991.java)
at
org.apache.tapestry5.internal.services.AjaxFilter.handle(AjaxFilter.java:42)
at
$ComponentEventRequestHandler_12720c83991.handle($ComponentEventRequestHandler_12720c83991.java)
at
org.apache.tapestry5.upload.internal.services.UploadExceptionFilter.handle(UploadExceptionFilter.java:75)
at
$ComponentEventRequestHandler_12720c83991.handle($ComponentEventRequestHandler_12720c83991.java)
at
org.apache.tapestry5.services.TapestryModule$38.handle(TapestryModule.java:2499)
at
$ComponentEventRequestHandler_12720c83991.handle($ComponentEventRequestHandler_12720c83991.java)
at
$ComponentEventRequestHandler_12720c8389f.handle($ComponentEventRequestHandler_12720c8389f.java)
at
org.apache.tapestry5.internal.services.ComponentRequestHandlerTerminator.handleComponentEvent(ComponentRequestHandlerTerminator.java:43)
at
org.chenillekit.access.services.impl.CookieRedirectAccessFilter.handleComponentEvent(CookieRedirectAccessFilter.java:125)
at
$ComponentRequestHandler_12720c838a0.handleComponentEvent($ComponentRequestHandler_12720c838a0.java)
at
org.skabacca.gui.services.AppServerLoginFilter.handleComponentEvent(AppServerLoginFilter.java:51)
at
$ComponentRequestHandler_12720c838a0.handleComponentEvent($ComponentRequestHandler_12720c838a0.java)
at
org.apache.tapestry5.services.InitializeActivePageName.handleComponentEvent(InitializeActivePageName.java:39)
at
$ComponentRequestHandler_12720c838a0.handleComponentEvent($ComponentRequestHandler_12720c838a0.java)
at
org.chenillekit.access.services.impl.ComponentRequestAccessFilter.handleComponentEvent(ComponentRequestAccessFilter.java:81)
at
$ComponentRequestFilter_12720c8389c.handleComponentEvent($ComponentRequestFilter_12720c8389c.java)
at
$ComponentRequestHandler_12720c838a0.handleComponentEvent($ComponentRequestHandler_12720c838a0.java)
at
$ComponentRequestHandler_12720c8388c.handleComponentEvent($ComponentRequestHandler_12720c8388c.java)
at
org.apache.tapestry5.internal.services.ComponentEventDispatcher.dispatch(ComponentEventDispatcher.java:46)
at $Dispatcher_12720c8388e.dispatch($Dispatcher_12720c8388e.java)
at $Dispatcher_12720c83884.dispatch($Dispatcher_12720c83884.java)
at
org.apache.tapestry5.services.TapestryModule$RequestHandlerTerminator.service(TapestryModule.java:291)
at
org.equanda.t5gui.services.T5guiModule$7.service(T5guiModule.java:188)
at $RequestFilter_12720c83883.service($RequestFilter_12720c83883.java)
at $RequestHandler_12720c83885.service($RequestHandler_12720c83885.java)
at org.skabacca.gui.services.AppModule$1.service(AppModule.java:148)
at $RequestFilter_12720c83882.service($RequestFilter_12720c83882.java)
at $RequestHandler_12720c83885.service($RequestHandler_12720c83885.java)
at
org.equanda.tapestry5.services.EquandaModule$1.service(EquandaModule.java:84)
at $RequestFilter_12720c83881.service($RequestFilter_12720c83881.java)
at $RequestHandler_12720c83885.service($RequestHandler_12720c83885.java)
at
org.apache.tapestry5.internal.services.RequestErrorFilter.service(RequestErrorFilter.java:26)
at $RequestHandler_12720c83885.service($RequestHandler_12720c83885.java)
at
org.apache.tapestry5.services.TapestryModule$4.service(TapestryModule.java:917)
at $RequestHandler_12720c83885.service($RequestHandler_12720c83885.java)
at
org.apache.tapestry5.services.TapestryModule$3.service(TapestryModule.java:907)
at $RequestHandler_12720c83885.service($RequestHandler_12720c83885.java)
at
org.apache.tapestry5.internal.services.StaticFilesFilter.service(StaticFilesFilter.java:85)
at $RequestHandler_12720c83885.service($RequestHandler_12720c83885.java)
at
org.apache.tapestry5.internal.services.CheckForUpdatesFilter$2.invoke(CheckForUpdatesFilter.java:90)
at
org.apache.tapestry5.internal.services.CheckForUpdatesFilter$2.invoke(CheckForUpdatesFilter.java:81)
at
org.apache.tapestry5.ioc.internal.util.ConcurrentBarrier.withRead(ConcurrentBarrier.java:85)
at
org.apache.tapestry5.internal.services.CheckForUpdatesFilter.service(CheckForUpdatesFilter.java:103)
at $RequestHandler_12720c83885.service($RequestHandler_12720c83885.java)
at $RequestHandler_12720c83878.service($RequestHandler_12720c83878.java)
at
org.apache.tapestry5.services.TapestryModule$HttpServletRequestHandlerTerminator.service(TapestryModule.java:242)
at
org.apache.tapestry5.upload.internal.services.MultipartServletRequestFilter.service(MultipartServletRequestFilter.java:44)
at
$HttpServletRequestHandler_12720c8387a.service($HttpServletRequestHandler_12720c8387a.java)
at
org.apache.tapestry5.internal.gzip.GZipFilter.service(GZipFilter.java:53)
at
$HttpServletRequestHandler_12720c8387a.service($HttpServletRequestHandler_12720c8387a.java)
at
org.apache.tapestry5.internal.services.IgnoredPathsFilter.service(IgnoredPathsFilter.java:62)
at
$HttpServletRequestFilter_12720c83876.service($HttpServletRequestFilter_12720c83876.java)
at
$HttpServletRequestHandler_12720c8387a.service($HttpServletRequestHandler_12720c8387a.java)
at
org.apache.tapestry5.services.TapestryModule$2.service(TapestryModule.java:860)
at
$HttpServletRequestHandler_12720c8387a.service($HttpServletRequestHandler_12720c8387a.java)
at
$HttpServletRequestHandler_12720c83874.service($HttpServletRequestHandler_12720c83874.java)
at org.apache.tapestry5.TapestryFilter.doFilter(TapestryFilter.java:147)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at
org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)
at
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
at
org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:179)
at
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:524)
at
org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:84)
at
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at
org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:157)
at
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:262)
at
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
at
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
at
org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:446)
at java.lang.Thread.run(Thread.java:619)
Caused by: java.lang.RuntimeException: java.lang.ClassNotFoundException:
caught an exception while obtaining a class file for
org.skabacca.gui.pages.Matching
at
org.apache.tapestry5.internal.services.ComponentInstantiatorSourceImpl.findClass(ComponentInstantiatorSourceImpl.java:300)
at
org.apache.tapestry5.internal.services.ComponentInstantiatorSourceImpl.getInstantiator(ComponentInstantiatorSourceImpl.java:276)
at
$ComponentInstantiatorSource_12720c83865.getInstantiator($ComponentInstantiatorSource_12720c83865.java)
at
org.apache.tapestry5.internal.services.ComponentModelSourceImpl.getModel(ComponentModelSourceImpl.java:34)
at
org.apache.tapestry5.internal.services.ComponentModelSourceImpl.getPageModel(ComponentModelSourceImpl.java:39)
at
$ComponentModelSource_12720c83965.getPageModel($ComponentModelSource_12720c83965.java)
at
org.apache.tapestry5.internal.services.PageActivationContextCollectorImpl.collectPageActivationContext(PageActivationContextCollectorImpl.java:63)
at
$PageActivationContextCollector_12720c83870.collectPageActivationContext($PageActivationContextCollector_12720c83870.java)
at
org.apache.tapestry5.internal.services.LinkSourceImpl.createPageRenderLink(LinkSourceImpl.java:102)
at
$LinkSource_12720c8386e.createPageRenderLink($LinkSource_12720c8386e.java)
at
org.apache.tapestry5.internal.structure.ComponentPageElementResourcesImpl.createPageRenderLink(ComponentPageElementResourcesImpl.java:100)
at
org.apache.tapestry5.internal.structure.ComponentPageElementImpl.createPageLink(ComponentPageElementImpl.java:1276)
at
org.apache.tapestry5.internal.structure.InternalComponentResourcesImpl.createPageLink(InternalComponentResourcesImpl.java:206)
at
org.equanda.t5nav.components.PageLink.onActionFromPageLink(PageLink.java:74)
at $MethodAccess_12720c838ec.invoke($MethodAccess_12720c838ec.java)
at
org.apache.tapestry5.internal.transform.BaseEventHandlerMethodInvoker.invokeEventHandlerMethod(BaseEventHandlerMethodInvoker.java:52)
at
org.apache.tapestry5.internal.transform.OnEventWorker$4.invokeEventHandlers(OnEventWorker.java:136)
at
org.apache.tapestry5.internal.transform.OnEventWorker$4.advise(OnEventWorker.java:115)
at
org.apache.tapestry5.internal.services.AbstractComponentMethodInvocation.proceed(AbstractComponentMethodInvocation.java:86)
at
org.equanda.t5nav.components.PageLink.dispatchComponentEvent(PageLink.java)
at
org.apache.tapestry5.internal.structure.ComponentPageElementImpl.dispatchEvent(ComponentPageElementImpl.java:938)
at
org.apache.tapestry5.internal.structure.ComponentPageElementImpl.triggerContextEvent(ComponentPageElementImpl.java:1126)
... 79 more
Caused by: java.lang.ClassNotFoundException: caught an exception while
obtaining a class file for org.skabacca.gui.pages.Matching
at javassist.Loader.findClass(Loader.java:359)
at
org.apache.tapestry5.internal.services.ComponentInstantiatorSourceImpl$PackageAwareLoader.findClass(ComponentInstantiatorSourceImpl.java:94)
at javassist.Loader.loadClass(Loader.java:311)
at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
at
org.apache.tapestry5.internal.services.ComponentInstantiatorSourceImpl.findClass(ComponentInstantiatorSourceImpl.java:296)
... 100 more
Caused by:
org.apache.tapestry5.internal.services.TransformationException: Error
obtaining injected value for field
org.skabacca.gui.pages.Matching.messages: Method
ClassTransformation.extendMethod(TransformMethodSignature, String) has
been deprecated and is no longer functional. Please consult the JavaDoc
for a suitable replacement.
at
org.apache.tapestry5.internal.services.ComponentClassTransformerImpl.transformComponentClass(ComponentClassTransformerImpl.java:176)
at
$ComponentClassTransformer_12720c83867.transformComponentClass($ComponentClassTransformer_12720c83867.java)
at
org.apache.tapestry5.internal.services.ComponentInstantiatorSourceImpl.onLoad(ComponentInstantiatorSourceImpl.java:205)
at javassist.Loader.findClass(Loader.java:340)
... 104 more
Caused by: java.lang.RuntimeException: Error obtaining injected value
for field org.skabacca.gui.pages.Matching.messages: Method
ClassTransformation.extendMethod(TransformMethodSignature, String) has
been deprecated and is no longer functional. Please consult the JavaDoc
for a suitable replacement.
at
org.apache.tapestry5.internal.transform.InjectWorker.transform(InjectWorker.java:68)
at
$ComponentClassTransformWorker_12720c838c4.transform($ComponentClassTransformWorker_12720c838c4.java)
at
$ComponentClassTransformWorker_12720c838b9.transform($ComponentClassTransformWorker_12720c838b9.java)
at
org.apache.tapestry5.internal.services.ComponentClassTransformerImpl.transformComponentClass(ComponentClassTransformerImpl.java:170)
... 107 more
Caused by: java.lang.RuntimeException: Method
ClassTransformation.extendMethod(TransformMethodSignature, String) has
been deprecated and is no longer functional. Please consult the JavaDoc
for a suitable replacement.
at
org.apache.tapestry5.internal.services.InternalClassTransformationImpl.removed(InternalClassTransformationImpl.java:2318)
at
org.apache.tapestry5.internal.services.InternalClassTransformationImpl.extendMethod(InternalClassTransformationImpl.java:1238)
at
org.equanda.t5gui.services.EquandaMessagesInjectionProvider.provideInjection(EquandaMessagesInjectionProvider.java:53)
at
$InjectionProvider_12720c838c6.provideInjection($InjectionProvider_12720c838c6.java)
at
$InjectionProvider_12720c838bd.provideInjection($InjectionProvider_12720c838bd.java)
at
org.apache.tapestry5.internal.transform.InjectWorker.transform(InjectWorker.java:57)
... 110 more
Kind regards,
Joachim
Howard Lewis Ship wrote:
> You may have to recode some of your custom
> ComponentClassTransformWorker. If you don't have one, show us the
> full stack trace so I can see what went wrong.
>
> You're seeing some imperfect backwards compatibility in the process of
> moving away from Javassist. What you used to accomplish (in 5.0 and
> 5.1) with Javassist scripting is now accomplished largely using
> ComponentMethodAdvice and some related techniques. The end result is
> quite nice.
>
> On Tue, Mar 2, 2010 at 1:34 PM, Joachim Van der Auwera <jo...@progs.be> wrote:
>
>> Hi,
>>
>> Using the latest snapshot, I get the following error :
>>
>> Caused by: org.apache.tapestry5.internal.services.TransformationException:
>> Error obtaining injected value for field
>> org.skabacca.gui.pages.Matching.messages: Method
>> ClassTransformation.extendMethod(TransformMethodSignature, String) has been
>> deprecated and is no longer functional. Please consult the JavaDoc for a
>> suitable replacement.
>>
>> which happens on a field declared as (injecting a service) :
>>
>> @Inject
>> private EquandaMessages messages;
>>
>>
>> This was working a couple of days ago, but is now broken.
>>
>> Any idea what is wrong and how I can fix this?
>>
>> Kind regards,
>> Joachim
>>
>> --
>> Joachim Van der Auwera
>> PROGS bvba, progs.be
>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
>> For additional commands, e-mail: users-help@tapestry.apache.org
>>
>>
>>
>
>
>
>
--
Joachim Van der Auwera
PROGS bvba, progs.be
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
For additional commands, e-mail: users-help@tapestry.apache.org
Re: [5.2] unexpected TransformationException
Posted by Howard Lewis Ship <hl...@gmail.com>.
On Wed, Mar 3, 2010 at 8:24 AM, Massimo Lusetti <ml...@gmail.com> wrote:
> On Tue, Mar 2, 2010 at 11:39 PM, Howard Lewis Ship <hl...@gmail.com> wrote:
>
>> You may have to recode some of your custom
>> ComponentClassTransformWorker. If you don't have one, show us the
>> full stack trace so I can see what went wrong.
>>
>> You're seeing some imperfect backwards compatibility in the process of
>> moving away from Javassist. What you used to accomplish (in 5.0 and
>> 5.1) with Javassist scripting is now accomplished largely using
>> ComponentMethodAdvice and some related techniques. The end result is
>> quite nice.
>
> Did you have had possibility to measure performances before and after
> this changes?
>
> I don't have any number by my side but a gut feeling of something more
> slow then before... as i said is just a feeling about a very
> "persistent" heavy application.
Haven't started performance analysis yet. In the long run, once
Javassist is stripped out, I think we'll see real performance
improvements from having ASM do the bytecode instead. However, the
general approach of having field access delegate out to callbacks will
have some more overhead than the inline bytecode approach (with
Javassist). I don't think the difference will be significant, and what
I'm seeing as I do more work is that we're making fewer changes to the
loaded class than before.
Let me expand on that. In the past, if a component needed to perform
an operation that used an injected service (such as @Environmental and
the Environment service), we'd have to inject a field with the
Environment, and write the code (as Javassist script) that accesses
the Environment via the injected field. By contrast, now the
ComponentCallTransformWorker will have the Environment injected into
it and will, in turn, inject inner class callbacks into the component.
The component has no knowledge of the Environment service, just the
callback associated with field access.
>
> Cheers
> --
> Massimo
> http://meridio.blogspot.com
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
> For additional commands, e-mail: users-help@tapestry.apache.org
>
>
--
Howard M. Lewis Ship
Creator of Apache Tapestry
The source for Tapestry training, mentoring and support. Contact me to
learn how I can get you up and productive in Tapestry fast!
(971) 678-5210
http://howardlewisship.com
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
For additional commands, e-mail: users-help@tapestry.apache.org
Re: [5.2] unexpected TransformationException
Posted by Massimo Lusetti <ml...@gmail.com>.
On Tue, Mar 2, 2010 at 11:39 PM, Howard Lewis Ship <hl...@gmail.com> wrote:
> You may have to recode some of your custom
> ComponentClassTransformWorker. If you don't have one, show us the
> full stack trace so I can see what went wrong.
>
> You're seeing some imperfect backwards compatibility in the process of
> moving away from Javassist. What you used to accomplish (in 5.0 and
> 5.1) with Javassist scripting is now accomplished largely using
> ComponentMethodAdvice and some related techniques. The end result is
> quite nice.
Did you have had possibility to measure performances before and after
this changes?
I don't have any number by my side but a gut feeling of something more
slow then before... as i said is just a feeling about a very
"persistent" heavy application.
Cheers
--
Massimo
http://meridio.blogspot.com
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
For additional commands, e-mail: users-help@tapestry.apache.org
Re: [5.2] unexpected TransformationException
Posted by Howard Lewis Ship <hl...@gmail.com>.
You may have to recode some of your custom
ComponentClassTransformWorker. If you don't have one, show us the
full stack trace so I can see what went wrong.
You're seeing some imperfect backwards compatibility in the process of
moving away from Javassist. What you used to accomplish (in 5.0 and
5.1) with Javassist scripting is now accomplished largely using
ComponentMethodAdvice and some related techniques. The end result is
quite nice.
On Tue, Mar 2, 2010 at 1:34 PM, Joachim Van der Auwera <jo...@progs.be> wrote:
> Hi,
>
> Using the latest snapshot, I get the following error :
>
> Caused by: org.apache.tapestry5.internal.services.TransformationException:
> Error obtaining injected value for field
> org.skabacca.gui.pages.Matching.messages: Method
> ClassTransformation.extendMethod(TransformMethodSignature, String) has been
> deprecated and is no longer functional. Please consult the JavaDoc for a
> suitable replacement.
>
> which happens on a field declared as (injecting a service) :
>
> @Inject
> private EquandaMessages messages;
>
>
> This was working a couple of days ago, but is now broken.
>
> Any idea what is wrong and how I can fix this?
>
> Kind regards,
> Joachim
>
> --
> Joachim Van der Auwera
> PROGS bvba, progs.be
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
> For additional commands, e-mail: users-help@tapestry.apache.org
>
>
--
Howard M. Lewis Ship
Creator of Apache Tapestry
The source for Tapestry training, mentoring and support. Contact me to
learn how I can get you up and productive in Tapestry fast!
(971) 678-5210
http://howardlewisship.com
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
For additional commands, e-mail: users-help@tapestry.apache.org