Author: dkulp
Date: Fri Mar 16 19:12:02 2012
New Revision: 1301708

URL: http://svn.apache.org/viewvc?rev=1301708&view=rev
Log:
Initial work to get jetty stuff configured from config:admin

Added:
    
cxf/trunk/rt/transports/http-jetty/src/main/java/org/apache/cxf/transport/http_jetty/osgi/
    
cxf/trunk/rt/transports/http-jetty/src/main/java/org/apache/cxf/transport/http_jetty/osgi/HTTPJettyTransportActivator.java
   (with props)
Modified:
    cxf/trunk/rt/transports/http-jetty/pom.xml
    
cxf/trunk/rt/transports/http-jetty/src/main/java/org/apache/cxf/transport/http_jetty/JettyHTTPServerEngine.java
    
cxf/trunk/rt/transports/http-jetty/src/main/java/org/apache/cxf/transport/http_jetty/JettyHTTPServerEngineFactory.java

Modified: cxf/trunk/rt/transports/http-jetty/pom.xml
URL: 
http://svn.apache.org/viewvc/cxf/trunk/rt/transports/http-jetty/pom.xml?rev=1301708&r1=1301707&r2=1301708&view=diff
==============================================================================
--- cxf/trunk/rt/transports/http-jetty/pom.xml (original)
+++ cxf/trunk/rt/transports/http-jetty/pom.xml Fri Mar 16 19:12:02 2012
@@ -33,6 +33,7 @@
         <relativePath>../../../parent/pom.xml</relativePath>
     </parent>
     <properties>
+        
<cxf.bundle.activator>org.apache.cxf.transport.http_jetty.osgi.HTTPJettyTransportActivator</cxf.bundle.activator>
         <cxf.osgi.import>
             javax.servlet*;version="${cxf.osgi.javax.servlet.version}",
             org.eclipse.jetty*;version="${cxf.jetty.osgi.version}",
@@ -43,6 +44,16 @@
     </properties>
     <dependencies>
         <dependency>
+            <groupId>org.osgi</groupId>
+            <artifactId>org.osgi.core</artifactId>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.osgi</groupId>
+            <artifactId>org.osgi.compendium</artifactId>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
             <groupId>org.apache.cxf</groupId>
             <artifactId>cxf-api</artifactId>
             <version>${project.version}</version>

Modified: 
cxf/trunk/rt/transports/http-jetty/src/main/java/org/apache/cxf/transport/http_jetty/JettyHTTPServerEngine.java
URL: 
http://svn.apache.org/viewvc/cxf/trunk/rt/transports/http-jetty/src/main/java/org/apache/cxf/transport/http_jetty/JettyHTTPServerEngine.java?rev=1301708&r1=1301707&r2=1301708&view=diff
==============================================================================
--- 
cxf/trunk/rt/transports/http-jetty/src/main/java/org/apache/cxf/transport/http_jetty/JettyHTTPServerEngine.java
 (original)
+++ 
cxf/trunk/rt/transports/http-jetty/src/main/java/org/apache/cxf/transport/http_jetty/JettyHTTPServerEngine.java
 Fri Mar 16 19:12:02 2012
@@ -693,7 +693,7 @@ public class JettyHTTPServerEngine
      * This method may only be called by the factory.
      * @throws IOException 
      */
-    public void setTlsServerParameters(TLSServerParameters params) throws 
IOException {
+    public void setTlsServerParameters(TLSServerParameters params) {
         
         tlsServerParameters = params;
         if (this.configFinalized) {

Modified: 
cxf/trunk/rt/transports/http-jetty/src/main/java/org/apache/cxf/transport/http_jetty/JettyHTTPServerEngineFactory.java
URL: 
http://svn.apache.org/viewvc/cxf/trunk/rt/transports/http-jetty/src/main/java/org/apache/cxf/transport/http_jetty/JettyHTTPServerEngineFactory.java?rev=1301708&r1=1301707&r2=1301708&view=diff
==============================================================================
--- 
cxf/trunk/rt/transports/http-jetty/src/main/java/org/apache/cxf/transport/http_jetty/JettyHTTPServerEngineFactory.java
 (original)
+++ 
cxf/trunk/rt/transports/http-jetty/src/main/java/org/apache/cxf/transport/http_jetty/JettyHTTPServerEngineFactory.java
 Fri Mar 16 19:12:02 2012
@@ -308,28 +308,33 @@ public class JettyHTTPServerEngineFactor
         }
     }
     
+    public MBeanServer getMBeanServer() {
+        if (bus != null && bus.getExtension(InstrumentationManager.class) != 
null) {
+            return 
bus.getExtension(InstrumentationManager.class).getMBeanServer();
+        }
+        return null;
+    }
+    
     public synchronized Container.Listener getMBeanContainer() {
         if (this.mBeanContainer != null) {
             return mBeanContainer;
         }
         
-        if (bus != null && bus.getExtension(InstrumentationManager.class) != 
null) {
-            MBeanServer mbs =  
bus.getExtension(InstrumentationManager.class).getMBeanServer();
-            if (mbs != null) {
-                try {
-                    Class<?> cls = 
ClassLoaderUtils.loadClass("org.eclipse.jetty.jmx.MBeanContainer", 
-                                                          getClass());
-                    
-                    mBeanContainer = (Container.Listener) cls.
-                        getConstructor(MBeanServer.class).newInstance(mbs);
-                    
-                    cls.getMethod("start", (Class<?>[]) 
null).invoke(mBeanContainer, (Object[]) null);
-                } catch (Throwable ex) {
-                    //ignore - just won't instrument jetty.  Probably don't 
have the
-                    //jetty-management jar available
-                    LOG.info("Could not load or start 
org.eclipse.management.MBeanContainer.  "
-                             + "Jetty JMX support will not be enabled: " + 
ex.getMessage());
-                }
+        MBeanServer mbs =  getMBeanServer();
+        if (mbs != null) {
+            try {
+                Class<?> cls = 
ClassLoaderUtils.loadClass("org.eclipse.jetty.jmx.MBeanContainer", 
+                                                      getClass());
+                
+                mBeanContainer = (Container.Listener) cls.
+                    getConstructor(MBeanServer.class).newInstance(mbs);
+                
+                cls.getMethod("start", (Class<?>[]) 
null).invoke(mBeanContainer, (Object[]) null);
+            } catch (Throwable ex) {
+                //ignore - just won't instrument jetty.  Probably don't have 
the
+                //jetty-management jar available
+                LOG.info("Could not load or start 
org.eclipse.management.MBeanContainer.  "
+                         + "Jetty JMX support will not be enabled: " + 
ex.getMessage());
             }
         }
         

Added: 
cxf/trunk/rt/transports/http-jetty/src/main/java/org/apache/cxf/transport/http_jetty/osgi/HTTPJettyTransportActivator.java
URL: 
http://svn.apache.org/viewvc/cxf/trunk/rt/transports/http-jetty/src/main/java/org/apache/cxf/transport/http_jetty/osgi/HTTPJettyTransportActivator.java?rev=1301708&view=auto
==============================================================================
--- 
cxf/trunk/rt/transports/http-jetty/src/main/java/org/apache/cxf/transport/http_jetty/osgi/HTTPJettyTransportActivator.java
 (added)
+++ 
cxf/trunk/rt/transports/http-jetty/src/main/java/org/apache/cxf/transport/http_jetty/osgi/HTTPJettyTransportActivator.java
 Fri Mar 16 19:12:02 2012
@@ -0,0 +1,362 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF 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 License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.cxf.transport.http_jetty.osgi;
+
+import java.io.IOException;
+import java.security.GeneralSecurityException;
+import java.util.Dictionary;
+import java.util.Enumeration;
+import java.util.List;
+import java.util.Properties;
+import java.util.StringTokenizer;
+
+import javax.management.MBeanServer;
+
+import org.apache.cxf.configuration.jsse.TLSServerParameters;
+import org.apache.cxf.configuration.jsse.spring.TLSParameterJaxBUtils;
+import org.apache.cxf.configuration.security.CertStoreType;
+import org.apache.cxf.configuration.security.CertificateConstraintsType;
+import org.apache.cxf.configuration.security.ClientAuthentication;
+import org.apache.cxf.configuration.security.CombinatorType;
+import org.apache.cxf.configuration.security.DNConstraintsType;
+import org.apache.cxf.configuration.security.FiltersType;
+import org.apache.cxf.configuration.security.KeyManagersType;
+import org.apache.cxf.configuration.security.KeyStoreType;
+import org.apache.cxf.configuration.security.SecureRandomParameters;
+import org.apache.cxf.configuration.security.TrustManagersType;
+import org.apache.cxf.transport.http_jetty.JettyHTTPServerEngine;
+import org.apache.cxf.transport.http_jetty.JettyHTTPServerEngineFactory;
+import org.apache.cxf.transport.http_jetty.ThreadingParameters;
+import org.osgi.framework.BundleActivator;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.Constants;
+import org.osgi.framework.ServiceReference;
+import org.osgi.framework.ServiceRegistration;
+import org.osgi.service.cm.ConfigurationAdmin;
+import org.osgi.service.cm.ConfigurationException;
+import org.osgi.service.cm.ManagedServiceFactory;
+import org.osgi.util.tracker.ServiceTracker;
+
+
+public class HTTPJettyTransportActivator 
+    implements BundleActivator, ManagedServiceFactory {
+    public static final String FACTORY_PID = "org.apache.cxf.http.jetty";
+    
+    BundleContext context; 
+    MBeanServer mbeans;
+    ServiceTracker configAdminTracker;
+    ServiceRegistration reg;
+    
+    JettyHTTPServerEngineFactory factory = new JettyHTTPServerEngineFactory() {
+        public MBeanServer getMBeanServer() {
+            return mbeans;
+        }
+    };
+    
+    public void start(BundleContext ctx) throws Exception {
+        this.context = ctx;
+        Properties servProps = new Properties();
+        servProps.put(Constants.SERVICE_PID, FACTORY_PID);  
+        reg = context.registerService(ManagedServiceFactory.class.getName(),
+                                       this, servProps);
+        
+        
+        configAdminTracker = new ServiceTracker(context, 
ConfigurationAdmin.class.getName(), null);
+        configAdminTracker.open();
+        
+        ServiceReference ref = 
context.getServiceReference(MBeanServer.class.getName());
+        if (ref != null) {
+            mbeans = (MBeanServer)context.getService(ref);
+        }
+    }
+
+    public void stop(BundleContext ctx) throws Exception {
+        reg.unregister();
+        configAdminTracker.close();
+    }
+
+    public String getName() {
+        return FACTORY_PID;
+    }
+
+    @SuppressWarnings("unchecked")
+    public void updated(String pid, @SuppressWarnings("rawtypes") Dictionary 
properties)
+        throws ConfigurationException {
+        if (pid == null) {
+            return;
+        }
+        int port = Integer.parseInt((String)properties.get("port"));
+        
+        String host = (String)properties.get("host");
+        try {
+            TLSServerParameters tls = createTlsServerParameters(properties);
+            if (tls != null) {
+                factory.setTLSServerParametersForPort(host, port, tls);
+            } else {
+                factory.createJettyHTTPServerEngine(host, port, "http");
+            }
+            
+            JettyHTTPServerEngine e = 
factory.retrieveJettyHTTPServerEngine(port);
+            configure(e, properties);
+        } catch (GeneralSecurityException e) {
+            throw new ConfigurationException(null, null, e);
+        } catch (IOException e) {
+            throw new ConfigurationException(null, null, e);
+        }
+    }
+
+
+    private void configure(JettyHTTPServerEngine e, Dictionary<String, String> 
properties) {
+        ThreadingParameters threading = createThreadingParameters(properties);
+        if (threading != null) {
+            e.setThreadingParameters(threading);
+        }
+        Enumeration<String> keys = properties.keys();
+        while (keys.hasMoreElements()) {
+            String k = keys.nextElement();
+            if ("sessionSupport".equals(k)) {
+                e.setSessionSupport(Boolean.parseBoolean(properties.get(k)));
+            } else if ("continuationsEnabled".equals(k)) {
+                
e.setContinuationsEnabled(Boolean.parseBoolean(properties.get(k)));
+            } else if ("reuseAddress".equals(k)) {
+                e.setReuseAddress(Boolean.parseBoolean(properties.get(k)));
+            } else if ("maxIdleTime".equals(k)) {
+                e.setMaxIdleTime(Integer.parseInt(properties.get(k)));
+            } 
+        }
+    }
+
+    public void deleted(String pid) {
+    }
+
+    private ThreadingParameters createThreadingParameters(Dictionary<String, 
String> d) {
+        Enumeration<String> keys = d.keys();
+        ThreadingParameters p = null;
+        while (keys.hasMoreElements()) {
+            String k = keys.nextElement();
+            if (k.startsWith("threadingParameters.")) {
+                if (p == null) {
+                    p = new ThreadingParameters();
+                }
+                String v = d.get(k);
+                k = k.substring("threadingParameters.".length());
+                if ("minThreads".equals(k)) {
+                    p.setMinThreads(Integer.parseInt(v));
+                } else if ("maxThreads".equals(k)) {
+                    p.setMaxThreads(Integer.parseInt(v));
+                }
+            }
+        }
+        return p;
+    }
+
+    private TLSServerParameters createTlsServerParameters(Dictionary<String, 
String> d) {
+        Enumeration<String> keys = d.keys();
+        TLSServerParameters p = null;
+        SecureRandomParameters srp = null;
+        KeyManagersType kmt = null;
+        TrustManagersType tmt = null;
+        while (keys.hasMoreElements()) {
+            String k = keys.nextElement();
+            if (k.startsWith("tlsServerParameters.")) {
+                if (p == null) {
+                    p = new TLSServerParameters();
+                }
+                String v = d.get(k);
+                k = k.substring("tlsServerParameters.".length());
+
+                if ("secureSocketProtocol".equals(k)) {
+                    p.setSecureSocketProtocol(v);
+                } else if ("jsseProvider".equals(k)) {
+                    p.setJsseProvider(v);
+                } else if ("clientAuthentication.want".equals(k)) {
+                    if (p.getClientAuthentication() == null) {
+                        p.setClientAuthentication(new ClientAuthentication());
+                    }
+                    
p.getClientAuthentication().setWant(Boolean.parseBoolean(v));
+                } else if ("clientAuthentication.required".equals(k)) {
+                    if (p.getClientAuthentication() == null) {
+                        p.setClientAuthentication(new ClientAuthentication());
+                    }
+                    
p.getClientAuthentication().setRequired(Boolean.parseBoolean(v));
+                } else if (k.startsWith("certConstraints.")) {
+                    k = k.substring("certConstraints.".length());
+                    CertificateConstraintsType cct = p.getCertConstraints();
+                    if (cct == null) {
+                        cct = new CertificateConstraintsType();
+                        p.setCertConstraints(cct);
+                    }
+                    DNConstraintsType dnct = null;
+                    if (k.startsWith("SubjectDNConstraints.")) {
+                        dnct = cct.getSubjectDNConstraints();
+                        if (dnct == null) {
+                            dnct = new DNConstraintsType();
+                            cct.setSubjectDNConstraints(dnct);
+                        }
+                        k = k.substring("SubjectDNConstraints.".length());
+                    } else if (k.startsWith("IssuerDNConstraints.")) {
+                        dnct = cct.getIssuerDNConstraints();
+                        if (dnct == null) {
+                            dnct = new DNConstraintsType();
+                            cct.setIssuerDNConstraints(dnct);
+                        }
+                        k = k.substring("IssuerDNConstraints.".length());
+                    }
+                    if (dnct != null) {
+                        if ("combinator".equals(k)) {
+                            dnct.setCombinator(CombinatorType.fromValue(v));
+                        } else if ("RegularExpression".equals(k)) {
+                            dnct.getRegularExpression().add(k);
+                        }
+                    }
+                } else if (k.startsWith("secureRandomParameters.")) {
+                    k = k.substring("secureRandomParameters.".length());
+                    if (srp == null) {
+                        srp = new SecureRandomParameters();
+                    }
+                    if ("algorithm".equals(k)) {
+                        srp.setAlgorithm(v);
+                    } else if ("provider".equals(k)) {
+                        srp.setProvider(v);
+                    }
+                } else if (k.startsWith("cipherSuitesFilter.")) {
+                    k = k.substring("cipherSuitesFilter.".length());
+                    StringTokenizer st = new StringTokenizer(v, ",");
+                    FiltersType ft = p.getCipherSuitesFilter();
+                    if (ft == null) {
+                        ft = new FiltersType();
+                        p.setCipherSuitesFilter(ft);
+                    }
+                    List<String> lst = "include".equals(k) ? ft.getInclude() : 
ft.getExclude();
+                    while (st.hasMoreTokens()) {
+                        lst.add(st.nextToken());
+                    }
+                } else if (k.startsWith("cipherSuites")) {
+                    StringTokenizer st = new StringTokenizer(v, ",");
+                    while (st.hasMoreTokens()) {
+                        p.getCipherSuites().add(st.nextToken());
+                    }
+                } else if (k.startsWith("trustManagers.")) {
+                    tmt = getTrustManagers(tmt,
+                                          
k.substring("trustManagers.".length()),
+                                          v);
+                } else if (k.startsWith("keyManagers.")) {
+                    kmt = getKeyManagers(kmt,
+                                         k.substring("keyManagers.".length()),
+                                         v);
+                }
+            }
+        }
+        
+        try {
+            if (srp != null) {
+                p.setSecureRandom(TLSParameterJaxBUtils.getSecureRandom(srp));
+            }
+            if (kmt != null) {
+                p.setKeyManagers(TLSParameterJaxBUtils.getKeyManagers(kmt));
+            }
+            if (tmt != null) {
+                
p.setTrustManagers(TLSParameterJaxBUtils.getTrustManagers(tmt));
+            }
+        } catch (RuntimeException e) {
+            throw e;
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+        return p;
+    }
+
+    private KeyManagersType getKeyManagers(KeyManagersType keyManagers, String 
k, String v) {
+        if (keyManagers == null) {
+            keyManagers = new KeyManagersType();
+        }
+        if ("factoryAlgorithm".equals(k)) {
+            keyManagers.setFactoryAlgorithm(v);
+        } else if ("provider".equals(k)) {
+            keyManagers.setProvider(v);
+        } else if ("keyPassword".equals(k)) {
+            keyManagers.setKeyPassword(v);
+        } else if (k.startsWith("keyStore.")) {
+            keyManagers.setKeyStore(getKeyStore(keyManagers.getKeyStore(),
+                                                
k.substring("keyStore.".length()),
+                                                v));
+        }
+        return keyManagers;
+    }
+
+    private KeyStoreType getKeyStore(KeyStoreType ks, String k, String v) {
+        if (ks == null) {
+            ks = new KeyStoreType();
+        }
+        if ("type".equals(k)) {
+            ks.setType(v);
+        } else if ("password".equals(k)) {
+            ks.setPassword(v);
+        } else if ("provider".equals(k)) {
+            ks.setProvider(v);
+        } else if ("url".equals(k)) {
+            ks.setUrl(v);
+        } else if ("file".equals(k)) {
+            ks.setFile(v);
+        } else if ("resource".equals(k)) {
+            ks.setResource(v);
+        }
+        return ks;
+    }
+
+    private TrustManagersType getTrustManagers(TrustManagersType tmt, String 
k, String v) {
+        if (tmt == null) {
+            tmt = new TrustManagersType();
+        }
+        if ("provider".equals(k)) {
+            tmt.setProvider(v);
+        } else if ("factoryAlgorithm".equals(k)) {
+            tmt.setFactoryAlgorithm(v);
+        } else if (k.startsWith("keyStore.")) {
+            tmt.setKeyStore(getKeyStore(tmt.getKeyStore(),
+                                        k.substring("keyStore.".length()),
+                                        v));
+        } else if (k.startsWith("certStore")) {
+            tmt.setCertStore(getCertStore(tmt.getCertStore(),
+                                          k.substring("certStore.".length()),
+                                          v));
+        }
+        return tmt;
+    }
+
+    private CertStoreType getCertStore(CertStoreType cs, String k, String v) {
+        if (cs == null) {
+            cs = new CertStoreType();
+        }
+        if ("file".equals(k)) {
+            cs.setFile(v);
+        } else if ("url".equals(k)) {
+            cs.setUrl(v);
+        } else if ("resource".equals(k)) {
+            cs.setResource(v);
+        }
+        return cs;
+    }
+
+
+    
+    
+    
+}

Propchange: 
cxf/trunk/rt/transports/http-jetty/src/main/java/org/apache/cxf/transport/http_jetty/osgi/HTTPJettyTransportActivator.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
cxf/trunk/rt/transports/http-jetty/src/main/java/org/apache/cxf/transport/http_jetty/osgi/HTTPJettyTransportActivator.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date


Reply via email to