Hi. I just did a test upgrade on one of our applications to 5.3-beta-6 (from 5.2.6) and I found two problem areas.
**** The first problem I encountered are connected with abstract classes and @Log (I have not tried other annotations). I have a parent class and two subclasses. The parent is declared as a abstract class as the logic in the subclasses will differ slightly but they are both using Parent.tml and the same setup routine. public abstract class Parent { @Log public void setupRender() { } } public class ChildA extends Parent { .... } public class ChildB extends Parent { @Override public void setupRender() { super.setupRender(); } .... } In T5.2.6, this was acceptable, but T5.3-beta-6 gives this this error: org.apache.tapestry5.internal.services.RenderQueueException Render queue error in SetupRender[ChildA]: Unable to locate Method public void setupRender(): com.example.newapp.pages.ChildA.setupRender() activeComponents: ChildA (class com.example.newapp.pages.ChildA) java.lang.NoSuchMethodException com.example.newapp.pages.ChildA.setupRender() (The stacktrace are included at the end of the e-mail) Please note that the error will _only_ occur if the page ChildA is accessed before ChildB. Once ChildB (with the overridden method) has been accessed, ChildA will work as expected. ***** The second problem is that the tailing whitespace on properties are no longer ignored. ${message:greeting } will therefore give a [[missing key: greeting ]] while ${message:greeting} works as it should. One could agree that we should not insert the whitespace, but as the editor (Eclipse) is eager to insert a whitespace after writing ${, this will probably be a problem for several users. Am I breaking the conventions here, or should I file 2 jiras? Regards Sigbjørn Tvedt ----------------------------------------------------------------------------- Stack trace from the parent/child problem: java.lang.Class.getDeclaredMethod(Class.java:1954) org.apache.tapestry5.internal.plastic.MethodInvocationBundle.findMethod(MethodInvocationBundle.java:59) org.apache.tapestry5.internal.plastic.MethodInvocationBundle.getMethod(MethodInvocationBundle.java:42) org.apache.tapestry5.internal.plastic.AbstractMethodInvocation.getMethod(AbstractMethodInvocation.java:110) org.apache.tapestry5.ioc.internal.services.MethodLogger.entry(MethodLogger.java:63) org.apache.tapestry5.ioc.internal.services.LoggingAdvice.advise(LoggingAdvice.java:41) org.apache.tapestry5.internal.plastic.AbstractMethodInvocation.proceed(AbstractMethodInvocation.java:86) com.example.newapp.pages.Parent.setupRender(Parent.java) com.example.newapp.pages.Parent.setupRender(Parent.java) org.apache.tapestry5.internal.structure.ComponentPageElementImpl$SetupRenderPhase.invokeComponent(ComponentPageElementImpl.java:174) org.apache.tapestry5.internal.structure.ComponentPageElementImpl$AbstractPhase.invoke(ComponentPageElementImpl.java:133) org.apache.tapestry5.internal.structure.ComponentPageElementImpl$SetupRenderPhase.render(ComponentPageElementImpl.java:181) org.apache.tapestry5.internal.services.RenderQueueImpl.run(RenderQueueImpl.java:72) org.apache.tapestry5.internal.services.PageRenderQueueImpl.render(PageRenderQueueImpl.java:124) org.apache.tapestry5.internal.services.MarkupRendererTerminator.renderMarkup(MarkupRendererTerminator.java:37) org.apache.tapestry5.services.TapestryModule$31.renderMarkup(TapestryModule.java:1998) org.apache.tapestry5.services.TapestryModule$30.renderMarkup(TapestryModule.java:1982) org.apache.tapestry5.services.TapestryModule$29.renderMarkup(TapestryModule.java:1964) org.apache.tapestry5.services.TapestryModule$28.renderMarkup(TapestryModule.java:1949) org.apache.tapestry5.services.TapestryModule$27.renderMarkup(TapestryModule.java:1935) org.apache.tapestry5.services.TapestryModule$26.renderMarkup(TapestryModule.java:1917) org.apache.tapestry5.services.TapestryModule$25.renderMarkup(TapestryModule.java:1898) org.apache.tapestry5.internal.services.PageMarkupRendererImpl.renderPageMarkup(PageMarkupRendererImpl.java:47) org.apache.tapestry5.internal.services.PageResponseRendererImpl.renderPageResponse(PageResponseRendererImpl.java:67) org.apache.tapestry5.internal.services.PageRenderRequestHandlerImpl.handle(PageRenderRequestHandlerImpl.java:64) org.apache.tapestry5.services.TapestryModule$38.handle(TapestryModule.java:2227) org.apache.tapestry5.internal.services.ComponentRequestHandlerTerminator.handlePageRender(ComponentRequestHandlerTerminator.java:48) org.apache.tapestry5.services.InitializeActivePageName.handlePageRender(InitializeActivePageName.java:47) org.apache.tapestry5.internal.services.PageRenderDispatcher.dispatch(PageRenderDispatcher.java:45) org.apache.tapestry5.services.TapestryModule$RequestHandlerTerminator.service(TapestryModule.java:297) org.apache.tapestry5.internal.services.RequestErrorFilter.service(RequestErrorFilter.java:26) org.apache.tapestry5.services.TapestryModule$3.service(TapestryModule.java:894) org.apache.tapestry5.services.TapestryModule$2.service(TapestryModule.java:884) org.apache.tapestry5.internal.services.StaticFilesFilter.service(StaticFilesFilter.java:90) com.example.newapp.services.AppModule$1.service(AppModule.java:90) org.apache.tapestry5.internal.services.CheckForUpdatesFilter$2.invoke(CheckForUpdatesFilter.java:105) org.apache.tapestry5.internal.services.CheckForUpdatesFilter$2.invoke(CheckForUpdatesFilter.java:95) org.apache.tapestry5.ioc.internal.util.ConcurrentBarrier.withRead(ConcurrentBarrier.java:85) org.apache.tapestry5.internal.services.CheckForUpdatesFilter.service(CheckForUpdatesFilter.java:119) org.apache.tapestry5.services.TapestryModule$HttpServletRequestHandlerTerminator.service(TapestryModule.java:248) org.apache.tapestry5.internal.gzip.GZipFilter.service(GZipFilter.java:53) org.apache.tapestry5.internal.services.IgnoredPathsFilter.service(IgnoredPathsFilter.java:62) org.apache.tapestry5.services.TapestryModule$1.service(TapestryModule.java:844) org.apache.tapestry5.TapestryFilter.doFilter(TapestryFilter.java:160) -------------------- java.library.path /usr/lib/jvm/java-6-openjdk/jre/lib/amd64/server /usr/lib/jvm/java-6-openjdk/jre/lib/amd64 /usr/lib/jvm/java-6-openjdk/jre/../lib/amd64 /usr/java/packages/lib/amd64 /usr/lib/x86_64-linux-gnu/jni /lib/x86_64-linux-gnu /usr/lib/x86_64-linux-gnu /usr/lib/jni /lib /usr/lib java.runtime.name OpenJDK Runtime Environment java.runtime.version 1.6.0_22-b22 java.specification.name Java Platform API Specification java.specification.vendor Sun Microsystems Inc. java.specification.version 1.6 java.vendor Sun Microsystems Inc. java.vendor.url http://java.sun.com/ java.vendor.url.bug http://java.sun.com/cgi-bin/bugreport.cgi java.version 1.6.0_22 java.vm.info mixed mode java.vm.name OpenJDK 64-Bit Server VM java.vm.specification.name Java Virtual Machine Specification java.vm.specification.vendor Sun Microsystems Inc. java.vm.specification.version 1.0 java.vm.vendor Sun Microsystems Inc. java.vm.version 20.0-b11