Hi everyone,

We are using Tapestry 5.3; when writing some information directly into 
Tapestry's ApplicationStateManager service and we have been experiencing an odd 
runtime error which occurs after a time.

The key we set in the ApplicationStateManager for our SSO's is a class type and 
the data stored is an instance of the class. Before retrieving an instance we 
check using exists() whether an instance already exists, and if it does not, we 
create the instance and write it into the ApplicationStateManager. The class 
instance shares an interface with an actual service, but the instance cannot be 
instantiated through the IOC and is a session specific override.

We now find that occasionally the application state manager returns true for 
exists(), but then tries to create the instance through the IoC. The question 
is first of all why does the ApplicationStateManager attempt to instantiate an 
instance after indicating that an instance already exists, and secondly whether 
the fact that the instance implements the same interface as a service is part 
of the cause. Another hint is that in the stack trace (see below) there is a 
reference to the persistence strategy, so it may be that the 
ApplicationStateManager was serialised in some way?

Trace: java.lang.RuntimeException: Error invoking constructor 
com.albourne.web.ioc.weakcache.ReportComponentExpiringCache(ReportComponentCacheEntryFactory,
 long) (at ReportComponentExpiringCache.java:11) (for service 
'ApplicationStateManager'): No service implements the interface long. at 
org.apache.tapestry5.ioc.internal.ConstructorServiceCreator$1.invoke(ConstructorServiceCreator.java:81)
 at 
org.apache.tapestry5.ioc.internal.OperationTrackerImpl.invoke(OperationTrackerImpl.java:65)
 at 
org.apache.tapestry5.ioc.internal.PerThreadOperationTracker.invoke(PerThreadOperationTracker.java:68)
 at 
org.apache.tapestry5.ioc.internal.RegistryImpl.invoke(RegistryImpl.java:1082) 
at 
org.apache.tapestry5.ioc.internal.ConstructorServiceCreator.createObject(ConstructorServiceCreator.java:48)
 at 
org.apache.tapestry5.ioc.internal.ServiceResourcesImpl$4.invoke(ServiceResourcesImpl.java:160)
 at 
org.apache.tapestry5.ioc.internal.OperationTrackerImpl.invoke(OperationTrackerImpl.java:65)
 at 
org.apache.tapestry5.ioc.internal.PerThreadOperationTracker.invoke(PerThreadOperationTracker.java:68)
 at 
org.apache.tapestry5.ioc.internal.RegistryImpl.invoke(RegistryImpl.java:1082) 
at 
org.apache.tapestry5.ioc.internal.ServiceResourcesImpl.autobuild(ServiceResourcesImpl.java:146)
 at 
org.apache.tapestry5.internal.services.ApplicationStateManagerImpl$1.create(ApplicationStateManagerImpl.java:104)
 at 
org.apache.tapestry5.internal.services.SessionApplicationStatePersistenceStrategy.getOrCreate(SessionApplicationStatePersistenceStrategy.java:57)
 at 
org.apache.tapestry5.internal.services.SessionApplicationStatePersistenceStrategy.get(SessionApplicationStatePersistenceStrategy.java:44)
 at $ApplicationStatePersistenceStrategy_15c119b4caf670.get(Unknown Source) at 
org.apache.tapestry5.internal.services.ApplicationStateManagerImpl$ApplicationStateAdapter.getOrCreate(ApplicationStateManagerImpl.java:50)
 at

Thanks for your help,
Peter

Reply via email to