/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.mortbay.jetty.servlet.wadi; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.mortbay.jetty.Connector; import org.mortbay.jetty.Handler; import org.mortbay.jetty.Server; import org.mortbay.jetty.handler.AbstractHandler; import org.mortbay.jetty.handler.ContextHandler; import org.mortbay.jetty.handler.HandlerCollection; import org.mortbay.jetty.nio.SelectChannelConnector; public class WADITestServer { private final int jettyPort; private final String nodeName; private Server server; private WadiCluster wadiCluster; public WADITestServer(int jettyPort, String nodeName) { if (jettyPort < 1) { throw new IllegalArgumentException("jettyPort must be greater than 1"); } else if (null == nodeName) { throw new IllegalArgumentException("nodeName is required"); } this.jettyPort = jettyPort; this.nodeName = nodeName; } public void setUp() throws Exception { server = new Server(); setUpConnector(); wadiCluster = new WadiCluster("CLUSTER", nodeName, "http://localhost:" + jettyPort + "/test"); setUpHandlers(); startCluster(); startServer(); } public void startServer() throws Exception { server.start(); server.join(); } public void startCluster() throws Exception { wadiCluster.doStart(); } protected void setUpHandlers() { HandlerCollection handlerCollection = new HandlerCollection(); Handler handler = newCounterHandler(); handlerCollection.addHandler(handler); handler = newExitHandler(); handlerCollection.addHandler(handler); server.setHandler(handlerCollection); } protected ContextHandler newExitHandler() { ContextHandler ctx = new ContextHandler(); ctx.setContextPath("/exit"); ctx.setHandler(new AbstractHandler() { public void handle(String target, HttpServletRequest request, HttpServletResponse response, int dispatch) throws IOException, ServletException { System.exit(1); } }); return ctx; } protected ContextHandler newCounterHandler() { WadiSessionManager wadiManager = new WadiSessionManager(wadiCluster, 2, 24, 10); wadiManager.setMaxInactiveInterval(120); WadiSessionHandler wadiHandler = new WadiSessionHandler(wadiManager); wadiHandler.setHandler(new CounterHandler()); ContextHandler ctx = new ContextHandler(); ctx.setContextPath("/counter"); ctx.setHandler(wadiHandler); return ctx; } protected void setUpConnector() { SelectChannelConnector connector = new SelectChannelConnector(); connector.setPort(jettyPort); server.setConnectors(new Connector[] { connector }); } public static void main(String args[]) throws Exception { String port = System.getProperty("jetty.port", "8080"); String node = System.getProperty("node.name", "red"); new WADITestServer(Integer.parseInt(port), node).setUp(); } }