> It would help a lot to have an example of class hierarchy not being handled well. I'll definitely use it.
OK, I'll try to find some time to see if I can create a minimal example > Regarding service classes, field injection is indeed supported I think both cases that caused these issues was related to (field) injecting an Asset (an icon or similar) and the error was something about RequestGlobals being null, IIRC -- Chris On Tue, Apr 30, 2024 at 9:32 PM Thiago H. de Paula Figueiredo < thiag...@gmail.com> wrote: > Hello, Chris! > > Thanks for the information. We are aware that there are still some problems > with 5.8.3 to 5.8.6, especially on projects with components having > complex dependencies among them, and we're working on it. 5.8.3 introduces > a lot of changes on how the Tapestry classloading and class transformation > work and there's an awful lot of corner cases. > > It would help a lot to have an example of class hierarchy not being handled > well. I'll definitely use it. > > Regarding service classes, field injection is indeed supported, but I > consider that constructor-based injection is better. It keeps your service > classes working even when not using Tapestry-IoC, making automated testing > way easier, and, in most cases, you can even have your service classes > completely independent of Tapestry itself. > > Cheers! > > > On Tue, Apr 30, 2024 at 5:12 AM Chris Poulsen <mailingl...@nesluop.dk> > wrote: > > > The upgrades went pretty smoothly in general, good job team! > > > > I did encounter a couple of issues that I think it is worth raising the > > flag on. > > > > We run our products in different environments: > > > > - On plain Windows servers > > - In Docker containers (Linux). > > > > Things are currently on Java 17, the development docker images are > running > > without issues on the Java 21 runtime. > > > > Issues encountered: > > > > 1. TAP5-2605 JS minimizer regression bug in 5.5.0-beta-1 > > <https://issues.apache.org/jira/browse/TAP5-2605> I did a simple fix, > > mentioned in the comments, this would be nice to get in, so I don't > > have to > > decorate the Javascript resource minimizer, just to change the > > "StreamableResource.toString()" to a dummy value > > 2. Field injection in 2 of our Tapestry services went from an obscure > > warning on startup to an actual error in production mode (the two > > services > > had an "@Inject Asset icon" type of thing, which blew up in production > > mode=true. It worked in development mode and in both modes in v5.8.2. > > The > > fix/workaround was to move to CTOR injection - (that feels more > correct > > to > > me anyway). I don't know if this was ever supposed to work, but it did > > and > > it would be nice with some check/nice error in development mode, if > > this is > > not supposed to work > > 3. We had a single construct which ended up resulting in > > java.lang.VerifyError: Bad type on operand stack (basically bad > bytecode > > was being produced as I understand it. I'll put a few more details on > > this > > below) > > > > The java.lang.VerifyError: > > > > Log: > > > > 2024-04-25T15:17:52.707+02:00 INFO > > [org.apache.tapestry5.services.pageload.PageClassLoaderContextManager] > > (default task-79) Dependency information gathered in 6,126 ms > > 2024-04-25T15:17:52.707+02:00 INFO > > [org.apache.tapestry5.services.pageload.PageClassLoaderContextManager] > > (default task-79) Starting preloading page classloader contexts > > 2024-04-25T15:17:52.864+02:00 ERROR [io.undertow.request] (default > task-79) > > UT005023: Exception handling request to /administration/: > > java.lang.RuntimeException: java.lang.VerifyError: Bad type on operand > > stack > > Exception Details: > > Location: > > > > > > > com/dezide/author/gui/base/content/FaqIncludeAndConversationBase.onSelectFaqArticle()Ljava/lang/Object; > > @5: invokevirtual > > Reason: > > Type 'com/dezide/author/gui/pages/faq/SelectFaqArticle' (current > frame, > > stack[1]) is not assignable to > > 'com/dezide/author/gui/base/conversation/ParentConversationPageBase' > > Current Frame: > > bci: @5 > > flags: { } > > locals: { > > 'com/dezide/author/gui/base/content/FaqIncludeAndConversationBase' } > > stack: { > > 'com/dezide/author/gui/base/content/FaqIncludeAndConversationBase', > > 'com/dezide/author/gui/pages/faq/SelectFaqArticle' } > > Bytecode: > > 0000000: 2a2a b600 3fb6 0043 2ab6 003f 2ab6 0049 > > 0000010: 2ab4 004b 124d 03bd 0004 b900 5303 004c > > 0000020: 2ab4 004b 1255 03bd 0004 b900 5303 004d > > 0000030: 2ab6 003f 2bb6 0059 2ab6 003f 2cb6 005c > > 0000040: 2ab6 003f b0 > > > > at > > > > > deployment.dezide-author-1.29.1-rc.1.ear.web.war//org.apache.tapestry5.ioc.internal.StartupDefImpl$1.run(StartupDefImpl.java:84) > > at > > > > > deployment.dezide-author-1.29.1-rc.1.ear.web.war//org.apache.tapestry5.ioc.internal.OperationTrackerImpl.run(OperationTrackerImpl.java:56) > > at > > > > > deployment.dezide-author-1.29.1-rc.1.ear.web.war//org.apache.tapestry5.ioc.internal.PerThreadOperationTracker.run(PerThreadOperationTracker.java:60) > > at > > > > > deployment.dezide-author-1.29.1-rc.1.ear.web.war//org.apache.tapestry5.ioc.internal.RegistryImpl.run(RegistryImpl.java:1286) > > > > It says: > > > > Reason: > > Type 'com/dezide/author/gui/pages/faq/SelectFaqArticle' (current > frame, > > stack[1]) is not assignable to > > 'com/dezide/author/gui/base/conversation/ParentConversationPageBase' > > > > but the class is defined as: > > > > public class SelectFaqArticle extends ParentConversationPageBase > > > > The code that failed was calling the following in > > ParentConversationPageBase: > > > > protected void setupParentConversationalSubPage( > > ParentConversationPageBase page ) > > { > > conversationPageManager.setupParentConversationalSubPage( page, > > componentResources ); > > } > > > > I managed to work around this using an interface on the > > ParentConversationPageBase instead of the concrete class in the > signature. > > > > Changing to: > > interface ParentConversationPage {} > > class ParentConversationPageBase implements ParentConversationPage > > > > and > > > > protected void setupParentConversationalSubPage( > ParentConversationPage > > page ) > > > > got things going again. > > > > It seems like there are some regressions around class hierarchies in the > > plastic stuff between 5.8.2 and 5.8.6. > > > > Our actual code is pretty complex (or a mess as some would say), but I > can > > try to come up with a simple example, if anyone has a hunch on what is > > wrong / is willing to try and fix it. > > > > -- > > Chris > > > > > -- > Thiago H. de Paula Figueiredo >