Repository: avro Updated Branches: refs/heads/master 9f3ceefda -> 3af404efb
AVRO-1213 Update to latest release of Jetty Closes #244 Signed-off-by: sacharya <[email protected]> Signed-off-by: Nandor Kollar <[email protected]> Signed-off-by: Anna Szonyi <[email protected]> Project: http://git-wip-us.apache.org/repos/asf/avro/repo Commit: http://git-wip-us.apache.org/repos/asf/avro/commit/3af404ef Tree: http://git-wip-us.apache.org/repos/asf/avro/tree/3af404ef Diff: http://git-wip-us.apache.org/repos/asf/avro/diff/3af404ef Branch: refs/heads/master Commit: 3af404efb31a1dc2fd720384ef9a3f7326c2d303 Parents: 9f3ceef Author: Daniel Kulp <[email protected]> Authored: Fri Sep 8 13:18:33 2017 -0400 Committer: Nandor Kollar <[email protected]> Committed: Fri Nov 17 10:12:32 2017 +0100 ---------------------------------------------------------------------- lang/java/ipc/pom.xml | 16 ++-- .../java/org/apache/avro/ipc/HttpServer.java | 82 +++++++++++++++----- .../apache/avro/ipc/stats/StaticServlet.java | 17 ++-- .../org/apache/avro/ipc/stats/StatsServer.java | 14 ++-- .../java/org/apache/avro/TestProtocolHttps.java | 30 +++---- .../ipc/stats/TestStatsPluginAndServlet.java | 2 - lang/java/pom.xml | 12 ++- 7 files changed, 98 insertions(+), 75 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/avro/blob/3af404ef/lang/java/ipc/pom.xml ---------------------------------------------------------------------- diff --git a/lang/java/ipc/pom.xml b/lang/java/ipc/pom.xml index 186967f..fbd44f0 100644 --- a/lang/java/ipc/pom.xml +++ b/lang/java/ipc/pom.xml @@ -40,7 +40,7 @@ org.apache.avro*;version="${project.version}", org.jboss.netty*, javax.servlet*;resolution:=optional, - org.mortbay*;resolution:=optional, + org.eclipse*;resolution:=optional, org.apache.velocity*;resolution:=optional, * </osgi.import> @@ -125,13 +125,12 @@ <version>${jackson.version}</version> </dependency> <dependency> - <groupId>org.mortbay.jetty</groupId> - <artifactId>jetty</artifactId> + <groupId>org.eclipse.jetty</groupId> + <artifactId>jetty-server</artifactId> </dependency> <dependency> - <groupId>org.mortbay.jetty</groupId> - <artifactId>jetty-util</artifactId> - <version>${jetty.version}</version> + <groupId>org.eclipse.jetty</groupId> + <artifactId>jetty-servlet</artifactId> </dependency> <dependency> <groupId>io.netty</groupId> @@ -141,11 +140,6 @@ <groupId>org.apache.velocity</groupId> <artifactId>velocity</artifactId> </dependency> - <dependency> - <groupId>org.mortbay.jetty</groupId> - <artifactId>servlet-api</artifactId> - <version>${jetty-servlet-api.version}</version> - </dependency> </dependencies> http://git-wip-us.apache.org/repos/asf/avro/blob/3af404ef/lang/java/ipc/src/main/java/org/apache/avro/ipc/HttpServer.java ---------------------------------------------------------------------- diff --git a/lang/java/ipc/src/main/java/org/apache/avro/ipc/HttpServer.java b/lang/java/ipc/src/main/java/org/apache/avro/ipc/HttpServer.java index be6bbb2..604b3ac 100644 --- a/lang/java/ipc/src/main/java/org/apache/avro/ipc/HttpServer.java +++ b/lang/java/ipc/src/main/java/org/apache/avro/ipc/HttpServer.java @@ -19,17 +19,21 @@ package org.apache.avro.ipc; import java.io.IOException; +import java.util.Arrays; import org.apache.avro.AvroRuntimeException; - -import org.mortbay.jetty.Connector; -import org.mortbay.jetty.nio.SelectChannelConnector; -import org.mortbay.jetty.servlet.Context; -import org.mortbay.jetty.servlet.ServletHolder; +import org.eclipse.jetty.server.ConnectionFactory; +import org.eclipse.jetty.server.Connector; +import org.eclipse.jetty.server.HttpConfiguration; +import org.eclipse.jetty.server.HttpConnectionFactory; +import org.eclipse.jetty.server.ServerConnector; +import org.eclipse.jetty.servlet.ServletContextHandler; +import org.eclipse.jetty.servlet.ServletHandler; +import org.eclipse.jetty.servlet.ServletHolder; /** An HTTP-based RPC {@link Server}. */ public class HttpServer implements Server { - private org.mortbay.jetty.Server server; + private org.eclipse.jetty.server.Server server; /** Constructs a server to run on the named port. */ public HttpServer(Responder responder, int port) throws IOException { @@ -48,30 +52,68 @@ public class HttpServer implements Server { /** Constructs a server to run on the named port on the specified address. */ public HttpServer(ResponderServlet servlet, String bindAddress, int port) throws IOException { - this.server = new org.mortbay.jetty.Server(); - SelectChannelConnector connector = new SelectChannelConnector(); - connector.setLowResourceMaxIdleTime(10000); + this.server = new org.eclipse.jetty.server.Server(); + ServerConnector connector = new ServerConnector(this.server); connector.setAcceptQueueSize(128); - connector.setResolveNames(false); - connector.setUseDirectBuffers(false); + connector.setIdleTimeout(10000); if (bindAddress != null) { connector.setHost(bindAddress); } connector.setPort(port); server.addConnector(connector); - new Context(server, "/").addServlet(new ServletHolder(servlet), "/*"); + + ServletHandler handler = new ServletHandler(); + handler.addServletWithMapping(new ServletHolder(servlet), "/*"); + ServletContextHandler sch = new ServletContextHandler(); + sch.setServletHandler(handler); + server.setHandler(sch); } - /** Constructs a server to run with the given connector. */ - public HttpServer(Responder responder, Connector connector) throws IOException { - this(new ResponderServlet(responder), connector); + /** Constructs a server to run with the given ConnectionFactory on the given address/port. */ + public HttpServer(Responder responder, ConnectionFactory connectionFactory, String bindAddress, int port) throws IOException { + this(new ResponderServlet(responder), connectionFactory, bindAddress, port); } - /** Constructs a server to run with the given connector. */ - public HttpServer(ResponderServlet servlet, Connector connector) throws IOException { - this.server = new org.mortbay.jetty.Server(); + /** Constructs a server to run with the given ConnectionFactory on the given address/port. */ + public HttpServer(ResponderServlet servlet, ConnectionFactory connectionFactory, String bindAddress, int port) throws IOException { + this.server = new org.eclipse.jetty.server.Server(); + HttpConfiguration httpConfig = new HttpConfiguration(); + HttpConnectionFactory httpFactory = new HttpConnectionFactory(httpConfig); + ServerConnector connector = new ServerConnector(this.server, connectionFactory, httpFactory); + if (bindAddress != null) { + connector.setHost(bindAddress); + } + connector.setPort(port); + server.addConnector(connector); - new Context(server, "/").addServlet(new ServletHolder(servlet), "/*"); + ServletHandler handler = new ServletHandler(); + server.setHandler(handler); + handler.addServletWithMapping(new ServletHolder(servlet), "/*"); + } + + /** + * Constructs a server to run with the given connector. + * + * @deprecated - use the Constructors that take a ConnectionFactory + */ + @Deprecated + public HttpServer(ResponderServlet servlet, Connector connector) throws IOException { + this.server = connector.getServer(); + if (server.getConnectors().length == 0 || Arrays.asList(server.getConnectors()).contains(connector)) { + server.addConnector(connector); + } + ServletHandler handler = new ServletHandler(); + server.setHandler(handler); + handler.addServletWithMapping(new ServletHolder(servlet), "/*"); + } + /** + * Constructs a server to run with the given connector. + * + * @deprecated - use the Constructors that take a ConnectionFactory + */ + @Deprecated + public HttpServer(Responder responder, Connector connector) throws IOException { + this(new ResponderServlet(responder), connector); } public void addConnector(Connector connector) { @@ -79,7 +121,7 @@ public class HttpServer implements Server { } @Override - public int getPort() { return server.getConnectors()[0].getLocalPort(); } + public int getPort() { return ((ServerConnector)server.getConnectors()[0]).getLocalPort(); } @Override public void close() { http://git-wip-us.apache.org/repos/asf/avro/blob/3af404ef/lang/java/ipc/src/main/java/org/apache/avro/ipc/stats/StaticServlet.java ---------------------------------------------------------------------- diff --git a/lang/java/ipc/src/main/java/org/apache/avro/ipc/stats/StaticServlet.java b/lang/java/ipc/src/main/java/org/apache/avro/ipc/stats/StaticServlet.java index 88a50f8..f7ee2f7 100644 --- a/lang/java/ipc/src/main/java/org/apache/avro/ipc/stats/StaticServlet.java +++ b/lang/java/ipc/src/main/java/org/apache/avro/ipc/stats/StaticServlet.java @@ -18,11 +18,10 @@ package org.apache.avro.ipc.stats; -import java.io.IOException; import java.net.URL; -import org.mortbay.jetty.servlet.DefaultServlet; -import org.mortbay.resource.Resource; +import org.eclipse.jetty.servlet.DefaultServlet; +import org.eclipse.jetty.util.resource.Resource; /** * Very simple servlet class capable of serving static files. @@ -34,13 +33,9 @@ public class StaticServlet extends DefaultServlet { String[] parts = pathInContext.split("/"); String filename = parts[parts.length - 1]; - try { - URL resource = getClass().getClassLoader().getResource( - "org/apache/avro/ipc/stats/static/" + filename); - if (resource == null) { return null; } - return Resource.newResource(resource); - } catch (IOException e) { - return null; - } + URL resource = getClass().getClassLoader().getResource( + "org/apache/avro/ipc/stats/static/" + filename); + if (resource == null) { return null; } + return Resource.newResource(resource); } } http://git-wip-us.apache.org/repos/asf/avro/blob/3af404ef/lang/java/ipc/src/main/java/org/apache/avro/ipc/stats/StatsServer.java ---------------------------------------------------------------------- diff --git a/lang/java/ipc/src/main/java/org/apache/avro/ipc/stats/StatsServer.java b/lang/java/ipc/src/main/java/org/apache/avro/ipc/stats/StatsServer.java index 1b2e54b..0d85ac6 100644 --- a/lang/java/ipc/src/main/java/org/apache/avro/ipc/stats/StatsServer.java +++ b/lang/java/ipc/src/main/java/org/apache/avro/ipc/stats/StatsServer.java @@ -16,9 +16,9 @@ package org.apache.avro.ipc.stats; * See the License for the specific language governing permissions and * limitations under the License. */ -import org.mortbay.jetty.Server; -import org.mortbay.jetty.servlet.Context; -import org.mortbay.jetty.servlet.ServletHolder; +import org.eclipse.jetty.server.Server; +import org.eclipse.jetty.servlet.ServletHandler; +import org.eclipse.jetty.servlet.ServletHolder; /* This is a server that displays live information from a StatsPlugin. * @@ -38,11 +38,11 @@ public class StatsServer { this.httpServer = new Server(port); this.plugin = plugin; - Context staticContext = new Context(httpServer, "/static"); - staticContext.addServlet(new ServletHolder(new StaticServlet()), "/"); + ServletHandler handler = new ServletHandler(); + httpServer.setHandler(handler); + handler.addServletWithMapping(new ServletHolder(new StaticServlet()), "/"); - Context context = new Context(httpServer, "/"); - context.addServlet(new ServletHolder(new StatsServlet(plugin)), "/"); + handler.addServletWithMapping(new ServletHolder(new StatsServlet(plugin)), "/"); httpServer.start(); } http://git-wip-us.apache.org/repos/asf/avro/blob/3af404ef/lang/java/ipc/src/test/java/org/apache/avro/TestProtocolHttps.java ---------------------------------------------------------------------- diff --git a/lang/java/ipc/src/test/java/org/apache/avro/TestProtocolHttps.java b/lang/java/ipc/src/test/java/org/apache/avro/TestProtocolHttps.java index f770dae..4f001a6 100644 --- a/lang/java/ipc/src/test/java/org/apache/avro/TestProtocolHttps.java +++ b/lang/java/ipc/src/test/java/org/apache/avro/TestProtocolHttps.java @@ -17,27 +17,17 @@ */ package org.apache.avro; -import org.apache.avro.Schema; -import org.apache.avro.Schema.Field; import org.apache.avro.ipc.Server; import org.apache.avro.ipc.Transceiver; import org.apache.avro.ipc.Responder; import org.apache.avro.ipc.HttpServer; import org.apache.avro.ipc.HttpTransceiver; -import org.apache.avro.ipc.generic.GenericRequestor; -import org.apache.avro.ipc.specific.SpecificRequestor; -import org.apache.avro.generic.GenericData; -import org.apache.avro.test.Simple; +import org.eclipse.jetty.server.SslConnectionFactory; +import org.eclipse.jetty.util.ssl.SslContextFactory; -import org.junit.Test; -import org.mortbay.jetty.security.SslSocketConnector; import java.net.URL; -import java.net.ServerSocket; -import java.net.SocketTimeoutException; -import java.lang.reflect.UndeclaredThrowableException; -import java.util.ArrayList; public class TestProtocolHttps extends TestProtocolSpecific { @@ -48,14 +38,14 @@ public class TestProtocolHttps extends TestProtocolSpecific { System.setProperty("javax.net.ssl.password", "avrotest"); System.setProperty("javax.net.ssl.trustStore", "src/test/truststore"); System.setProperty("javax.net.ssl.trustStorePassword", "avrotest"); - SslSocketConnector connector = new SslSocketConnector(); - connector.setPort(18443); - connector.setKeystore(System.getProperty("javax.net.ssl.keyStore")); - connector.setPassword(System.getProperty("javax.net.ssl.password")); - connector.setKeyPassword(System.getProperty("javax.net.ssl.keyStorePassword")); - connector.setHost("localhost"); - connector.setNeedClientAuth(false); - return new HttpServer(testResponder, connector); + SslConnectionFactory connectionFactory = new SslConnectionFactory("HTTP/1.1"); + SslContextFactory sslContextFactory = connectionFactory.getSslContextFactory(); + + sslContextFactory.setKeyStorePath(System.getProperty("javax.net.ssl.keyStore")); + sslContextFactory.setKeyManagerPassword(System.getProperty("javax.net.ssl.password")); + sslContextFactory.setKeyStorePassword(System.getProperty("javax.net.ssl.keyStorePassword")); + sslContextFactory.setNeedClientAuth(false); + return new HttpServer(testResponder, connectionFactory, "localhost", 18443); } @Override http://git-wip-us.apache.org/repos/asf/avro/blob/3af404ef/lang/java/ipc/src/test/java/org/apache/avro/ipc/stats/TestStatsPluginAndServlet.java ---------------------------------------------------------------------- diff --git a/lang/java/ipc/src/test/java/org/apache/avro/ipc/stats/TestStatsPluginAndServlet.java b/lang/java/ipc/src/test/java/org/apache/avro/ipc/stats/TestStatsPluginAndServlet.java index c0f9664..6558b5e 100644 --- a/lang/java/ipc/src/test/java/org/apache/avro/ipc/stats/TestStatsPluginAndServlet.java +++ b/lang/java/ipc/src/test/java/org/apache/avro/ipc/stats/TestStatsPluginAndServlet.java @@ -42,7 +42,6 @@ import org.apache.avro.ipc.Transceiver; import org.apache.avro.ipc.generic.GenericRequestor; import org.apache.avro.ipc.generic.GenericResponder; import org.junit.Test; -import org.mortbay.log.Log; public class TestStatsPluginAndServlet { Protocol protocol = Protocol.parse("" + "{\"protocol\": \"Minimal\", " @@ -187,7 +186,6 @@ public class TestStatsPluginAndServlet { + " \"request\": [{\"name\": \"millis\", \"type\": \"long\"}," + "{\"name\": \"data\", \"type\": \"bytes\"}], " + " \"response\": \"null\"} } }"); - Log.info("Using protocol: " + protocol.toString()); Responder r = new SleepyResponder(protocol); StatsPlugin p = new StatsPlugin(); r.addRPCPlugin(p); http://git-wip-us.apache.org/repos/asf/avro/blob/3af404ef/lang/java/pom.xml ---------------------------------------------------------------------- diff --git a/lang/java/pom.xml b/lang/java/pom.xml index 178897a..6e8e42a 100644 --- a/lang/java/pom.xml +++ b/lang/java/pom.xml @@ -40,8 +40,7 @@ <hadoop2.version>2.7.3</hadoop2.version> <jackson.version>1.9.13</jackson.version> - <jetty.version>6.1.26</jetty.version> - <jetty-servlet-api.version>2.5-20081211</jetty-servlet-api.version> + <jetty.version>9.4.6.v20170531</jetty.version> <jopt-simple.version>5.0.3</jopt-simple.version> <junit.version>4.12</junit.version> <netty.version>3.10.6.Final</netty.version> @@ -439,11 +438,16 @@ <version>${velocity.version}</version> </dependency> <dependency> - <groupId>org.mortbay.jetty</groupId> - <artifactId>jetty</artifactId> + <groupId>org.eclipse.jetty</groupId> + <artifactId>jetty-server</artifactId> <version>${jetty.version}</version> </dependency> <dependency> + <groupId>org.eclipse.jetty</groupId> + <artifactId>jetty-servlet</artifactId> + <version>${jetty.version}</version> + </dependency> + <dependency> <groupId>io.netty</groupId> <artifactId>netty</artifactId> <version>${netty.version}</version>
