diff --git a/src/main/java/org/appng/tomcat/session/hazelcast/v2/HazelcastManager.java b/src/main/java/org/appng/tomcat/session/hazelcast/v2/HazelcastManager.java index 5768120..3d359eb 100644 --- a/src/main/java/org/appng/tomcat/session/hazelcast/v2/HazelcastManager.java +++ b/src/main/java/org/appng/tomcat/session/hazelcast/v2/HazelcastManager.java @@ -9,6 +9,7 @@ import java.util.concurrent.atomic.AtomicInteger; import org.apache.catalina.LifecycleException; +import org.apache.catalina.LifecycleState; import org.apache.catalina.Session; import org.apache.catalina.session.ManagerBase; import org.apache.catalina.session.StandardSession; @@ -29,6 +30,21 @@ public class HazelcastManager extends ManagerBase { private String mapName = "tomcat.sessions"; private HazelcastInstance instance; + @Override + protected void startInternal() throws LifecycleException { + super.startInternal(); + ClasspathXmlConfig config = new ClasspathXmlConfig(configFile); + instance = Hazelcast.getOrCreateHazelcastInstance(config); + log.info(String.format("Loaded %s from %s", instance, configFile)); + setState(LifecycleState.STARTING); + } + + @Override + protected void stopInternal() throws LifecycleException { + super.stopInternal(); + setState(LifecycleState.STOPPING); + } + @Override public void processExpires() { long timeNow = System.currentTimeMillis(); @@ -44,13 +60,6 @@ public void processExpires() { processingTime += duration; } - @Override - protected void initInternal() throws LifecycleException { - instance = Hazelcast.getOrCreateHazelcastInstance(new ClasspathXmlConfig(configFile)); - log.info(String.format("Loaded %s from %s", instance, configFile)); - log.info("Using classpath config:" + getClass().getClassLoader().getResource(configFile)); - } - @Override public HazelCastSession createEmptySession() { return new HazelCastSession(this); diff --git a/src/test/java/org/appng/tomcat/session/hazelcast/v2/HazelStoreIT.java b/src/test/java/org/appng/tomcat/session/hazelcast/v2/HazelStoreIT.java index dc69d63..ecdc0a8 100644 --- a/src/test/java/org/appng/tomcat/session/hazelcast/v2/HazelStoreIT.java +++ b/src/test/java/org/appng/tomcat/session/hazelcast/v2/HazelStoreIT.java @@ -31,9 +31,11 @@ import org.apache.catalina.core.StandardHost; import org.apache.catalina.core.StandardService; import org.apache.catalina.loader.WebappLoader; +import org.apache.catalina.startup.Tomcat.FixContextListener; import org.apache.catalina.util.StandardSessionIdGenerator; import org.appng.tomcat.session.SessionData; import org.appng.tomcat.session.hazelcast.HazelCastSession; +import org.junit.AfterClass; import org.junit.Assert; import org.junit.BeforeClass; import org.junit.Test; @@ -43,6 +45,7 @@ public class HazelStoreIT { static HazelcastManager manager; + static StandardContext context; @Test public void test() throws Exception { @@ -138,7 +141,14 @@ public void sessionCreated(HttpSessionEvent se) { @BeforeClass public static void setup() throws LifecycleException { - StandardContext context = new StandardContext(); + context = new StandardContext(); + + manager = new HazelcastManager(); + manager.setSessionIdGenerator(new StandardSessionIdGenerator()); + manager.setConfigFile("hazelcast-test.xml"); + manager.setContext(context); + context.setManager(manager); + context.setName("foo"); WebappLoader loader = new WebappLoader() { @Override @@ -147,6 +157,7 @@ public ClassLoader getClassLoader() { } }; context.setLoader(loader); + context.setWorkDir(new java.io.File("target/tomcat").getAbsolutePath()); StandardHost host = new StandardHost(); StandardEngine engine = new StandardEngine(); engine.setService(new StandardService()); @@ -160,12 +171,17 @@ public ClassLoader getClassLoader() { sites.put("appNG", new Site()); context.getServletContext().setAttribute("PLATFORM", platform); - manager = new HazelcastManager(); - manager.setSessionIdGenerator(new StandardSessionIdGenerator()); - manager.setConfigFile("hazelcast-test.xml"); - manager.setContext(context); - manager.init(); + context.setConfigured(true); + context.addLifecycleListener(new FixContextListener()); + context.start(); + + } + + @AfterClass + public static void tearDown() throws LifecycleException { + context.stop(); } + public static class Site { static boolean calledClassloader = false;