killbill-aplcache

profiles: upgrade to Jetty 9 Signed-off-by: Pierre-Alexandre

3/17/2015 2:57:14 PM

Changes

profiles/killbill/src/main/jetty-config/contexts/root.xml 27(+0 -27)

profiles/killbill/src/main/jetty-config/etc/webdefault.xml 253(+0 -253)

profiles/killbill/src/main/jetty-config/jetty-conf.xml 138(+0 -138)

profiles/killpay/src/main/jetty-config/contexts/root.xml 28(+0 -28)

profiles/killpay/src/main/jetty-config/etc/webdefault.xml 254(+0 -254)

profiles/killpay/src/main/jetty-config/jetty-conf.xml 139(+0 -139)

Details

diff --git a/profiles/killbill/pom.xml b/profiles/killbill/pom.xml
index 9b21cd9..3a084e0 100644
--- a/profiles/killbill/pom.xml
+++ b/profiles/killbill/pom.xml
@@ -385,56 +385,16 @@
                 </executions>
             </plugin>
             <plugin>
-                <groupId>org.mortbay.jetty</groupId>
+                <groupId>org.eclipse.jetty</groupId>
                 <artifactId>jetty-maven-plugin</artifactId>
-                <version>${jetty.version}</version>
-                <dependencies>
-                    <dependency>
-                        <groupId>ch.qos.logback</groupId>
-                        <artifactId>logback-classic</artifactId>
-                        <version>${logback.version}</version>
-                        <scope>runtime</scope>
-                    </dependency>
-                    <dependency>
-                        <groupId>ch.qos.logback</groupId>
-                        <artifactId>logback-core</artifactId>
-                        <version>${logback.version}</version>
-                        <scope>runtime</scope>
-                    </dependency>
-                    <dependency>
-                        <groupId>org.eclipse.jetty</groupId>
-                        <artifactId>jetty-deploy</artifactId>
-                        <version>${jetty.version}</version>
-                    </dependency>
-                    <dependency>
-                        <groupId>org.eclipse.jetty</groupId>
-                        <artifactId>jetty-jmx</artifactId>
-                        <version>${jetty.version}</version>
-                    </dependency>
-                    <!-- Needed to redirect Jetty logs to slf4j -->
-                    <dependency>
-                        <groupId>org.slf4j</groupId>
-                        <artifactId>slf4j-api</artifactId>
-                        <version>${slf4j.version}</version>
-                    </dependency>
-                </dependencies>
                 <configuration>
-                    <jettyXml>${basedir}/src/main/jetty-config/jetty-conf.xml</jettyXml>
-                    <contextXml>${basedir}/src/main/jetty-config/contexts/root.xml</contextXml>
+                    <webAppSourceDirectory>${basedir}/src/main/webapp</webAppSourceDirectory>
                     <systemProperties>
                         <systemProperty>
-                            <!-- See root.xml -->
-                            <name>xn.jetty.webapps.defaultsDescriptor</name>
-                            <value>${basedir}/src/main/jetty-config/etc/webdefault.xml</value>
-                        </systemProperty>
-                        <systemProperty>
                             <name>logback.configurationFile</name>
                             <value>file:${basedir}/src/main/resources/logback.xml</value>
                         </systemProperty>
                     </systemProperties>
-                    <scanIntervalSeconds>0</scanIntervalSeconds>
-                    <stopPort>9966</stopPort>
-                    <stopKey>foo</stopKey>
                 </configuration>
             </plugin>
             <plugin>
diff --git a/profiles/killbill/src/test/java/org/killbill/billing/jetty/HttpServer.java b/profiles/killbill/src/test/java/org/killbill/billing/jetty/HttpServer.java
index d1c7bf1..d07aaff 100644
--- a/profiles/killbill/src/test/java/org/killbill/billing/jetty/HttpServer.java
+++ b/profiles/killbill/src/test/java/org/killbill/billing/jetty/HttpServer.java
@@ -1,7 +1,7 @@
 /*
  * Copyright 2010-2014 Ning, Inc.
- * Copyright 2014 Groupon, Inc
- * Copyright 2014 The Billing Project, LLC
+ * Copyright 2014-2015 Groupon, Inc
+ * Copyright 2014-2015 The Billing Project, LLC
  *
  * The Billing Project licenses this file to you under the Apache License, version 2.0
  * (the "License"); you may not use this file except in compliance with the
@@ -28,15 +28,22 @@ import javax.annotation.PreDestroy;
 import javax.management.MBeanServer;
 import javax.servlet.DispatcherType;
 
+import org.eclipse.jetty.http.HttpVersion;
 import org.eclipse.jetty.jmx.MBeanContainer;
+import org.eclipse.jetty.server.ConnectionFactory;
+import org.eclipse.jetty.server.Connector;
+import org.eclipse.jetty.server.ConnectorStatistics;
+import org.eclipse.jetty.server.HttpConfiguration;
+import org.eclipse.jetty.server.HttpConnectionFactory;
 import org.eclipse.jetty.server.NCSARequestLog;
 import org.eclipse.jetty.server.RequestLog;
+import org.eclipse.jetty.server.SecureRequestCustomizer;
 import org.eclipse.jetty.server.Server;
+import org.eclipse.jetty.server.ServerConnector;
+import org.eclipse.jetty.server.SslConnectionFactory;
 import org.eclipse.jetty.server.handler.HandlerCollection;
 import org.eclipse.jetty.server.handler.HandlerList;
 import org.eclipse.jetty.server.handler.RequestLogHandler;
-import org.eclipse.jetty.server.nio.SelectChannelConnector;
-import org.eclipse.jetty.server.ssl.SslSelectChannelConnector;
 import org.eclipse.jetty.servlet.DefaultServlet;
 import org.eclipse.jetty.servlet.FilterHolder;
 import org.eclipse.jetty.servlet.ServletContextHandler;
@@ -60,7 +67,13 @@ public class HttpServer {
 
     public HttpServer() {
         this.server = new Server();
-        server.setSendServerVersion(false);
+        for (final Connector connector : server.getConnectors()) {
+            for (final ConnectionFactory connectionFactory : connector.getConnectionFactories()) {
+                if (connectionFactory instanceof HttpConnectionFactory) {
+                    ((HttpConnectionFactory) connectionFactory).getHttpConfiguration().setSendServerVersion(false);
+                }
+            }
+        }
     }
 
     public HttpServer(final String jettyXml) throws Exception {
@@ -79,12 +92,20 @@ public class HttpServer {
         // Setup JMX
         configureJMX(ManagementFactory.getPlatformMBeanServer());
 
+        // HTTP Configuration
+        final HttpConfiguration httpConfiguration = new HttpConfiguration();
+        httpConfiguration.setSecurePort(config.getServerSslPort());
+
         // Configure main connector
-        configureMainConnector(config.isJettyStatsOn(), config.getServerHost(), config.getServerPort());
+        final ServerConnector http = configureMainConnector(httpConfiguration, config.isJettyStatsOn(), config.getServerHost(), config.getServerPort());
 
         // Configure SSL, if enabled
+        final ServerConnector https;
         if (config.isSSLEnabled()) {
-            configureSslConnector(config.isJettyStatsOn(), config.getServerSslPort(), config.getSSLkeystoreLocation(), config.getSSLkeystorePassword());
+            https = configureSslConnector(httpConfiguration, config.isJettyStatsOn(), config.getServerSslPort(), config.getSSLkeystoreLocation(), config.getSSLkeystorePassword());
+            server.setConnectors(new Connector[]{http, https});
+        } else {
+            server.setConnectors(new Connector[]{http});
         }
 
         // Configure the thread pool
@@ -113,36 +134,57 @@ public class HttpServer {
     }
 
     private void configureJMX(final MBeanServer mbeanServer) {
+        // Setup JMX
         final MBeanContainer mbContainer = new MBeanContainer(mbeanServer);
-        mbContainer.addBean(Log.getLogger(HttpServer.class));
         server.addBean(mbContainer);
+        // Add loggers MBean to server (will be picked up by MBeanContainer above)
+        server.addBean(Log.getLogger(HttpServer.class));
     }
 
-    private void configureMainConnector(final boolean isStatsOn, final String localIp, final int localPort) {
-        final SelectChannelConnector connector = new SelectChannelConnector();
-        connector.setName("http");
-        connector.setStatsOn(isStatsOn);
-        connector.setHost(localIp);
-        connector.setPort(localPort);
-        server.addConnector(connector);
+    private ServerConnector configureMainConnector(final HttpConfiguration httpConfiguration, final boolean isStatsOn, final String localIp, final int localPort) {
+        final ServerConnector http = new ServerConnector(server, new HttpConnectionFactory(httpConfiguration));
+        http.setHost(localIp);
+        http.setPort(localPort);
+
+        if (isStatsOn) {
+            final ConnectorStatistics stats = new ConnectorStatistics();
+            http.addBean(stats);
+        }
+
+        return http;
     }
 
-    private void configureSslConnector(final boolean isStatsOn, final int localSslPort, final String sslKeyStorePath, final String sslKeyStorePassword) {
-        final SslSelectChannelConnector sslConnector = new SslSelectChannelConnector();
-        sslConnector.setName("https");
-        sslConnector.setStatsOn(isStatsOn);
-        sslConnector.setPort(localSslPort);
-        final SslContextFactory sslContextFactory = sslConnector.getSslContextFactory();
+    private ServerConnector configureSslConnector(final HttpConfiguration httpConfiguration, final boolean isStatsOn, final int localSslPort, final String sslKeyStorePath, final String sslKeyStorePassword) {
+        // SSL Context Factory for HTTPS
+        final SslContextFactory sslContextFactory = new SslContextFactory();
         sslContextFactory.setKeyStorePath(sslKeyStorePath);
         sslContextFactory.setKeyStorePassword(sslKeyStorePassword);
-        server.addConnector(sslConnector);
+
+        // HTTPS Configuration
+        final HttpConfiguration httpsConfig = new HttpConfiguration(httpConfiguration);
+        httpsConfig.addCustomizer(new SecureRequestCustomizer());
+
+        // HTTPS connector
+        final ServerConnector https = new ServerConnector(server,
+                                                          new SslConnectionFactory(sslContextFactory, HttpVersion.HTTP_1_1.asString()),
+                                                          new HttpConnectionFactory(httpsConfig));
+        https.setPort(localSslPort);
+
+        if (isStatsOn) {
+            final ConnectorStatistics stats = new ConnectorStatistics();
+            https.addBean(stats);
+        }
+
+        return https;
     }
 
     private void configureThreadPool(final HttpServerConfig config) {
-        final QueuedThreadPool threadPool = new QueuedThreadPool(config.getMaxThreads());
-        threadPool.setMinThreads(config.getMinThreads());
-        threadPool.setName("http-worker");
-        server.setThreadPool(threadPool);
+        if (server.getThreadPool() instanceof QueuedThreadPool) {
+            final QueuedThreadPool threadPool = (QueuedThreadPool) server.getThreadPool();
+            threadPool.setMaxThreads(config.getMaxThreads());
+            threadPool.setMinThreads(config.getMinThreads());
+            threadPool.setName("http-worker");
+        }
     }
 
     private ServletContextHandler createServletContextHandler(final String resourceBase, final Iterable<EventListener> eventListeners, final Map<FilterHolder, String> filterHolders) {
diff --git a/profiles/killpay/pom.xml b/profiles/killpay/pom.xml
index 1368c3f..3b20b8f 100644
--- a/profiles/killpay/pom.xml
+++ b/profiles/killpay/pom.xml
@@ -213,57 +213,17 @@
                 </executions>
             </plugin>
             <plugin>
-                <groupId>org.mortbay.jetty</groupId>
+                <groupId>org.eclipse.jetty</groupId>
                 <artifactId>jetty-maven-plugin</artifactId>
-                <version>${jetty.version}</version>
-                <dependencies>
-                    <dependency>
-                        <groupId>ch.qos.logback</groupId>
-                        <artifactId>logback-classic</artifactId>
-                        <version>${logback.version}</version>
-                        <scope>runtime</scope>
-                    </dependency>
-                    <dependency>
-                        <groupId>ch.qos.logback</groupId>
-                        <artifactId>logback-core</artifactId>
-                        <version>${logback.version}</version>
-                        <scope>runtime</scope>
-                    </dependency>
-                    <dependency>
-                        <groupId>org.eclipse.jetty</groupId>
-                        <artifactId>jetty-deploy</artifactId>
-                        <version>${jetty.version}</version>
-                    </dependency>
-                    <dependency>
-                        <groupId>org.eclipse.jetty</groupId>
-                        <artifactId>jetty-jmx</artifactId>
-                        <version>${jetty.version}</version>
-                    </dependency>
-                    <!-- Needed to redirect Jetty logs to slf4j -->
-                    <dependency>
-                        <groupId>org.slf4j</groupId>
-                        <artifactId>slf4j-api</artifactId>
-                        <version>${slf4j.version}</version>
-                    </dependency>
-                </dependencies>
                 <configuration>
-                    <jettyXml>${basedir}/src/main/jetty-config/jetty-conf.xml</jettyXml>
-                    <contextXml>${basedir}/src/main/jetty-config/contexts/root.xml</contextXml>
+                    <webAppSourceDirectory>${basedir}/src/main/webapp</webAppSourceDirectory>
                     <systemProperties>
                         <systemProperty>
-                            <!-- See root.xml -->
-                            <name>xn.jetty.webapps.defaultsDescriptor</name>
-                            <value>${basedir}/src/main/jetty-config/etc/webdefault.xml</value>
-                        </systemProperty>
-                        <systemProperty>
                             <name>logback.configurationFile</name>
                             <!-- Use the killbill one on the classpth -->
                             <value>logback.xml</value>
                         </systemProperty>
                     </systemProperties>
-                    <scanIntervalSeconds>0</scanIntervalSeconds>
-                    <stopPort>9966</stopPort>
-                    <stopKey>foo</stopKey>
                 </configuration>
             </plugin>
             <plugin>