You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@felix.apache.org by fm...@apache.org on 2011/01/08 01:59:44 UTC

svn commit: r1056579 - in /felix/trunk/http/jetty/src/main/java/org/apache/felix/http/jetty/internal: JettyConfig.java JettyService.java

Author: fmeschbe
Date: Sat Jan  8 00:59:44 2011
New Revision: 1056579

URL: http://svn.apache.org/viewvc?rev=1056579&view=rev
Log:
FELIX-2398 Add configuration properties to set whether NIO is to be used for HTTP(S):
   org.apache.felix.http.nio - (boolean) whether to use NIO for HTTP or not, default is true
   org.apache.felix.https.nio - (boolean) whether to use NIO for HTTPS or not, default is to use
         the value of the org.apache.felix.http.nio property

Modified:
    felix/trunk/http/jetty/src/main/java/org/apache/felix/http/jetty/internal/JettyConfig.java
    felix/trunk/http/jetty/src/main/java/org/apache/felix/http/jetty/internal/JettyService.java

Modified: felix/trunk/http/jetty/src/main/java/org/apache/felix/http/jetty/internal/JettyConfig.java
URL: http://svn.apache.org/viewvc/felix/trunk/http/jetty/src/main/java/org/apache/felix/http/jetty/internal/JettyConfig.java?rev=1056579&r1=1056578&r2=1056579&view=diff
==============================================================================
--- felix/trunk/http/jetty/src/main/java/org/apache/felix/http/jetty/internal/JettyConfig.java (original)
+++ felix/trunk/http/jetty/src/main/java/org/apache/felix/http/jetty/internal/JettyConfig.java Sat Jan  8 00:59:44 2011
@@ -60,7 +60,13 @@ public final class JettyConfig
 
     /** Felix specific property to control whether to want or require HTTPS client certificates. Valid values are "none", "wants", "needs". Default is "none". */
     private static final String FELIX_HTTPS_CLIENT_CERT = "org.apache.felix.https.clientcertificate";
-    
+
+    /** Felix specific property to control whether Jetty uses NIO or not for HTTP. Valid values are "true", "false". Default is true */
+    public static final String  FELIX_HTTP_NIO = "org.apache.felix.http.nio";
+
+    /** Felix specific property to control whether Jetty uses NIO or not for HTTPS. Valid values are "true", "false". Default is the value of org.apache.felix.http.nio */
+    public static final String  FELIX_HTTPS_NIO = "org.apache.felix.https.nio";
+
     private final BundleContext context;
     private boolean debug;
     private int httpPort;
@@ -73,6 +79,8 @@ public final class JettyConfig
     private String trustPassword;
     private boolean useHttp;
     private String clientcert;
+    private boolean useHttpNio;
+    private boolean useHttpsNio;
 
     public JettyConfig(BundleContext context)
     {
@@ -90,11 +98,21 @@ public final class JettyConfig
         return this.useHttp;
     }
 
+    public boolean isUseHttpNio()
+    {
+        return this.useHttpNio;
+    }
+
     public boolean isUseHttps()
     {
         return this.useHttps;
     }
 
+    public boolean isUseHttpsNio()
+    {
+        return this.useHttpsNio;
+    }
+
     public int getHttpPort()
     {
         return this.httpPort;
@@ -157,6 +175,8 @@ public final class JettyConfig
         this.truststore = getProperty(props, FELIX_TRUSTSTORE, null);
         this.trustPassword = getProperty(props, FELIX_TRUSTSTORE_PASSWORD, null);
         this.clientcert = getProperty(props, FELIX_HTTPS_CLIENT_CERT, "none");
+        this.useHttpNio = getBooleanProperty(props, FELIX_HTTP_NIO, true);
+        this.useHttpsNio = getBooleanProperty(props, FELIX_HTTPS_NIO, this.useHttpNio);
     }
 
     private String getProperty(Dictionary props, String name, String defValue)
@@ -172,6 +192,9 @@ public final class JettyConfig
     private boolean getBooleanProperty(Dictionary props, String name, boolean defValue)
     {
         String value = getProperty(props, name, null);
+        if (value == null) {
+            value = this.context.getProperty(name);
+        }
         if (value != null) {
             return (value.equalsIgnoreCase("true") || value.equalsIgnoreCase("yes"));
         }

Modified: felix/trunk/http/jetty/src/main/java/org/apache/felix/http/jetty/internal/JettyService.java
URL: http://svn.apache.org/viewvc/felix/trunk/http/jetty/src/main/java/org/apache/felix/http/jetty/internal/JettyService.java?rev=1056579&r1=1056578&r2=1056579&view=diff
==============================================================================
--- felix/trunk/http/jetty/src/main/java/org/apache/felix/http/jetty/internal/JettyService.java (original)
+++ felix/trunk/http/jetty/src/main/java/org/apache/felix/http/jetty/internal/JettyService.java Sat Jan  8 00:59:44 2011
@@ -23,11 +23,12 @@ import org.osgi.framework.Constants;
 import org.osgi.framework.ServiceRegistration;
 import org.mortbay.jetty.security.HashUserRealm;
 import org.mortbay.jetty.security.SslSelectChannelConnector;
+import org.mortbay.jetty.security.SslSocketConnector;
 import org.mortbay.jetty.Server;
 import org.mortbay.jetty.Connector;
+import org.mortbay.jetty.bio.SocketConnector;
 import org.mortbay.jetty.nio.SelectChannelConnector;
 import org.mortbay.jetty.servlet.*;
-import org.mortbay.log.Log;
 import org.apache.felix.http.base.internal.DispatcherServlet;
 import org.apache.felix.http.base.internal.HttpServiceController;
 import org.apache.felix.http.base.internal.logger.SystemLogger;
@@ -58,7 +59,7 @@ public final class JettyService
         this.dispatcher = dispatcher;
         this.controller = controller;
     }
-    
+
     public void start()
         throws Exception
     {
@@ -150,7 +151,9 @@ public final class JettyService
     private void initializeHttp()
         throws Exception
     {
-        Connector connector = new SelectChannelConnector();
+        Connector connector = this.config.isUseHttpNio()
+                ? new SelectChannelConnector()
+                : new SocketConnector();
         connector.setPort(this.config.getHttpPort());
         connector.setMaxIdleTime(60000);
         this.server.addConnector(connector);
@@ -159,37 +162,97 @@ public final class JettyService
     private void initializeHttps()
         throws Exception
     {
-        SslSelectChannelConnector connector = new SslSelectChannelConnector();
+        // this massive code duplication is caused by the SslSelectChannelConnector
+        // and the SslSocketConnector not have a common API to setup security
+        // stuff
+        Connector connector;
+        if (this.config.isUseHttpsNio())
+        {
+            SslSelectChannelConnector sslConnector = new SslSelectChannelConnector();
+
+            if (this.config.getKeystore() != null)
+            {
+                sslConnector.setKeystore(this.config.getKeystore());
+            }
+
+            if (this.config.getPassword() != null)
+            {
+                System.setProperty(SslSelectChannelConnector.PASSWORD_PROPERTY, this.config.getPassword());
+                sslConnector.setPassword(this.config.getPassword());
+            }
+
+            if (this.config.getKeyPassword() != null)
+            {
+                System.setProperty(SslSelectChannelConnector.KEYPASSWORD_PROPERTY, this.config.getKeyPassword());
+                sslConnector.setKeyPassword(this.config.getKeyPassword());
+            }
+
+            if (this.config.getTruststore() != null)
+            {
+                sslConnector.setTruststore(this.config.getTruststore());
+            }
+
+            if (this.config.getTrustPassword() != null)
+            {
+                sslConnector.setTrustPassword(this.config.getTrustPassword());
+            }
+
+            if ("wants".equals(this.config.getClientcert()))
+            {
+                sslConnector.setWantClientAuth(true);
+            }
+            else if ("needs".equals(this.config.getClientcert()))
+            {
+                sslConnector.setNeedClientAuth(true);
+            }
+
+            connector = sslConnector;
+        }
+        else
+        {
+            SslSocketConnector sslConnector = new SslSocketConnector();
+
+            if (this.config.getKeystore() != null)
+            {
+                sslConnector.setKeystore(this.config.getKeystore());
+            }
+
+            if (this.config.getPassword() != null)
+            {
+                System.setProperty(SslSelectChannelConnector.PASSWORD_PROPERTY, this.config.getPassword());
+                sslConnector.setPassword(this.config.getPassword());
+            }
+
+            if (this.config.getKeyPassword() != null)
+            {
+                System.setProperty(SslSelectChannelConnector.KEYPASSWORD_PROPERTY, this.config.getKeyPassword());
+                sslConnector.setKeyPassword(this.config.getKeyPassword());
+            }
+
+            if (this.config.getTruststore() != null)
+            {
+                sslConnector.setTruststore(this.config.getTruststore());
+            }
+
+            if (this.config.getTrustPassword() != null)
+            {
+                sslConnector.setTrustPassword(this.config.getTrustPassword());
+            }
+
+            if ("wants".equals(this.config.getClientcert()))
+            {
+                sslConnector.setWantClientAuth(true);
+            }
+            else if ("needs".equals(this.config.getClientcert()))
+            {
+                sslConnector.setNeedClientAuth(true);
+            }
+
+            connector = sslConnector;
+        }
+
         connector.setPort(this.config.getHttpsPort());
         connector.setMaxIdleTime(60000);
-        
-        if (this.config.getKeystore() != null) {
-            connector.setKeystore(this.config.getKeystore());
-        }
-        
-        if (this.config.getPassword() != null) {
-            System.setProperty(SslSelectChannelConnector.PASSWORD_PROPERTY, this.config.getPassword());
-            connector.setPassword(this.config.getPassword());
-        }
-        
-        if (this.config.getKeyPassword() != null) {
-            System.setProperty(SslSelectChannelConnector.KEYPASSWORD_PROPERTY, this.config.getKeyPassword());
-            connector.setKeyPassword(this.config.getKeyPassword());
-        }
-        
-        if (this.config.getTruststore() != null) {
-            connector.setTruststore(this.config.getTruststore());
-        }
-        
-        if (this.config.getTrustPassword() != null) {
-            connector.setTrustPassword(this.config.getTrustPassword());
-        }
-        
-        if ("wants".equals(this.config.getClientcert())) {
-            connector.setWantClientAuth(true);
-        } else if ("needs".equals(this.config.getClientcert())) {
-            connector.setNeedClientAuth(true);
-        }
 
         this.server.addConnector(connector);
     }