From 1c7bbed107d0767536c93a092dbf192a6a45a620 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kjetil=20=C3=98rbekk?= Date: Fri, 3 Feb 2012 16:09:18 +0100 Subject: Refactor Handler code. Use servlets for everything. Ping service not yet implemented (becuase it's ugly and will be replaced with something else). --- .../java/com/orbekk/same/http/HandlerFactory.java | 50 ---------------------- .../main/java/com/orbekk/same/http/RpcServlet.java | 24 +++++++++++ .../java/com/orbekk/same/http/ServerBuilder.java | 48 +++++++++++++++++++++ .../java/com/orbekk/same/http/StateServlet.java | 23 ++++++++++ 4 files changed, 95 insertions(+), 50 deletions(-) delete mode 100644 same/src/main/java/com/orbekk/same/http/HandlerFactory.java create mode 100644 same/src/main/java/com/orbekk/same/http/RpcServlet.java create mode 100644 same/src/main/java/com/orbekk/same/http/ServerBuilder.java create mode 100644 same/src/main/java/com/orbekk/same/http/StateServlet.java (limited to 'same/src/main/java/com/orbekk/same/http') diff --git a/same/src/main/java/com/orbekk/same/http/HandlerFactory.java b/same/src/main/java/com/orbekk/same/http/HandlerFactory.java deleted file mode 100644 index 5d5d34c..0000000 --- a/same/src/main/java/com/orbekk/same/http/HandlerFactory.java +++ /dev/null @@ -1,50 +0,0 @@ -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/RpcServlet.java b/same/src/main/java/com/orbekk/same/http/RpcServlet.java new file mode 100644 index 0000000..6d73759 --- /dev/null +++ b/same/src/main/java/com/orbekk/same/http/RpcServlet.java @@ -0,0 +1,24 @@ +package com.orbekk.same.http; + +import java.io.IOException; + +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import com.googlecode.jsonrpc4j.JsonRpcServer; + +public class RpcServlet extends HttpServlet { + JsonRpcServer rpcServer; + + public RpcServlet(JsonRpcServer rpcServer) { + super(); + this.rpcServer = rpcServer; + } + + @Override + protected void doGet(HttpServletRequest request, + HttpServletResponse response) throws IOException { + rpcServer.handle(request, response); + } +} diff --git a/same/src/main/java/com/orbekk/same/http/ServerBuilder.java b/same/src/main/java/com/orbekk/same/http/ServerBuilder.java new file mode 100644 index 0000000..a582283 --- /dev/null +++ b/same/src/main/java/com/orbekk/same/http/ServerBuilder.java @@ -0,0 +1,48 @@ +package com.orbekk.same.http; + +import javax.servlet.http.HttpServlet; + +import org.eclipse.jetty.server.Server; +import org.eclipse.jetty.servlet.ServletContextHandler; +import org.eclipse.jetty.servlet.ServletHolder; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import com.googlecode.jsonrpc4j.JsonRpcServer; + +public class ServerBuilder { + Logger logger = LoggerFactory.getLogger(getClass()); + int port; + ServletContextHandler context = null; + + public ServerBuilder(int port) { + this.port = port; + } + + public ServerBuilder withServlet(HttpServlet servlet, String pathSpec) { + logger.info("Servlet binding: {} → {}", pathSpec, servlet); + getServletContextHandler().addServlet(new ServletHolder(servlet), + pathSpec); + return this; + } + + public ServerBuilder withService(T service, Class clazz) { + JsonRpcServer server = new JsonRpcServer(service, clazz); + String pathSpec = "/" + clazz.getSimpleName() + ".json"; + return withServlet(new RpcServlet(server), pathSpec); + } + + public Server build() { + Server server = new Server(port); + server.setHandler(getServletContextHandler()); + return server; + } + + private ServletContextHandler getServletContextHandler() { + if (context == null) { + context = new ServletContextHandler(); + context.setContextPath("/"); + } + return context; + } +} diff --git a/same/src/main/java/com/orbekk/same/http/StateServlet.java b/same/src/main/java/com/orbekk/same/http/StateServlet.java new file mode 100644 index 0000000..62b304c --- /dev/null +++ b/same/src/main/java/com/orbekk/same/http/StateServlet.java @@ -0,0 +1,23 @@ +package com.orbekk.same.http; + +import java.io.IOException; + +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class StateServlet extends HttpServlet { + private Logger logger = LoggerFactory.getLogger(getClass()); + + @Override + protected void doGet(HttpServletRequest request, + HttpServletResponse response) throws IOException { + logger.error("GOT HERE"); + response.setContentType("text/plain; charset=utf8"); + response.getWriter().println("HI"); + response.setStatus(HttpServletResponse.SC_OK); + } +} -- cgit v1.2.3