From b0569609d29217887d55803368abeb9a1f71a70c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kjetil=20=C3=98rbekk?= Date: Tue, 28 Feb 2012 17:24:27 +0100 Subject: Begin support for TJWS. Add TjwsServerContainer. Rename Jetty specific containers. --- same/pom.xml | 5 ++ .../main/java/com/orbekk/same/SameController.java | 10 ++-- same/src/main/java/com/orbekk/same/TjwsApp.java | 11 ++++ .../com/orbekk/same/http/JettyServerBuilder.java | 48 +++++++++++++++++ .../com/orbekk/same/http/JettyServerContainer.java | 61 ++++++++++++++++++++++ .../java/com/orbekk/same/http/ServerBuilder.java | 48 ----------------- .../java/com/orbekk/same/http/ServerContainer.java | 61 ---------------------- .../com/orbekk/same/http/TjwsServerContainer.java | 48 +++++++++++++++++ .../orbekk/paxos/PaxosServiceFunctionalTest.java | 10 ++-- 9 files changed, 183 insertions(+), 119 deletions(-) create mode 100644 same/src/main/java/com/orbekk/same/TjwsApp.java create mode 100644 same/src/main/java/com/orbekk/same/http/JettyServerBuilder.java create mode 100644 same/src/main/java/com/orbekk/same/http/JettyServerContainer.java delete mode 100644 same/src/main/java/com/orbekk/same/http/ServerBuilder.java delete mode 100644 same/src/main/java/com/orbekk/same/http/ServerContainer.java create mode 100644 same/src/main/java/com/orbekk/same/http/TjwsServerContainer.java (limited to 'same') diff --git a/same/pom.xml b/same/pom.xml index d7d5ca4..c1f7946 100644 --- a/same/pom.xml +++ b/same/pom.xml @@ -71,6 +71,11 @@ jetty-server 8.0.0.M3 + + org.jboss.resteasy + tjws + 2.3.1.GA + org.apache.httpcomponents httpclient diff --git a/same/src/main/java/com/orbekk/same/SameController.java b/same/src/main/java/com/orbekk/same/SameController.java index f1b94e7..ac99197 100644 --- a/same/src/main/java/com/orbekk/same/SameController.java +++ b/same/src/main/java/com/orbekk/same/SameController.java @@ -10,13 +10,13 @@ import com.orbekk.net.DefaultBroadcasterFactory; import com.orbekk.paxos.PaxosService; import com.orbekk.paxos.PaxosServiceImpl; import com.orbekk.same.config.Configuration; -import com.orbekk.same.http.ServerBuilder; -import com.orbekk.same.http.ServerContainer; +import com.orbekk.same.http.JettyServerBuilder; +import com.orbekk.same.http.JettyServerContainer; import com.orbekk.same.http.StateServlet; public class SameController { private Logger logger = LoggerFactory.getLogger(getClass()); - private ServerContainer server; + private JettyServerContainer server; private Master master; private Client client; private PaxosServiceImpl paxos; @@ -60,7 +60,7 @@ public class SameController { StateServlet stateServlet = new StateServlet(client.getInterface(), new VariableFactory(client.getInterface())); - ServerContainer server = new ServerBuilder(port) + JettyServerContainer server = new JettyServerBuilder(port) .withServlet(stateServlet, "/_/state") .withService(client.getService(), ClientService.class) .withService(master.getService(), MasterService.class) @@ -79,7 +79,7 @@ public class SameController { public SameController( Configuration configuration, - ServerContainer server, + JettyServerContainer server, Master master, Client client, PaxosServiceImpl paxos, diff --git a/same/src/main/java/com/orbekk/same/TjwsApp.java b/same/src/main/java/com/orbekk/same/TjwsApp.java new file mode 100644 index 0000000..0a0c30a --- /dev/null +++ b/same/src/main/java/com/orbekk/same/TjwsApp.java @@ -0,0 +1,11 @@ +package com.orbekk.same; + +import com.orbekk.same.http.TjwsServerContainer; + +public class TjwsApp { + public static void main(String[] args) { + TjwsServerContainer server = TjwsServerContainer.create(8080); + server.start(); + server.join(); + } +} diff --git a/same/src/main/java/com/orbekk/same/http/JettyServerBuilder.java b/same/src/main/java/com/orbekk/same/http/JettyServerBuilder.java new file mode 100644 index 0000000..91d2725 --- /dev/null +++ b/same/src/main/java/com/orbekk/same/http/JettyServerBuilder.java @@ -0,0 +1,48 @@ +package com.orbekk.same.http; + +import javax.servlet.http.HttpServlet; + +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 JettyServerBuilder { + Logger logger = LoggerFactory.getLogger(getClass()); + int port; + ServletContextHandler context = null; + + public JettyServerBuilder(int port) { + this.port = port; + } + + public JettyServerBuilder withServlet(HttpServlet servlet, String pathSpec) { + logger.info("Servlet binding: {} → {}", pathSpec, servlet); + getServletContextHandler().addServlet(new ServletHolder(servlet), + pathSpec); + return this; + } + + public JettyServerBuilder withService(T service, Class clazz) { + JsonRpcServer server = new JsonRpcServer(service, clazz); + String pathSpec = "/" + clazz.getSimpleName() + ".json"; + return withServlet(new RpcServlet(server), pathSpec); + } + + public JettyServerContainer build() { + JettyServerContainer server = JettyServerContainer.create(port); + server.setReuseAddress(true); + server.setContext(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/JettyServerContainer.java b/same/src/main/java/com/orbekk/same/http/JettyServerContainer.java new file mode 100644 index 0000000..34db226 --- /dev/null +++ b/same/src/main/java/com/orbekk/same/http/JettyServerContainer.java @@ -0,0 +1,61 @@ +package com.orbekk.same.http; + +import org.eclipse.jetty.server.AbstractConnector; +import org.eclipse.jetty.server.Connector; +import org.eclipse.jetty.server.Server; +import org.eclipse.jetty.servlet.ServletContextHandler; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class JettyServerContainer { + Logger logger = LoggerFactory.getLogger(getClass()); + Server server; + int port; + ServletContextHandler context = null; + + public JettyServerContainer(Server server, int port, ServletContextHandler context) { + this.server = server; + this.port = port; + this.context = context; + } + + public static JettyServerContainer create(int port) { + Server server = new Server(port); + return new JettyServerContainer(server, port, null); + } + + public void setContext(ServletContextHandler context) { + server.setHandler(context); + this.context = context; + } + + public void setReuseAddress(boolean on) { + Connector connector = server.getConnectors()[0]; + if (connector instanceof AbstractConnector) { + AbstractConnector connector_ = (AbstractConnector)connector; + connector_.setReuseAddress(on); + } + } + + public int getPort() { + if (port == 0) { + return server.getConnectors()[0].getLocalPort(); + } else { + return port; + } + } + + public void start() throws Exception { + server.start(); + logger.info("Started server on port {}", getPort()); + } + + public void stop() throws Exception { + server.stop(); + logger.info("Server stopped."); + } + + public void join() throws InterruptedException { + server.join(); + } +} diff --git a/same/src/main/java/com/orbekk/same/http/ServerBuilder.java b/same/src/main/java/com/orbekk/same/http/ServerBuilder.java deleted file mode 100644 index 543366e..0000000 --- a/same/src/main/java/com/orbekk/same/http/ServerBuilder.java +++ /dev/null @@ -1,48 +0,0 @@ -package com.orbekk.same.http; - -import javax.servlet.http.HttpServlet; - -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 ServerContainer build() { - ServerContainer server = ServerContainer.create(port); - server.setReuseAddress(true); - server.setContext(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/ServerContainer.java b/same/src/main/java/com/orbekk/same/http/ServerContainer.java deleted file mode 100644 index af577a0..0000000 --- a/same/src/main/java/com/orbekk/same/http/ServerContainer.java +++ /dev/null @@ -1,61 +0,0 @@ -package com.orbekk.same.http; - -import org.eclipse.jetty.server.AbstractConnector; -import org.eclipse.jetty.server.Connector; -import org.eclipse.jetty.server.Server; -import org.eclipse.jetty.servlet.ServletContextHandler; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -public class ServerContainer { - Logger logger = LoggerFactory.getLogger(getClass()); - Server server; - int port; - ServletContextHandler context = null; - - public ServerContainer(Server server, int port, ServletContextHandler context) { - this.server = server; - this.port = port; - this.context = context; - } - - public static ServerContainer create(int port) { - Server server = new Server(port); - return new ServerContainer(server, port, null); - } - - public void setContext(ServletContextHandler context) { - server.setHandler(context); - this.context = context; - } - - public void setReuseAddress(boolean on) { - Connector connector = server.getConnectors()[0]; - if (connector instanceof AbstractConnector) { - AbstractConnector connector_ = (AbstractConnector)connector; - connector_.setReuseAddress(on); - } - } - - public int getPort() { - if (port == 0) { - return server.getConnectors()[0].getLocalPort(); - } else { - return port; - } - } - - public void start() throws Exception { - server.start(); - logger.info("Started server on port {}", getPort()); - } - - public void stop() throws Exception { - server.stop(); - logger.info("Server stopped."); - } - - public void join() throws InterruptedException { - server.join(); - } -} diff --git a/same/src/main/java/com/orbekk/same/http/TjwsServerContainer.java b/same/src/main/java/com/orbekk/same/http/TjwsServerContainer.java new file mode 100644 index 0000000..b71967c --- /dev/null +++ b/same/src/main/java/com/orbekk/same/http/TjwsServerContainer.java @@ -0,0 +1,48 @@ +package com.orbekk.same.http; + +import java.util.Properties; + +import org.slf4j.LoggerFactory; +import org.slf4j.Logger; +import Acme.Serve.Serve; + +public class TjwsServerContainer { + private static class MyServer extends Serve { + public void join() { + try { + backgroundThread.join(); + } catch (InterruptedException e) { + return; + }; + } + } + + private Logger logger = LoggerFactory.getLogger(getClass()); + private MyServer server; + + public static TjwsServerContainer create(int port) { + MyServer server = new MyServer(); + server.setAttribute(Serve.ARG_PORT, port); + return new TjwsServerContainer(server); + } + + public TjwsServerContainer(MyServer server) { + this.server = server; + } + + public int getPort() { + return (Integer)this.server.getAttribute(Serve.ARG_PORT); + } + + public void start() { + server.runInBackground(); + } + + public void stop() { + server.stopBackground(); + } + + public void join() { + server.join(); + } +} diff --git a/same/src/test/java/com/orbekk/paxos/PaxosServiceFunctionalTest.java b/same/src/test/java/com/orbekk/paxos/PaxosServiceFunctionalTest.java index 278f775..32c7dff 100644 --- a/same/src/test/java/com/orbekk/paxos/PaxosServiceFunctionalTest.java +++ b/same/src/test/java/com/orbekk/paxos/PaxosServiceFunctionalTest.java @@ -5,8 +5,8 @@ import static org.junit.Assert.*; import com.googlecode.jsonrpc4j.JsonRpcServer; import com.orbekk.same.ConnectionManagerImpl; import com.orbekk.same.http.RpcServlet; -import com.orbekk.same.http.ServerBuilder; -import com.orbekk.same.http.ServerContainer; +import com.orbekk.same.http.JettyServerBuilder; +import com.orbekk.same.http.JettyServerContainer; import java.util.ArrayList; import java.util.List; @@ -20,13 +20,13 @@ import org.junit.Test; public class PaxosServiceFunctionalTest { ConnectionManagerImpl connections = new ConnectionManagerImpl(500, 500); List paxosUrls = new ArrayList(); - ServerContainer server; + JettyServerContainer server; String myUrl; int successfulProposals = 0; @Before public void setUp() throws Exception { - ServerBuilder builder = new ServerBuilder(0); + JettyServerBuilder builder = new JettyServerBuilder(0); List tempUrls = setupPaxos(builder, 10); server = builder.build(); server.start(); @@ -40,7 +40,7 @@ public class PaxosServiceFunctionalTest { server.stop(); } - public List setupPaxos(ServerBuilder builder, int instances) { + public List setupPaxos(JettyServerBuilder builder, int instances) { List tempUrls = new ArrayList(); for (int i = 1; i <= instances; i++) { JsonRpcServer jsonServer = new JsonRpcServer( -- cgit v1.2.3