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