I was not 100% precise: it's happening if the services interface extends 
"Runnable", rather than just implementing it.

This is ok:

public interface AnyService {

    void anything();
}

public class AnyServiceImpl implements AnyService, Runnable {

 // ..
}

This will cause the bug:

public interface AnyService extends Runnable {

    void anything();
}

Am 27.11.2012 um 17:30 schrieb Christian Riedel:

> Hi everyone,
> 
> I wrote about this bug a while ago already, but can't find the original post.
> After lots of debugging I found the reason for a bug in our app. The symptoms 
> were that all contributions annotated with @Startup (also the ones from 
> Tapestry internal modules) were executed a second time as soon as the app has 
> been hit by its first request, i.e. some services got realized.
> 
> Now I found the reason and I'm not sure whether it's a real bug in Tapestry 
> or if it's a less known side effect of Tapestry's design…
> 
> Custom services that implement "Runnable" and have any contributions will 
> cause Tapestry to assume all of RegistryStartup's contributions to be 
> matching as well, so they'll be executed as soon as that custom service's 
> contributions are executed. If you have some execute-one-time-only 
> startup-contributions you might get into troubles!
> 
> Debug here: 
> org.apache.tapestry5.ioc.internal.ModuleImpl#markerMatched(ServiceDef 
> serviceDef, Markable markable)
> 
> "markable" may be any contribution for RegistryStartup.
> Then "markable.getServiceInterface()" will return the "Runnable" interface, 
> which is assignable to your custom service and further down that method the 
> contribution that was supposed to be for RegistryStartup will be considered 
> as "ContributionDef".
> 
> Sure the fixing the bug is easy:
> Just NEVER let any of your services implement Runnable. Why did we do that in 
> the first place? Because we wanted to add a job to Tapestry's 
> PeriodicExecutor after our custom service got realized, to prevent some 
> timing issues. So our services wanted to be a PeriodicExecutor-job.
> 
> Another fix for the bug could be to give RegistryStartup its own interface 
> and prevent collisions with internal services altogether!
> 
> Hope to read some thoughts of committers on that issue.
> 
> 
> Cheers
> Christian


---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org
For additional commands, e-mail: users-h...@tapestry.apache.org

Reply via email to