package org.infinispan.server.eventlogger; import java.util.EnumSet; import java.util.Map; import java.util.concurrent.TimeUnit; import org.infinispan.commons.marshall.AdvancedExternalizer; import org.infinispan.configuration.cache.ConfigurationBuilder; import org.infinispan.configuration.global.GlobalConfiguration; import org.infinispan.factories.GlobalComponentRegistry; import org.infinispan.lifecycle.AbstractModuleLifecycle; import org.infinispan.lifecycle.ModuleLifecycle; import org.infinispan.manager.EmbeddedCacheManager; import org.infinispan.registry.InternalCacheRegistry; import org.infinispan.util.logging.events.EventLogManager; import org.infinispan.util.logging.events.EventLogger; import org.kohsuke.MetaInfServices; /** * LifecycleCallback for the server event logger module. Registers advanced externalizers and * initializes the server logger * * @author Tristan Tarrant * @since 8.2 */ @MetaInfServices(ModuleLifecycle.class) public class LifecycleCallbacks extends AbstractModuleLifecycle { private EventLogger oldEventLogger; @Override public void cacheManagerStarting(GlobalComponentRegistry gcr, GlobalConfiguration gc) { // Add the externalizer for server events Map<Integer, AdvancedExternalizer<?>> externalizerMap = gc.serialization().advancedExternalizers(); externalizerMap.put(ExternalizerIds.SERVER_EVENT, new ServerEventImpl.Externalizer()); // Create the event log cache configuration in the internal cache registry EmbeddedCacheManager cacheManager = gcr.getComponent(EmbeddedCacheManager.class); InternalCacheRegistry internalCacheRegistry = gcr.getComponent(InternalCacheRegistry.class); internalCacheRegistry.registerInternalCache(ServerEventLogger.EVENT_LOG_CACHE, getTaskHistoryCacheConfiguration(cacheManager).build(), EnumSet.of(InternalCacheRegistry.Flag.PERSISTENT, InternalCacheRegistry.Flag.QUERYABLE)); // Install the new logger component oldEventLogger = gcr.getComponent(EventLogManager.class).replaceEventLogger(new ServerEventLogger(cacheManager, gcr.getTimeService())); } @Override public void cacheManagerStopping(GlobalComponentRegistry gcr) { gcr.getComponent(EventLogManager.class).replaceEventLogger(oldEventLogger); } private ConfigurationBuilder getTaskHistoryCacheConfiguration(EmbeddedCacheManager cacheManager) { ConfigurationBuilder cfg = new ConfigurationBuilder(); cfg.eviction().size(100l).persistence().passivation(true).expiration().lifespan(7, TimeUnit.DAYS); return cfg; } }