private void addSessionHandler(final Environment env, final DataSource dataSource) { env.lifecycle().addLifeCycleListener(new AbstractLifeCycleListener() { @Override public void lifeCycleStarting(LifeCycle event) { if (!(event instanceof Server)) { return; } Server server = (Server) event; JDBCSessionIdManager ids = jdbcSessionIdManager(server); server.setSessionIdManager(ids); env.servlets().setSessionHandler(new SessionHandler(jdbcSessionManager(ids))); } private JDBCSessionManager jdbcSessionManager(JDBCSessionIdManager idManager) { JDBCSessionManager m = new JDBCSessionManager(); m.setSessionIdManager(idManager); return m; } private JDBCSessionIdManager jdbcSessionIdManager(Server server) { JDBCSessionIdManager m = new JDBCSessionIdManager(server); m.setWorkerName(""); m.setDatasource(dataSource); return m; } }); }
private JettyRunner configureClusteredJetty(String name, int port) throws Exception { JettyRunner runner = new JettyRunner(); runner.configure("src/test/cluster", "", port, port + 100); JDBCSessionIdManager idMgr = new JDBCSessionIdManager(runner.getServer()); idMgr.setWorkerName(name); idMgr.setDriverInfo("org.hsqldb.jdbcDriver", "jdbc:hsqldb:mem:clustertest"); Server server = runner.getServer(); server.setSessionIdManager(idMgr); WebAppContext wac = (WebAppContext) server.getHandler(); JDBCSessionManager jdbcMgr = new JDBCSessionManager(); jdbcMgr.setIdManager(server.getSessionIdManager()); // force the session to be read from the database with no delay // This is an incorrectly documented feature. jdbcMgr.setSaveInterval(0); wac.setSessionHandler(new SessionHandler(jdbcMgr)); wac.getServletContext().setInitParameter("cluster.name", name); runner.start(); return runner; }