You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by js...@apache.org on 2007/07/31 07:55:21 UTC
svn commit: r561235 - in /incubator/tuscany/java/sca/modules:
binding-jsonrpc/src/main/java/org/apache/tuscany/sca/binding/jsonrpc/
http-jetty/src/main/java/org/apache/tuscany/sca/http/jetty/
http-jetty/src/main/java/org/apache/tuscany/sca/http/jetty/m...
Author: jsdelfino
Date: Mon Jul 30 22:55:20 2007
New Revision: 561235
URL: http://svn.apache.org/viewvc?view=rev&rev=561235
Log:
Support multiple ports in JettyServer.
Modified:
incubator/tuscany/java/sca/modules/binding-jsonrpc/src/main/java/org/apache/tuscany/sca/binding/jsonrpc/JSONRPCService.java
incubator/tuscany/java/sca/modules/http-jetty/src/main/java/org/apache/tuscany/sca/http/jetty/JettyServer.java
incubator/tuscany/java/sca/modules/http-jetty/src/main/java/org/apache/tuscany/sca/http/jetty/module/JettyRuntimeModuleActivator.java
incubator/tuscany/java/sca/modules/http-jetty/src/test/java/org/apache/tuscany/sca/http/jetty/JettyServerTestCase.java
Modified: incubator/tuscany/java/sca/modules/binding-jsonrpc/src/main/java/org/apache/tuscany/sca/binding/jsonrpc/JSONRPCService.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/binding-jsonrpc/src/main/java/org/apache/tuscany/sca/binding/jsonrpc/JSONRPCService.java?view=diff&rev=561235&r1=561234&r2=561235
==============================================================================
--- incubator/tuscany/java/sca/modules/binding-jsonrpc/src/main/java/org/apache/tuscany/sca/binding/jsonrpc/JSONRPCService.java (original)
+++ incubator/tuscany/java/sca/modules/binding-jsonrpc/src/main/java/org/apache/tuscany/sca/binding/jsonrpc/JSONRPCService.java Mon Jul 30 22:55:20 2007
@@ -19,6 +19,8 @@
package org.apache.tuscany.sca.binding.jsonrpc;
+import java.net.URI;
+
import org.apache.tuscany.sca.assembly.Binding;
import org.apache.tuscany.sca.http.ServletHost;
import org.apache.tuscany.sca.interfacedef.Interface;
@@ -68,19 +70,26 @@
Class<?> serviceInterface = getTargetJavaClass(service.getInterfaceContract().getInterface());
Object instance = component.createSelfReference(serviceInterface).getService();
JSONRPCServiceServlet serviceServlet = new JSONRPCServiceServlet(binding.getName(), serviceInterface, instance);
+ int port;
if (binding.getURI() != null) {
servletHost.addServletMapping(binding.getURI(), serviceServlet);
+ URI uri = URI.create(binding.getURI());
+ port = uri.getPort();
+ if (port == -1)
+ port = 8080;
} else {
servletHost.addServletMapping(SERVICE_PREFIX + binding.getName(), serviceServlet);
+ port = 8080;
}
// get the ScaDomainScriptServlet, if it doesn't yet exist create one
// this uses removeServletMapping / addServletMapping as theres no getServletMapping facility
- ScaDomainScriptServlet scaDomainServlet = (ScaDomainScriptServlet) servletHost.removeServletMapping(SCA_DOMAIN_SCRIPT);
+ URI domainURI = URI.create("http://localhost:" + port + SCA_DOMAIN_SCRIPT);
+ ScaDomainScriptServlet scaDomainServlet = (ScaDomainScriptServlet) servletHost.removeServletMapping(domainURI.toString());
if (scaDomainServlet == null) {
scaDomainServlet = new ScaDomainScriptServlet();
}
- servletHost.addServletMapping(SCA_DOMAIN_SCRIPT, scaDomainServlet);
+ servletHost.addServletMapping(domainURI.toString(), scaDomainServlet);
// Add this service to the scadomain script servlet
scaDomainServlet.addService(binding.getName());
@@ -90,20 +99,27 @@
public void stop() {
// Unregister from the service servlet mapping
+ int port;
if (binding.getURI() != null) {
servletHost.removeServletMapping(binding.getURI());
+ URI uri = URI.create(binding.getURI());
+ port = uri.getPort();
+ if (port == -1)
+ port = 8080;
} else {
servletHost.removeServletMapping(SERVICE_PREFIX + binding.getName());
+ port = 8080;
}
// Unregister the service from the scaDomain script servlet
// don't unregister the scaDomain script servlet if it still has other service names
- ScaDomainScriptServlet scaDomainServlet = (ScaDomainScriptServlet) servletHost.removeServletMapping(SCA_DOMAIN_SCRIPT);
+ URI domainURI = URI.create("http://localhost:" + port + SCA_DOMAIN_SCRIPT);
+ ScaDomainScriptServlet scaDomainServlet = (ScaDomainScriptServlet) servletHost.removeServletMapping(domainURI.toString());
if (scaDomainServlet != null) {
scaDomainServlet.removeService(binding.getName());
// put it back if there are still other services registered with the servlet
if (scaDomainServlet.getServiceNames().size() > 0) {
- servletHost.addServletMapping(SCA_DOMAIN_SCRIPT, scaDomainServlet);
+ servletHost.addServletMapping(domainURI.toString(), scaDomainServlet);
}
}
}
Modified: incubator/tuscany/java/sca/modules/http-jetty/src/main/java/org/apache/tuscany/sca/http/jetty/JettyServer.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/http-jetty/src/main/java/org/apache/tuscany/sca/http/jetty/JettyServer.java?view=diff&rev=561235&r1=561234&r2=561235
==============================================================================
--- incubator/tuscany/java/sca/modules/http-jetty/src/main/java/org/apache/tuscany/sca/http/jetty/JettyServer.java (original)
+++ incubator/tuscany/java/sca/modules/http-jetty/src/main/java/org/apache/tuscany/sca/http/jetty/JettyServer.java Mon Jul 30 22:55:20 2007
@@ -21,7 +21,12 @@
import java.net.URI;
import java.util.ArrayList;
import java.util.Arrays;
+import java.util.HashMap;
+import java.util.HashSet;
import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.Map.Entry;
import javax.servlet.Servlet;
import javax.servlet.ServletException;
@@ -40,8 +45,6 @@
import org.mortbay.jetty.servlet.ServletHolder;
import org.mortbay.jetty.servlet.ServletMapping;
import org.mortbay.jetty.servlet.SessionHandler;
-import org.mortbay.log.Log;
-import org.mortbay.log.Logger;
import org.mortbay.thread.ThreadPool;
/**
@@ -53,55 +56,51 @@
public class JettyServer implements ServletHost {
private static final String ROOT = "/";
- private static final int ERROR = 0;
- private static final int UNINITIALIZED = 0;
- private static final int STARTING = 1;
- private static final int STARTED = 2;
- private static final int STOPPING = 3;
- private static final int STOPPED = 4;
private static final int DEFAULT_PORT = 8080;
private final Object joinLock = new Object();
- private int state = UNINITIALIZED;
private String keystore;
private String certPassword;
private String keyPassword;
private boolean sendServerVersion;
- private boolean https;
- private int httpsPort = 8484;
- private boolean debug;
- private Server server;
- private Connector connector;
- private ServletHandler servletHandler;
private WorkScheduler workScheduler;
+ /**
+ * Represents a port and the server that serves it.
+ */
+ private class Port {
+ private Server server;
+ private ServletHandler servletHandler;
+
+ private Port(Server server, ServletHandler servletHandler) {
+ this.server = server;
+ this.servletHandler = servletHandler;
+ }
+
+ public Server getServer() {
+ return server;
+ }
+
+ public ServletHandler getServletHandler() {
+ return servletHandler;
+ }
+ }
+
+ private Map<Integer, Port> ports = new HashMap<Integer, Port>();
+
static {
- // hack to replace the static Jetty logger
+ // Hack to replace the static Jetty logger
System.setProperty("org.mortbay.log.class", JettyLogger.class.getName());
-
}
public JettyServer(WorkScheduler workScheduler) {
this.workScheduler = workScheduler;
-
- // Configure the Jetty logger
- Logger logger = Log.getLogger(null);
- if (logger instanceof JettyLogger) {
- JettyLogger jettyLogger = (JettyLogger)logger;
- if (debug) {
- jettyLogger.setDebugEnabled(true);
- }
- }
}
public void setSendServerVersion(boolean sendServerVersion) {
this.sendServerVersion = sendServerVersion;
}
- public void setHttps(boolean https) {
- this.https = https;
- }
-
public void setKeystore(String keystore) {
this.keystore = keystore;
}
@@ -114,83 +113,83 @@
this.keyPassword = keyPassword;
}
- public void setDebug(boolean val) {
- debug = val;
- }
-
- public void init() {
- state = STARTING;
- }
-
- public void destroy() {
- if (state == STARTED) {
- state = STOPPING;
+ /**
+ * Stop all the started servers.
+ */
+ public void stop() {
+ if (!ports.isEmpty()) {
synchronized (joinLock) {
joinLock.notifyAll();
}
try {
- server.stop();
+ Set<Entry<Integer, Port>> entries = new HashSet<Entry<Integer, Port>>(ports.entrySet());
+ for (Entry<Integer, Port> entry: entries) {
+ entry.getValue().getServer().stop();
+ ports.remove(entry.getKey());
+ }
} catch (Exception e) {
throw new ServletMappingException(e);
}
- state = STOPPED;
}
}
public void addServletMapping(String uriStr, Servlet servlet) throws ServletMappingException {
URI uri = URI.create(uriStr);
- int port = uri.getPort();
- if (state == STARTING) {
+
+ // Get the URI port
+ int portNumber = uri.getPort();
+ if (portNumber == -1) {
+ portNumber = DEFAULT_PORT;
+ }
- if (port == -1) {
- port = DEFAULT_PORT;
- }
+ // Get the port object associated with the given port number
+ Port port = ports.get(portNumber);
+ if (port == null) {
+ // Create an start a new server
try {
- server = new Server();
+ Server server = new Server();
server.setThreadPool(new WorkSchedulerThreadPool());
- if (connector == null) {
- if (https) {
- Connector httpConnector = new SelectChannelConnector();
- httpConnector.setPort(port);
- SslSocketConnector sslConnector = new SslSocketConnector();
- sslConnector.setPort(httpsPort);
- sslConnector.setKeystore(keystore);
- sslConnector.setPassword(certPassword);
- sslConnector.setKeyPassword(keyPassword);
- server.setConnectors(new Connector[] {httpConnector, sslConnector});
- } else {
- SelectChannelConnector selectConnector = new SelectChannelConnector();
- selectConnector.setPort(port);
- server.setConnectors(new Connector[] {selectConnector});
- }
+ if ("https".equals(uri.getScheme())) {
+ Connector httpConnector = new SelectChannelConnector();
+ httpConnector.setPort(portNumber);
+ SslSocketConnector sslConnector = new SslSocketConnector();
+ sslConnector.setPort(portNumber);
+ sslConnector.setKeystore(keystore);
+ sslConnector.setPassword(certPassword);
+ sslConnector.setKeyPassword(keyPassword);
+ server.setConnectors(new Connector[] {httpConnector, sslConnector});
} else {
- connector.setPort(port);
- server.setConnectors(new Connector[] {connector});
+ SelectChannelConnector selectConnector = new SelectChannelConnector();
+ selectConnector.setPort(portNumber);
+ server.setConnectors(new Connector[] {selectConnector});
}
-
+
ContextHandler contextHandler = new ContextHandler();
contextHandler.setContextPath(ROOT);
server.setHandler(contextHandler);
-
+
SessionHandler sessionHandler = new SessionHandler();
- servletHandler = new ServletHandler();
+ ServletHandler servletHandler = new ServletHandler();
sessionHandler.addHandler(servletHandler);
-
+
contextHandler.setHandler(sessionHandler);
-
+
server.setStopAtShutdown(true);
server.setSendServerVersion(sendServerVersion);
- // monitor.started();
server.start();
- state = STARTED;
+
+ // Keep track of the new server and servlet handler
+ port = new Port(server, servletHandler);
+ ports.put(portNumber, port);
+
} catch (Exception e) {
- state = ERROR;
throw new ServletMappingException(e);
}
}
// Register the servlet mapping
+ ServletHandler servletHandler = port.getServletHandler();
ServletHolder holder;
if (servlet instanceof DefaultResourceServlet) {
@@ -216,14 +215,31 @@
String path = uri.getPath();
mapping.setPathSpec(path);
servletHandler.addServletMapping(mapping);
- System.out.println("addServletMapping port: " + port + " path: " + path);
+
+ System.out.println("addServletMapping port: " + portNumber + " path: " + path);
}
- public Servlet removeServletMapping(String uri) {
+ public Servlet removeServletMapping(String uriStr) {
+ URI uri = URI.create(uriStr);
+
+ // Get the URI port
+ int portNumber = uri.getPort();
+ if (portNumber == -1) {
+ portNumber = DEFAULT_PORT;
+ }
+
+ // Get the port object associated with the given port number
+ Port port = ports.get(portNumber);
+ if (port == null) {
+ throw new IllegalStateException("No servlet registered at this URI: " + uriStr);
+ }
+
+ // Remove the servlet mapping for the given servlet
+ ServletHandler servletHandler = port.getServletHandler();
Servlet removedServlet = null;
List<ServletMapping> mappings =
new ArrayList<ServletMapping>(Arrays.asList(servletHandler.getServletMappings()));
- String path = URI.create(uri).getPath();
+ String path = uri.getPath();
for (ServletMapping mapping : mappings) {
if (Arrays.asList(mapping.getPathSpecs()).contains(path)) {
try {
@@ -242,7 +258,7 @@
}
/**
- * An integration wrapper to enable use of a {@link WorkScheduler} with Jetty
+ * A wrapper to enable use of a WorkScheduler with Jetty
*/
private class WorkSchedulerThreadPool implements ThreadPool {
@@ -266,34 +282,7 @@
}
public boolean isLowOnThreads() {
- // TODO FIXME
return false;
- }
-
- public void start() throws Exception {
- }
-
- public void stop() throws Exception {
- }
-
- public boolean isRunning() {
- return state == STARTING || state == STARTED;
- }
-
- public boolean isStarted() {
- return state == STARTED;
- }
-
- public boolean isStarting() {
- return state == STARTING;
- }
-
- public boolean isStopping() {
- return state == STOPPING;
- }
-
- public boolean isFailed() {
- return state == ERROR;
}
}
Modified: incubator/tuscany/java/sca/modules/http-jetty/src/main/java/org/apache/tuscany/sca/http/jetty/module/JettyRuntimeModuleActivator.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/http-jetty/src/main/java/org/apache/tuscany/sca/http/jetty/module/JettyRuntimeModuleActivator.java?view=diff&rev=561235&r1=561234&r2=561235
==============================================================================
--- incubator/tuscany/java/sca/modules/http-jetty/src/main/java/org/apache/tuscany/sca/http/jetty/module/JettyRuntimeModuleActivator.java (original)
+++ incubator/tuscany/java/sca/modules/http-jetty/src/main/java/org/apache/tuscany/sca/http/jetty/module/JettyRuntimeModuleActivator.java Mon Jul 30 22:55:20 2007
@@ -44,11 +44,10 @@
WorkScheduler workScheduler = extensionPointRegistry.getExtensionPoint(WorkScheduler.class);
server = new JettyServer(workScheduler);
servletHosts.addServletHost(server);
- server.init();
}
public void stop(ExtensionPointRegistry registry) {
- server.destroy();
+ server.stop();
}
}
Modified: incubator/tuscany/java/sca/modules/http-jetty/src/test/java/org/apache/tuscany/sca/http/jetty/JettyServerTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/http-jetty/src/test/java/org/apache/tuscany/sca/http/jetty/JettyServerTestCase.java?view=diff&rev=561235&r1=561234&r2=561235
==============================================================================
--- incubator/tuscany/java/sca/modules/http-jetty/src/test/java/org/apache/tuscany/sca/http/jetty/JettyServerTestCase.java (original)
+++ incubator/tuscany/java/sca/modules/http-jetty/src/test/java/org/apache/tuscany/sca/http/jetty/JettyServerTestCase.java Mon Jul 30 22:55:20 2007
@@ -79,7 +79,6 @@
*/
public void testRegisterServletMapping() throws Exception {
JettyServer service = new JettyServer(workScheduler);
- service.init();
TestServlet servlet = new TestServlet();
service.addServletMapping("http://127.0.0.1:" + HTTP_PORT + "/", servlet);
Socket client = new Socket("127.0.0.1", HTTP_PORT);
@@ -87,13 +86,12 @@
os.write(REQUEST1.getBytes());
os.flush();
read(client);
- service.destroy();
+ service.stop();
assertTrue(servlet.invoked);
}
public void testUnregisterMapping() throws Exception {
JettyServer service = new JettyServer(workScheduler);
- service.init();
TestServlet servlet = new TestServlet();
String uri = "http://127.0.0.1:" + HTTP_PORT + "/foo";
service.addServletMapping(uri, servlet);
@@ -103,14 +101,12 @@
os.write(REQUEST1.getBytes());
os.flush();
read(client);
- service.destroy();
+ service.stop();
assertFalse(servlet.invoked);
}
public void testRequestSession() throws Exception {
JettyServer service = new JettyServer(workScheduler);
- service.setDebug(true);
- service.init();
TestServlet servlet = new TestServlet();
service.addServletMapping("http://127.0.0.1:" + HTTP_PORT + "/", servlet);
Socket client = new Socket("127.0.0.1", HTTP_PORT);
@@ -118,22 +114,19 @@
os.write(REQUEST1.getBytes());
os.flush();
read(client);
- service.destroy();
+ service.stop();
assertTrue(servlet.invoked);
assertNotNull(servlet.sessionId);
}
public void testRestart() throws Exception {
JettyServer service = new JettyServer(workScheduler);
- service.init();
- service.destroy();
- service.init();
- service.destroy();
+ service.stop();
+ service.stop();
}
public void testNoMappings() throws Exception {
JettyServer service = new JettyServer(workScheduler);
- service.init();
Exception ex = null;
try {
new Socket("127.0.0.1", HTTP_PORT);
@@ -141,12 +134,11 @@
ex = e;
}
assertNotNull(ex);
- service.destroy();
+ service.stop();
}
public void testResourceServlet() throws Exception {
JettyServer service = new JettyServer(workScheduler);
- service.init();
String documentRoot = getClass().getClassLoader().getResource("content/test.html").toString();
documentRoot = documentRoot.substring(0, documentRoot.lastIndexOf('/'));
@@ -162,12 +154,11 @@
String document = read(client);
assertTrue(document.indexOf("<body><p>hello</body>") != -1);
- service.destroy();
+ service.stop();
}
public void testDefaultServlet() throws Exception {
JettyServer service = new JettyServer(workScheduler);
- service.init();
String documentRoot = getClass().getClassLoader().getResource("content/test.html").toString();
documentRoot = documentRoot.substring(0, documentRoot.lastIndexOf('/'));
@@ -182,7 +173,7 @@
String document = read(client);
assertTrue(document.indexOf("<body><p>hello</body>") != -1);
- service.destroy();
+ service.stop();
}
private static String read(Socket socket) throws IOException {
---------------------------------------------------------------------
To unsubscribe, e-mail: tuscany-commits-unsubscribe@ws.apache.org
For additional commands, e-mail: tuscany-commits-help@ws.apache.org