We've run into a race condition whereby the expiration listener we have on a cache will not be called when the server is stopped, entries have technically expired, and then the server is started. The entries are technically removed before we've had a chance to add a listener to a cache.
Right now we've got a singleton @Startup that adds the listener. Is there another way of guaranteeing the listener is placed before the cache is started?
@Singleton
@Startup
public class CacheResources
{
@Resource( lookup = "java:jboss/infinispan/cache/test/nodeTimeoutEvent" )
private Cache<string, nodetimeoutflowevent=""> nodeTimeoutEvent;
@PostConstruct
public void init()
{
nodeTimeoutEvent.addListener( new CustomListener() );
}
}
I've tried looking up the container 'test' and possibly doing something there, but looking up the container causes the caches to be started. Which would be the same problem.