Thanks, good to know. However, I am pretty sure that it's just bad practive to pass a page around. In my case, all I wanted was a service that could control the workflow... and the pageName is all it needs for that.
2012/2/24 Thiago H. de Paula Figueiredo <thiag...@gmail.com> > On Fri, 24 Feb 2012 08:23:47 -0200, Beat Durrer <bdur...@gmail.com> wrote: > > Hey guys >> > > Hi! > > > I just spent a whole day on a issue, where a service call in a page class >> ended in a "java.lang.LinkageError: loader constraint violation the class >> loader {...} of the current class, MyPage, and the class loader {...} for >> resolved class, MyService, have different Class objects for the type used >> in the signature" >> >> What I did was totally stupid (at least in hindsight): I accidentally >> passed the page object to the service: >> >> MyPage{ >> Object onSuccess(){ >> return myService.doStuff(this); >> } >> } >> >> It's no suprise that that wouldn't work when accustomed to J2EE and >> remote stuff, althrough I didn't expect that to happen in T5.3. >> > > This is a side-effect of having the page, component and mixins classes > loaded by a different classloader inside Tapestry. So you have the normal > classloader, which has the non-transformed version of the controlled > classes, and the Tapestry one, which has the transformed versions. The > Class instances for them are different. If you create an interface, > implement it in your class and make the service receive this interface > instead of the page type, I guess it would solve the problem. > > -- > Thiago H. de Paula Figueiredo > Independent Java, Apache Tapestry 5 and Hibernate consultant, developer, > and instructor > Owner, Ars Machina Tecnologia da Informação Ltda. > http://www.arsmachina.com.br >