From af22c94b833643bc8545cfcc82b25b8f515ae513 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kjetil=20=C3=98rbekk?= Date: Fri, 3 Feb 2012 16:07:57 +0100 Subject: Move Handler code around. --- same/src/main/java/com/orbekk/same/RpcHandler.java | 68 --------------------- .../java/com/orbekk/same/http/HandlerFactory.java | 50 ++++++++++++++++ .../main/java/com/orbekk/same/http/RpcHandler.java | 69 ++++++++++++++++++++++ 3 files changed, 119 insertions(+), 68 deletions(-) delete mode 100644 same/src/main/java/com/orbekk/same/RpcHandler.java create mode 100644 same/src/main/java/com/orbekk/same/http/HandlerFactory.java create mode 100644 same/src/main/java/com/orbekk/same/http/RpcHandler.java diff --git a/same/src/main/java/com/orbekk/same/RpcHandler.java b/same/src/main/java/com/orbekk/same/RpcHandler.java deleted file mode 100644 index cddb307..0000000 --- a/same/src/main/java/com/orbekk/same/RpcHandler.java +++ /dev/null @@ -1,68 +0,0 @@ -package com.orbekk.same; - -import com.googlecode.jsonrpc4j.JsonRpcServer; -import com.orbekk.net.HttpUtil; -import java.io.IOException; -import java.util.HashMap; -import java.util.Map; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import org.eclipse.jetty.server.Request; -import org.eclipse.jetty.server.handler.AbstractHandler; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -public class RpcHandler extends AbstractHandler { - private Logger logger = LoggerFactory.getLogger(getClass()); - private JsonRpcServer rpcServer = null; - private UrlReceiver urlReceiver; - private Map rpcServers = - new HashMap(); - - public RpcHandler(UrlReceiver urlReceiver) { - this.urlReceiver = urlReceiver; - } - - /** - * Add an RpcServer to this Handler. - * - * @param url the base url of the service, e.g. - * /MyService.json - */ - public void addRpcServer(String url, JsonRpcServer rpcServer) { - rpcServers.put(url, rpcServer); - } - - @Override - public synchronized void handle(String target, Request baseRequest, - HttpServletRequest request, HttpServletResponse response) - throws IOException, ServletException { - logger.info("Handling request to target: " + target); - - if (urlReceiver != null) { - String sameServiceUrl = "http://" + request.getLocalAddr() + - ":" + request.getLocalPort() + "/"; - urlReceiver.setUrl(sameServiceUrl); - urlReceiver = null; - } - - if (target.equals("/ping")) { - int remotePort = Integer.parseInt(request.getParameter("port")); - String pongUrl = "http://" + request.getRemoteAddr() + ":" + - remotePort + "/pong"; - logger.info("Got ping. Sending pong to {}", pongUrl); - HttpUtil.sendHttpRequest(pongUrl); - baseRequest.setHandled(true); - } else if (target.equals("/pong")) { - logger.info("Received pong from {}", request.getRemoteAddr()); - baseRequest.setHandled(true); - } else { - JsonRpcServer server = rpcServers.get(target); - if (server != null) { - server.handle(request, response); - baseRequest.setHandled(true); - } - } - } -} diff --git a/same/src/main/java/com/orbekk/same/http/HandlerFactory.java b/same/src/main/java/com/orbekk/same/http/HandlerFactory.java new file mode 100644 index 0000000..5d5d34c --- /dev/null +++ b/same/src/main/java/com/orbekk/same/http/HandlerFactory.java @@ -0,0 +1,50 @@ +package com.orbekk.same.http; + +import org.eclipse.jetty.server.Handler; +import org.eclipse.jetty.server.handler.ContextHandler.Context; +import org.eclipse.jetty.server.handler.HandlerList; +import org.eclipse.jetty.servlet.ServletContextHandler; +import org.eclipse.jetty.servlet.ServletHandler; +import org.eclipse.jetty.servlet.ServletHolder; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import com.googlecode.jsonrpc4j.JsonRpcServer; +import com.orbekk.paxos.PaxosService; +import com.orbekk.same.ClientService; +import com.orbekk.same.MasterService; + +public class HandlerFactory { + Logger logger = LoggerFactory.getLogger(getClass()); + + public Handler createServletHandler() { + logger.info("Creating servlet handler."); + ServletContextHandler context = new ServletContextHandler( + ServletContextHandler.SESSIONS); + context.setContextPath("/*"); + context.addServlet(new ServletHolder(new StateServlet()), "/*"); + return context; + } + + public RpcHandler createRpcHandler(MasterService master, + ClientService client, PaxosService paxos) { + RpcHandler rpcHandler = new RpcHandler(null); + rpcHandler.addRpcServer("/MasterService.json", + new JsonRpcServer(master, MasterService.class)); + rpcHandler.addRpcServer("/ClientService.json", + new JsonRpcServer(client, ClientService.class)); + rpcHandler.addRpcServer("/PaxosService.json", + new JsonRpcServer(paxos, PaxosService.class)); + return rpcHandler; + } + + public Handler createMainHandler(RpcHandler rpcHandler, + Handler servletHandler) { + HandlerList handler = new HandlerList(); + handler.addHandler(rpcHandler); + handler.addHandler(servletHandler); + + return handler; + } + +} diff --git a/same/src/main/java/com/orbekk/same/http/RpcHandler.java b/same/src/main/java/com/orbekk/same/http/RpcHandler.java new file mode 100644 index 0000000..56970d1 --- /dev/null +++ b/same/src/main/java/com/orbekk/same/http/RpcHandler.java @@ -0,0 +1,69 @@ +package com.orbekk.same.http; + +import com.googlecode.jsonrpc4j.JsonRpcServer; +import com.orbekk.net.HttpUtil; +import com.orbekk.same.UrlReceiver; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import org.eclipse.jetty.server.Request; +import org.eclipse.jetty.server.handler.AbstractHandler; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class RpcHandler extends AbstractHandler { + private Logger logger = LoggerFactory.getLogger(getClass()); + private UrlReceiver urlReceiver; + private Map rpcServers = + new HashMap(); + + public RpcHandler(UrlReceiver urlReceiver) { + this.urlReceiver = urlReceiver; + } + + /** + * Add an RpcServer to this Handler. + * + * @param url the base url of the service, e.g. + * /MyService.json + */ + public void addRpcServer(String url, JsonRpcServer rpcServer) { + rpcServers.put(url, rpcServer); + } + + @Override + public synchronized void handle(String target, Request baseRequest, + HttpServletRequest request, HttpServletResponse response) + throws IOException, ServletException { + logger.info("Handling request to target: " + target); + + if (urlReceiver != null) { + String sameServiceUrl = "http://" + request.getLocalAddr() + + ":" + request.getLocalPort() + "/"; + urlReceiver.setUrl(sameServiceUrl); + urlReceiver = null; + } + + if (target.equals("/ping")) { + int remotePort = Integer.parseInt(request.getParameter("port")); + String pongUrl = "http://" + request.getRemoteAddr() + ":" + + remotePort + "/pong"; + logger.info("Got ping. Sending pong to {}", pongUrl); + HttpUtil.sendHttpRequest(pongUrl); + baseRequest.setHandled(true); + } else if (target.equals("/pong")) { + logger.info("Received pong from {}", request.getRemoteAddr()); + baseRequest.setHandled(true); + } else { + JsonRpcServer server = rpcServers.get(target); + if (server != null) { + server.handle(request, response); + baseRequest.setHandled(true); + } + } + } +} -- cgit v1.2.3