You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ofbiz.apache.org by ec...@apache.org on 2012/03/22 18:08:32 UTC

svn commit: r1303894 - in /ofbiz/trunk/framework: base/config/ jetty/lib/ jetty/src/org/ofbiz/jetty/container/

Author: eckardjf
Date: Thu Mar 22 17:08:31 2012
New Revision: 1303894

URL: http://svn.apache.org/viewvc?rev=1303894&view=rev
Log:
update jetty container to use the latest jetty-8 release, 8.1.2

Added:
    ofbiz/trunk/framework/jetty/lib/com.sun.el-2.2.0.v201108011116.jar
    ofbiz/trunk/framework/jetty/lib/javax.el-2.2.0.v201108011116.jar
    ofbiz/trunk/framework/jetty/lib/javax.servlet.jsp-2.2.0.v201112011158.jar
    ofbiz/trunk/framework/jetty/lib/javax.servlet.jsp.jstl-1.2.0.v201105211821.jar
    ofbiz/trunk/framework/jetty/lib/jetty-ajp-8.1.2.v20120308.jar
    ofbiz/trunk/framework/jetty/lib/jetty-continuation-8.1.2.v20120308.jar
    ofbiz/trunk/framework/jetty/lib/jetty-http-8.1.2.v20120308.jar
    ofbiz/trunk/framework/jetty/lib/jetty-io-8.1.2.v20120308.jar
    ofbiz/trunk/framework/jetty/lib/jetty-security-8.1.2.v20120308.jar
    ofbiz/trunk/framework/jetty/lib/jetty-server-8.1.2.v20120308.jar
    ofbiz/trunk/framework/jetty/lib/jetty-servlet-8.1.2.v20120308.jar
    ofbiz/trunk/framework/jetty/lib/jetty-util-8.1.2.v20120308.jar
    ofbiz/trunk/framework/jetty/lib/jetty-webapp-8.1.2.v20120308.jar
    ofbiz/trunk/framework/jetty/lib/jetty-xml-8.1.2.v20120308.jar
    ofbiz/trunk/framework/jetty/lib/org.apache.jasper.glassfish-2.2.2.v201112011158.jar
    ofbiz/trunk/framework/jetty/lib/org.apache.taglibs.standard.glassfish-1.2.0.v201112081803.jar
    ofbiz/trunk/framework/jetty/lib/org.eclipse.jdt.core-3.7.1.jar
Removed:
    ofbiz/trunk/framework/jetty/lib/ant-1.8.2.jar
    ofbiz/trunk/framework/jetty/lib/jasper-compiler-5.5.15.jar
    ofbiz/trunk/framework/jetty/lib/jasper-compiler-jdt-5.5.15.jar
    ofbiz/trunk/framework/jetty/lib/jasper-runtime-5.5.15.jar
    ofbiz/trunk/framework/jetty/lib/jcl104-over-slf4j-1.3.1.jar
    ofbiz/trunk/framework/jetty/lib/jetty-6.1.11.jar
    ofbiz/trunk/framework/jetty/lib/jetty-ajp-6.1.11.jar
    ofbiz/trunk/framework/jetty/lib/jetty-sslengine-6.1.11.jar
    ofbiz/trunk/framework/jetty/lib/jetty-util-6.1.11.jar
    ofbiz/trunk/framework/jetty/lib/xmlParserAPIs-2.6.2.jar
Modified:
    ofbiz/trunk/framework/base/config/jetty-containers.xml
    ofbiz/trunk/framework/jetty/src/org/ofbiz/jetty/container/JettyContainer.java

Modified: ofbiz/trunk/framework/base/config/jetty-containers.xml
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/base/config/jetty-containers.xml?rev=1303894&r1=1303893&r2=1303894&view=diff
==============================================================================
--- ofbiz/trunk/framework/base/config/jetty-containers.xml (original)
+++ ofbiz/trunk/framework/base/config/jetty-containers.xml Thu Mar 22 17:08:31 2012
@@ -19,21 +19,17 @@ under the License.
 -->
 
 <ofbiz-containers xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-        xsi:noNamespaceSchemaLocation="http://ofbiz.apache.org/dtds/ofbiz-containers.xsd">
+                  xsi:noNamespaceSchemaLocation="http://ofbiz.apache.org/dtds/ofbiz-containers.xsd">
+
     <!-- load the ofbiz component container (always first) -->
     <container name="component-container" class="org.ofbiz.base.container.ComponentContainer"/>
 
     <!-- load the cached classloader container (always second) -->
     <container name="classloader-container" class="org.ofbiz.base.container.ClassLoaderContainer"/>
 
-    <!-- load JNDI/JOTM; this is no longer needed, leaving this in for now just in case someone wants to drop in JOTM from the specialized directory
-    <container name="jotm-container" class="org.ofbiz.jotm.container.JotmContainer">
-        <property name="jndi-config" value="iiop.properties"/>
-    </container>
-    -->
-
     <!-- load the naming (JNDI) server -->
     <container name="naming-container" class="org.ofbiz.base.container.NamingServiceContainer">
+        <property name="host" value="0.0.0.0"/>
         <property name="port" value="1099"/>
     </container>
 
@@ -52,105 +48,54 @@ under the License.
         <property name="ssl-client-auth" value="false"/>
     </container>
 
-    <!-- JavaMail Listener Container - Triggers MCA Rules -->
-    <!-- if delete-mail is set to true, will delete messages after fetching them. otherwise, will try to mark them as seen
-         mail.store.protocol supports both imap and pop3, but pop3 will not be able to mark messages as seen, so you would need to delete them
-         Sounds like mail.store.protocol value should be "imaps" for GMail inbound emails to work.
-         Not tested found here https://sourceforge.net/forum/message.php?msg_id=5879468 -->
-    <!-- To use the mail listerner just uncomment and go...
-    <container name="javamail-container" class="org.ofbiz.service.mail.JavaMailContainer">
-        <property name="delegator-name" value="default"/>
-        <property name="dispatcher-name" value="JavaMailDispatcher"/>
-        <property name="run-as-user" value="system"/>
-        <property name="poll-delay" value="300000"/>
-        <property name="delete-mail" value="false"/>
-        <property name="maxSize" value="100000"/>
-        <property name="default-listener" value="store-listener">
-        <property name="mail.store.protocol" value="imap"/>
-        <property name="mail.host" value="[host]"/>
-        <property name="mail.user" value="[user]"/>
-        <property name="mail.pass" value="[pass]"/>
-        <property name="mail.debug" value="false"/>
-        </property>
-    </container>
-    -->
-
-    <!-- load Shark Workflow Engine -->
-    <!-- NOTE: before uncommenting this please see the instructions in the ofbiz/OPTIONAL_LIBRARIES file.
-    <container name="shark-container" class="org.ofbiz.shark.container.SharkContainer">
-        <property name="engine-name" value="Shark"/>
-        <property name="delegator-name" value="default"/>
-        <property name="dispatcher-name" value="WFDispatcher"/>
-        <property name="admin-user" value="system"/>
-        <property name="admin-pass" value="ofbiz"/>
-        <property name="iiop-host" value="127.0.0.1"/>
-        <property name="iiop-port" value="2000"/>
-    </container>
-    -->
-
     <!-- load jetty and all web applications -->
     <container name="jetty-container" class="org.ofbiz.jetty.container.JettyContainer">
-        <property name="default-server">
+        <property name="default-server" value="server">
             <property name="send-server-version" value="false"/>
-            <property name="http-listener" value="connector">
+            <!-- thread pool config -->
+            <property name="min-threads" value="5"/>
+            <property name="max-threads" value="100"/>
+            <property name="max-idle-time-ms" value="30000"/>
+            <property name="max-stop-time-ms" value="5000"/>
+            <!-- connectors -->
+            <!--
+            <property name="http-connector" value="connector">
                 <property name="type" value="http"/>
                 <property name="host" value="0.0.0.0"/>
                 <property name="port" value="8080"/>
-                <property name="min-threads" value="5"/>
-                <property name="max-threads" value="100"/>
-                <property name="max-idle-time" value="30000"/>
-                <property name="low-threads" value="0"/>
-                <property name="low-resource-max-idle-time" value="5000"/>
             </property>
-            <property name="https-listener" value="connector">
+            <property name="https-connector" value="connector">
                 <property name="type" value="https"/>
                 <property name="host" value="0.0.0.0"/>
                 <property name="port" value="8443"/>
-                <property name="min-threads" value="5"/>
-                <property name="max-threads" value="100"/>
-                <property name="max-idle-time" value="30000"/>
-                <property name="low-threads" value="0"/>
-                <property name="low-resource-max-idle-time" value="5000"/>
                 <property name="keystore" value="framework/base/config/ofbizssl.jks"/>
                 <property name="password" value="changeit"/>
                 <property name="key-password" value="changeit"/>
                 <property name="client-auth" value="false"/>
             </property>
-            <!--
-            <property name="nio-http-listener" value="connector">
+            -->
+            <property name="nio-http-connector" value="connector">
                 <property name="type" value="http"/>
                 <property name="host" value="0.0.0.0"/>
                 <property name="port" value="8080"/>
-                <property name="min-threads" value="5"/>
-                <property name="max-threads" value="100"/>
-                <property name="max-idle-time" value="30000"/>
-                <property name="low-threads" value="0"/>
-                <property name="low-resource-max-idle-time" value="5000"/>
             </property>
-            <property name="nio-https-listener" value="connector">
+            <property name="nio-https-connector" value="connector">
                 <property name="type" value="https"/>
                 <property name="host" value="0.0.0.0"/>
                 <property name="port" value="8443"/>
-                <property name="min-threads" value="5"/>
-                <property name="max-threads" value="100"/>
-                <property name="max-idle-time" value="30000"/>
-                <property name="low-threads" value="0"/>
-                <property name="low-resource-max-idle-time" value="5000"/>
                 <property name="keystore" value="framework/base/config/ofbizssl.jks"/>
                 <property name="password" value="changeit"/>
                 <property name="key-password" value="changeit"/>
                 <property name="client-auth" value="false"/>
             </property>
-            <property name="ajp13-listener" value="connector">
+            <!--
+            <property name="ajp13-connector" value="connector">
                 <property name="type" value="ajp13"/>
                 <property name="host" value="0.0.0.0"/>
                 <property name="port" value="8009"/>
-                <property name="min-threads" value="5"/>
-                <property name="max-threads" value="100"/>
-                <property name="max-idle-time" value="30000"/>
-                <property name="buffer-size" value="8192"/>
             </property>
             -->
+            <!-- request logs -->
             <property name="request-log" value="request-log">
                 <property name="filename" value="runtime/logs/yyyy_mm_dd.request.log"/>
                 <property name="append" value="true"/>
@@ -161,10 +106,4 @@ under the License.
         </property>
     </container>
 
-    <!-- load BeanShell remote telnet server -->
-    <container name="beanshell-container" class="org.ofbiz.base.container.BeanShellContainer">
-        <!-- the port below and port-1 will be opened by beanshell -->
-        <property name="telnet-port" value="9990"/>
-        <property name="app-name" value="OFBiz"/>
-    </container>
 </ofbiz-containers>

Added: ofbiz/trunk/framework/jetty/lib/com.sun.el-2.2.0.v201108011116.jar
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/jetty/lib/com.sun.el-2.2.0.v201108011116.jar?rev=1303894&view=auto
==============================================================================
Files ofbiz/trunk/framework/jetty/lib/com.sun.el-2.2.0.v201108011116.jar (added) and ofbiz/trunk/framework/jetty/lib/com.sun.el-2.2.0.v201108011116.jar Thu Mar 22 17:08:31 2012 differ

Added: ofbiz/trunk/framework/jetty/lib/javax.el-2.2.0.v201108011116.jar
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/jetty/lib/javax.el-2.2.0.v201108011116.jar?rev=1303894&view=auto
==============================================================================
Files ofbiz/trunk/framework/jetty/lib/javax.el-2.2.0.v201108011116.jar (added) and ofbiz/trunk/framework/jetty/lib/javax.el-2.2.0.v201108011116.jar Thu Mar 22 17:08:31 2012 differ

Added: ofbiz/trunk/framework/jetty/lib/javax.servlet.jsp-2.2.0.v201112011158.jar
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/jetty/lib/javax.servlet.jsp-2.2.0.v201112011158.jar?rev=1303894&view=auto
==============================================================================
Files ofbiz/trunk/framework/jetty/lib/javax.servlet.jsp-2.2.0.v201112011158.jar (added) and ofbiz/trunk/framework/jetty/lib/javax.servlet.jsp-2.2.0.v201112011158.jar Thu Mar 22 17:08:31 2012 differ

Added: ofbiz/trunk/framework/jetty/lib/javax.servlet.jsp.jstl-1.2.0.v201105211821.jar
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/jetty/lib/javax.servlet.jsp.jstl-1.2.0.v201105211821.jar?rev=1303894&view=auto
==============================================================================
Files ofbiz/trunk/framework/jetty/lib/javax.servlet.jsp.jstl-1.2.0.v201105211821.jar (added) and ofbiz/trunk/framework/jetty/lib/javax.servlet.jsp.jstl-1.2.0.v201105211821.jar Thu Mar 22 17:08:31 2012 differ

Added: ofbiz/trunk/framework/jetty/lib/jetty-ajp-8.1.2.v20120308.jar
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/jetty/lib/jetty-ajp-8.1.2.v20120308.jar?rev=1303894&view=auto
==============================================================================
Files ofbiz/trunk/framework/jetty/lib/jetty-ajp-8.1.2.v20120308.jar (added) and ofbiz/trunk/framework/jetty/lib/jetty-ajp-8.1.2.v20120308.jar Thu Mar 22 17:08:31 2012 differ

Added: ofbiz/trunk/framework/jetty/lib/jetty-continuation-8.1.2.v20120308.jar
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/jetty/lib/jetty-continuation-8.1.2.v20120308.jar?rev=1303894&view=auto
==============================================================================
Files ofbiz/trunk/framework/jetty/lib/jetty-continuation-8.1.2.v20120308.jar (added) and ofbiz/trunk/framework/jetty/lib/jetty-continuation-8.1.2.v20120308.jar Thu Mar 22 17:08:31 2012 differ

Added: ofbiz/trunk/framework/jetty/lib/jetty-http-8.1.2.v20120308.jar
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/jetty/lib/jetty-http-8.1.2.v20120308.jar?rev=1303894&view=auto
==============================================================================
Files ofbiz/trunk/framework/jetty/lib/jetty-http-8.1.2.v20120308.jar (added) and ofbiz/trunk/framework/jetty/lib/jetty-http-8.1.2.v20120308.jar Thu Mar 22 17:08:31 2012 differ

Added: ofbiz/trunk/framework/jetty/lib/jetty-io-8.1.2.v20120308.jar
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/jetty/lib/jetty-io-8.1.2.v20120308.jar?rev=1303894&view=auto
==============================================================================
Files ofbiz/trunk/framework/jetty/lib/jetty-io-8.1.2.v20120308.jar (added) and ofbiz/trunk/framework/jetty/lib/jetty-io-8.1.2.v20120308.jar Thu Mar 22 17:08:31 2012 differ

Added: ofbiz/trunk/framework/jetty/lib/jetty-security-8.1.2.v20120308.jar
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/jetty/lib/jetty-security-8.1.2.v20120308.jar?rev=1303894&view=auto
==============================================================================
Files ofbiz/trunk/framework/jetty/lib/jetty-security-8.1.2.v20120308.jar (added) and ofbiz/trunk/framework/jetty/lib/jetty-security-8.1.2.v20120308.jar Thu Mar 22 17:08:31 2012 differ

Added: ofbiz/trunk/framework/jetty/lib/jetty-server-8.1.2.v20120308.jar
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/jetty/lib/jetty-server-8.1.2.v20120308.jar?rev=1303894&view=auto
==============================================================================
Files ofbiz/trunk/framework/jetty/lib/jetty-server-8.1.2.v20120308.jar (added) and ofbiz/trunk/framework/jetty/lib/jetty-server-8.1.2.v20120308.jar Thu Mar 22 17:08:31 2012 differ

Added: ofbiz/trunk/framework/jetty/lib/jetty-servlet-8.1.2.v20120308.jar
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/jetty/lib/jetty-servlet-8.1.2.v20120308.jar?rev=1303894&view=auto
==============================================================================
Files ofbiz/trunk/framework/jetty/lib/jetty-servlet-8.1.2.v20120308.jar (added) and ofbiz/trunk/framework/jetty/lib/jetty-servlet-8.1.2.v20120308.jar Thu Mar 22 17:08:31 2012 differ

Added: ofbiz/trunk/framework/jetty/lib/jetty-util-8.1.2.v20120308.jar
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/jetty/lib/jetty-util-8.1.2.v20120308.jar?rev=1303894&view=auto
==============================================================================
Files ofbiz/trunk/framework/jetty/lib/jetty-util-8.1.2.v20120308.jar (added) and ofbiz/trunk/framework/jetty/lib/jetty-util-8.1.2.v20120308.jar Thu Mar 22 17:08:31 2012 differ

Added: ofbiz/trunk/framework/jetty/lib/jetty-webapp-8.1.2.v20120308.jar
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/jetty/lib/jetty-webapp-8.1.2.v20120308.jar?rev=1303894&view=auto
==============================================================================
Files ofbiz/trunk/framework/jetty/lib/jetty-webapp-8.1.2.v20120308.jar (added) and ofbiz/trunk/framework/jetty/lib/jetty-webapp-8.1.2.v20120308.jar Thu Mar 22 17:08:31 2012 differ

Added: ofbiz/trunk/framework/jetty/lib/jetty-xml-8.1.2.v20120308.jar
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/jetty/lib/jetty-xml-8.1.2.v20120308.jar?rev=1303894&view=auto
==============================================================================
Files ofbiz/trunk/framework/jetty/lib/jetty-xml-8.1.2.v20120308.jar (added) and ofbiz/trunk/framework/jetty/lib/jetty-xml-8.1.2.v20120308.jar Thu Mar 22 17:08:31 2012 differ

Added: ofbiz/trunk/framework/jetty/lib/org.apache.jasper.glassfish-2.2.2.v201112011158.jar
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/jetty/lib/org.apache.jasper.glassfish-2.2.2.v201112011158.jar?rev=1303894&view=auto
==============================================================================
Files ofbiz/trunk/framework/jetty/lib/org.apache.jasper.glassfish-2.2.2.v201112011158.jar (added) and ofbiz/trunk/framework/jetty/lib/org.apache.jasper.glassfish-2.2.2.v201112011158.jar Thu Mar 22 17:08:31 2012 differ

Added: ofbiz/trunk/framework/jetty/lib/org.apache.taglibs.standard.glassfish-1.2.0.v201112081803.jar
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/jetty/lib/org.apache.taglibs.standard.glassfish-1.2.0.v201112081803.jar?rev=1303894&view=auto
==============================================================================
Files ofbiz/trunk/framework/jetty/lib/org.apache.taglibs.standard.glassfish-1.2.0.v201112081803.jar (added) and ofbiz/trunk/framework/jetty/lib/org.apache.taglibs.standard.glassfish-1.2.0.v201112081803.jar Thu Mar 22 17:08:31 2012 differ

Added: ofbiz/trunk/framework/jetty/lib/org.eclipse.jdt.core-3.7.1.jar
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/jetty/lib/org.eclipse.jdt.core-3.7.1.jar?rev=1303894&view=auto
==============================================================================
Files ofbiz/trunk/framework/jetty/lib/org.eclipse.jdt.core-3.7.1.jar (added) and ofbiz/trunk/framework/jetty/lib/org.eclipse.jdt.core-3.7.1.jar Thu Mar 22 17:08:31 2012 differ

Modified: ofbiz/trunk/framework/jetty/src/org/ofbiz/jetty/container/JettyContainer.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/jetty/src/org/ofbiz/jetty/container/JettyContainer.java?rev=1303894&r1=1303893&r2=1303894&view=diff
==============================================================================
--- ofbiz/trunk/framework/jetty/src/org/ofbiz/jetty/container/JettyContainer.java (original)
+++ ofbiz/trunk/framework/jetty/src/org/ofbiz/jetty/container/JettyContainer.java Thu Mar 22 17:08:31 2012
@@ -18,24 +18,10 @@
  *******************************************************************************/
 package org.ofbiz.jetty.container;
 
-import java.util.Collection;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
-import org.mortbay.jetty.AbstractConnector;
-import org.mortbay.jetty.NCSARequestLog;
-import org.mortbay.jetty.Server;
-import org.mortbay.jetty.ajp.Ajp13SocketConnector;
-import org.mortbay.jetty.bio.SocketConnector;
-import org.mortbay.jetty.handler.RequestLogHandler;
-import org.mortbay.jetty.nio.SelectChannelConnector;
-import org.mortbay.jetty.security.SslSelectChannelConnector;
-import org.mortbay.jetty.security.SslSocketConnector;
-import org.mortbay.jetty.servlet.HashSessionManager;
-import org.mortbay.jetty.servlet.SessionHandler;
-import org.mortbay.jetty.webapp.WebAppContext;
-import org.mortbay.thread.BoundedThreadPool;
 import org.ofbiz.base.component.ComponentConfig;
 import org.ofbiz.base.container.Container;
 import org.ofbiz.base.container.ContainerConfig;
@@ -44,363 +30,322 @@ import org.ofbiz.base.util.Debug;
 import org.ofbiz.base.util.SSLUtil;
 import org.ofbiz.base.util.UtilValidate;
 
+import org.eclipse.jetty.ajp.Ajp13SocketConnector;
+import org.eclipse.jetty.server.Connector;
+import org.eclipse.jetty.server.NCSARequestLog;
+import org.eclipse.jetty.server.Server;
+import org.eclipse.jetty.server.bio.SocketConnector;
+import org.eclipse.jetty.server.handler.HandlerCollection;
+import org.eclipse.jetty.server.handler.RequestLogHandler;
+import org.eclipse.jetty.server.nio.SelectChannelConnector;
+import org.eclipse.jetty.server.session.HashSessionManager;
+import org.eclipse.jetty.server.session.SessionHandler;
+import org.eclipse.jetty.server.ssl.SslConnector;
+import org.eclipse.jetty.server.ssl.SslSelectChannelConnector;
+import org.eclipse.jetty.server.ssl.SslSocketConnector;
+import org.eclipse.jetty.util.ssl.SslContextFactory;
+import org.eclipse.jetty.util.thread.QueuedThreadPool;
+import org.eclipse.jetty.util.thread.ThreadPool;
+import org.eclipse.jetty.webapp.WebAppContext;
+
 
 /**
- * JettyContainer - Container implementation for Jetty 6
- *
+ * JettyContainer - Container implementation for Jetty
  */
 public class JettyContainer implements Container {
 
     public static final String module = JettyContainer.class.getName();
 
-    protected String configFile = null;
     private Map<String, Server> servers = new HashMap<String, Server>();
 
     /**
-     * @see org.ofbiz.base.container.Container#init(java.lang.String[],java.lang.String)
+     * @see org.ofbiz.base.container.Container#init(java.lang.String[], java.lang.String)
      */
-    public void init(String[] args, String configFile) {
-        this.configFile = configFile;
-    }
-
-    private void initJetty() throws ContainerException {
+    public void init(String[] args, String configFile) throws ContainerException {
 
         // configure JSSE properties
         SSLUtil.loadJsseProperties();
 
-        // get the container
-        ContainerConfig.Container jc = ContainerConfig.getContainer("jetty-container", configFile);
+        // get the jetty container config
+        ContainerConfig.Container jettyContainerConfig = ContainerConfig.getContainer("jetty-container", configFile);
 
         // create the servers
-        for (ContainerConfig.Container.Property property : jc.properties.values()) {
-            servers.put(property.name, createServer(property));
+        for (ContainerConfig.Container.Property serverConfig : jettyContainerConfig.getPropertiesWithValue("server")) {
+            servers.put(serverConfig.name, createServer(serverConfig));
         }
 
-        // load the applications
-        Collection<ComponentConfig> componentConfigs = ComponentConfig.getAllComponents();
-        if (componentConfigs != null) {
+        // create the webapp contexts
+        for (ComponentConfig componentConfig : ComponentConfig.getAllComponents()) {
 
-            for (Object componentConfig : componentConfigs) {
+            for (ComponentConfig.WebappInfo webappInfo : componentConfig.getWebappInfos()) {
 
-                ComponentConfig component = (ComponentConfig) componentConfig;
+                Server server = servers.get(webappInfo.server);
+                if (server == null) {
 
-                for (ComponentConfig.WebappInfo webappInfo : component.getWebappInfos()) {
+                    Debug.logError("Server with name [" + webappInfo.server + "] not found; not mounting [" + webappInfo.name + "]", module);
 
-                    List<String> virtualHosts = webappInfo.getVirtualHosts();
-                    Map<String, String> initParameters = webappInfo.getInitParameters();
+                } else {
 
-                    Server server = servers.get(webappInfo.server);
+                    // set the root location (make sure we set the paths correctly)
+                    String location = componentConfig.getRootLocation() + webappInfo.location;
+                    location = location.replace('\\', '/');
+                    if (location.endsWith("/")) {
+                        location = location.substring(0, location.lastIndexOf("/"));
+                    }
 
-                    if (server == null) {
-                        Debug.logWarning("Server with name [" + webappInfo.server + "] not found; not mounting [" + webappInfo.name + "]", module);
-                    } else {
-
-                        // set the root location (make sure we set the paths correctly)
-                        String location = component.getRootLocation() + webappInfo.location;
-                        location = location.replace('\\', '/');
-                        if (location.endsWith("/")) {
-                            location = location.substring(0, location.lastIndexOf("/"));
-                        }
+                    String mountPoint = webappInfo.mountPoint;
+                    if (mountPoint.endsWith("/*")) {
+                        mountPoint = mountPoint.substring(0, mountPoint.lastIndexOf("/"));
+                    }
 
-                        // load the application
-                        String mountPoint = webappInfo.mountPoint;
-                        if (mountPoint.endsWith("/*")) {
-                            mountPoint = mountPoint.substring(0, mountPoint.lastIndexOf("/"));
-                        }
+                    WebAppContext context = new WebAppContext(location, mountPoint);
+                    context.setAttribute("_serverId", webappInfo.server);
+                    context.setLogUrlOnStart(true);
+
+                    // set the session manager
+                    HashSessionManager sm = new HashSessionManager();
+                    context.setSessionHandler(new SessionHandler(sm));
 
-                        WebAppContext context = new WebAppContext(location, mountPoint);
-                        context.setAttribute("_serverId", webappInfo.server);
-                        context.setLogUrlOnStart(true);
-
-                         // set the session manager
-                        HashSessionManager sm = new HashSessionManager();
-                        context.setSessionHandler(new SessionHandler(sm));
-
-                        // set the virtual hosts
-                        if (UtilValidate.isNotEmpty(virtualHosts)) {
-                            context.setVirtualHosts(virtualHosts.toArray(new String[virtualHosts.size()]));
-                        }
+                    // set the virtual hosts
+                    List<String> virtualHosts = webappInfo.getVirtualHosts();
+                    if (UtilValidate.isNotEmpty(virtualHosts)) {
+                        context.setVirtualHosts(virtualHosts.toArray(new String[virtualHosts.size()]));
+                    }
 
-                        // set the init parameters
-                        if (UtilValidate.isNotEmpty(initParameters)) {
-                            context.setInitParams(initParameters);
+                    // set the init parameters
+                    Map<String, String> initParameters = webappInfo.getInitParameters();
+                    if (UtilValidate.isNotEmpty(initParameters)) {
+                        for (Map.Entry<String, String> e : initParameters.entrySet()) {
+                            context.setInitParameter(e.getKey(), e.getValue());
                         }
-
-                        server.addHandler(context);
                     }
+
+                    ((HandlerCollection) server.getHandler()).addHandler(context);
                 }
             }
         }
     }
 
-    private Server createServer(ContainerConfig.Container.Property serverConfig) throws ContainerException {
+    private Server createServer(ContainerConfig.Container.Property serverConfig) {
 
         Server server = new Server();
+        server.setHandler(new HandlerCollection());
 
-        // configure the connectors / loggers
-        for (ContainerConfig.Container.Property props : serverConfig.properties.values()) {
-
-            if ("send-server-version".equals(props.name)) {
-                if ("false".equalsIgnoreCase(props.value)) {
-                    server.setSendServerVersion(false);
-                }
-            } else if ("connector".equals(props.value)) {
-
-                if ("http".equals(props.getProperty("type").value)) {
-
-                    AbstractConnector connector = new SocketConnector();
-                    setConnectorOptions(connector, props);
-                    server.addConnector(connector);
-
-                } else if ("https".equals(props.getProperty("type").value)) {
-
-                    SslSocketConnector connector = new SslSocketConnector();
-                    setConnectorOptions(connector, props);
-
-                    if (props.getProperty("keystore") != null) {
-                        connector.setKeystore(props.getProperty("keystore").value);
-                    }
-                    if (props.getProperty("password") != null) {
-                        connector.setPassword(props.getProperty("password").value);
-                    }
-                    if (props.getProperty("key-password") != null) {
-                        connector.setKeyPassword(props.getProperty("key-password").value);
-                    }
-                    if (props.getProperty("client-auth") != null) {
-                        if ("need".equals(props.getProperty("client-auth").value)) {
-                            connector.setNeedClientAuth(true);
-                        } else if ("want".equals(props.getProperty("client-auth").value)) {
-                            connector.setWantClientAuth(true);
-                        }
-                    }
-
-                    server.addConnector(connector);
-
-                } else if ("nio-http".equals(props.getProperty("type").value)) {
-
-                    AbstractConnector connector = new SelectChannelConnector();
-                    setConnectorOptions(connector, props);
-                    server.addConnector(connector);
-
-                } else if ("nio-https".equals(props.getProperty("type").value)) {
-
-                    SslSelectChannelConnector connector = new SslSelectChannelConnector();
-                    setConnectorOptions(connector, props);
-
-                    if (props.getProperty("keystore") != null) {
-                        connector.setKeystore(props.getProperty("keystore").value);
-                    }
-                    if (props.getProperty("password") != null) {
-                        connector.setPassword(props.getProperty("password").value);
-                    }
-                    if (props.getProperty("key-password") != null) {
-                        connector.setKeyPassword(props.getProperty("key-password").value);
-                    }
-                    if (props.getProperty("need-client-auth") != null) {
-                        boolean needClientAuth = "true".equalsIgnoreCase(props.getProperty("need-client-auth").value);
-                        connector.setNeedClientAuth(needClientAuth);
-                    }
-
-                    server.addConnector(connector);
-
-                } else if ("ajp13".equals(props.getProperty("type").value)) {
+        // send server version?
+        if (UtilValidate.isNotEmpty(serverConfig.getProperty("send-server-version"))) {
+            String sendServerVersionPropertyValue = serverConfig.getProperty("send-server-version").value;
+            try {
+                server.setSendServerVersion(Boolean.parseBoolean(sendServerVersionPropertyValue));
+            } catch (NumberFormatException e) {
+                Debug.logError(e, "invalid value for send-server-version: " + sendServerVersionPropertyValue, module);
+            }
+        }
 
-                    AbstractConnector connector = new Ajp13SocketConnector();
-                    setConnectorOptions(connector, props);
-                    server.addConnector(connector);
-                }
+        // thread pool
+        server.setThreadPool(createThreadPool(serverConfig));
 
-            } else if ("request-log".equals(props.value)) {
+        // connectors
+        for (ContainerConfig.Container.Property connectorConfig : serverConfig.getPropertiesWithValue("connector")) {
 
-                RequestLogHandler requestLogHandler = new RequestLogHandler();
+            Connector connector = null;
 
-                NCSARequestLog requestLog = new NCSARequestLog();
+            String connectorType = connectorConfig.getProperty("type").value;
 
-                if (props.getProperty("filename") != null) {
-                    requestLog.setFilename(props.getProperty("filename").value);
-                }
+            if ("http".equals(connectorType)) {
+                connector = new SocketConnector();
+            } else if ("https".equals(connectorType)) {
+                connector = new SslSocketConnector();
+            } else if ("nio-http".equals(connectorType)) {
+                connector = new SelectChannelConnector();
+            } else if ("nio-https".equals(connectorType)) {
+                connector = new SslSelectChannelConnector();
+            } else if ("ajp13".equals(connectorType)) {
+                connector = new Ajp13SocketConnector();
+            }
 
-                if (props.getProperty("append") != null) {
-                    requestLog.setAppend("true".equalsIgnoreCase(props.getProperty("append").value));
-                }
+            if (connector != null) {
+                setConnectorOptions(connector, connectorConfig);
+                server.addConnector(connector);
+            }
+        }
 
-                if (props.getProperty("extended") != null) {
-                    requestLog.setExtended("true".equalsIgnoreCase(props.getProperty("extended").value));
-                }
+        // request logs
+        for (ContainerConfig.Container.Property props : serverConfig.getPropertiesWithValue("request-log")) {
 
-                if (props.getProperty("timezone") != null) {
-                    requestLog.setLogTimeZone(props.getProperty("timezone").value);
-                }
+            NCSARequestLog requestLog = new NCSARequestLog();
 
-                if (props.getProperty("date-format") != null) {
-                    requestLog.setLogDateFormat(props.getProperty("date-format").value);
+            if (UtilValidate.isNotEmpty(props.getProperty("filename"))) {
+                requestLog.setFilename(props.getProperty("filename").value);
+            }
+            if (UtilValidate.isNotEmpty(props.getProperty("append"))) {
+                requestLog.setAppend("true".equalsIgnoreCase(props.getProperty("append").value));
+            }
+            if (UtilValidate.isNotEmpty(props.getProperty("extended"))) {
+                requestLog.setExtended("true".equalsIgnoreCase(props.getProperty("extended").value));
+            }
+            if (UtilValidate.isNotEmpty(props.getProperty("log-dispatch"))) {
+                requestLog.setLogDispatch("true".equalsIgnoreCase(props.getProperty("log-dispatch").value));
+            }
+            if (UtilValidate.isNotEmpty(props.getProperty("log-latency"))) {
+                requestLog.setLogLatency("true".equalsIgnoreCase(props.getProperty("log-latency").value));
+            }
+            if (UtilValidate.isNotEmpty(props.getProperty("log-server"))) {
+                requestLog.setLogServer("true".equalsIgnoreCase(props.getProperty("log-server").value));
+            }
+            if (UtilValidate.isNotEmpty(props.getProperty("prefer-proxied-for-address"))) {
+                requestLog.setPreferProxiedForAddress("true".equalsIgnoreCase(props.getProperty("prefer-proxied-for-address").value));
+            }
+            if (UtilValidate.isNotEmpty(props.getProperty("timezone"))) {
+                requestLog.setLogTimeZone(props.getProperty("timezone").value);
+            }
+            if (UtilValidate.isNotEmpty(props.getProperty("date-format"))) {
+                requestLog.setLogDateFormat(props.getProperty("date-format").value);
+            }
+            if (UtilValidate.isNotEmpty(props.getProperty("retain-days"))) {
+                String retainDaysPropertyValue = props.getProperty("retain-days").value;
+                try {
+                    requestLog.setRetainDays(Integer.parseInt(retainDaysPropertyValue));
+                } catch (NumberFormatException e) {
+                    Debug.logError(e, "invalid value for retain-days: " + retainDaysPropertyValue, module);
                 }
+            }
 
-                if (props.getProperty("retain-days") != null) {
-                    int days = 90;
-                    try {
-                        days = Integer.parseInt(props.getProperty("retain-days").value);
-                    } catch (NumberFormatException e) {
-                        days = 90;
-                    }
-                    requestLog.setRetainDays(days);
-                }
+            RequestLogHandler requestLogHandler = new RequestLogHandler();
+            requestLogHandler.setRequestLog(requestLog);
 
-                requestLogHandler.setRequestLog(requestLog);
-                server.addHandler(requestLogHandler);
-            }
+            ((HandlerCollection) server.getHandler()).addHandler(requestLogHandler);
         }
 
         return server;
     }
 
-    private void setConnectorOptions(AbstractConnector connector, ContainerConfig.Container.Property props) throws ContainerException {
+    private ThreadPool createThreadPool(ContainerConfig.Container.Property serverConfig) {
 
-        String systemHost = null;
-        if ("default".equals(props.getProperty("type").value)) {
-            systemHost = System.getProperty(props.name + ".host");
-        }
-        if (props.getProperty("host") != null && systemHost == null) {
-            connector.setHost(props.getProperty("host").value);
-        } else {
-            String host = "0.0.0.0";
-            if (systemHost != null) {
-                host = systemHost;
-            }
-            connector.setHost(host);
-        }
+        QueuedThreadPool threadPool = new QueuedThreadPool();
 
-        String systemPort = null;
-        if ("default".equals(props.getProperty("type").value)) {
-            systemPort = System.getProperty(props.name + ".port");
-        }
-        if (props.getProperty("port") != null && systemPort == null) {
-            int value = 8080;
+        if (UtilValidate.isNotEmpty(serverConfig.getProperty("min-threads"))) {
+            String minThreadsPropertyValue = serverConfig.getProperty("min-threads").value;
             try {
-                value = Integer.parseInt(props.getProperty("port").value);
+                threadPool.setMinThreads(Integer.parseInt(minThreadsPropertyValue));
             } catch (NumberFormatException e) {
-                value = 8080;
-            }
-            if (value == 0) value = 8080;
-
-            connector.setPort(value);
-        } else {
-            int port = 8080;
-            if (systemPort != null) {
-                try {
-                    port = Integer.parseInt(systemPort);
-                } catch (NumberFormatException e) {
-                    port = 8080;
-                }
+                Debug.logError(e, "invalid value for min-threads: " + minThreadsPropertyValue, module);
             }
-            connector.setPort(port);
         }
-
-        if (props.getProperty("buffer-size") != null) {
-            int value = 0;
+        if (UtilValidate.isNotEmpty(serverConfig.getProperty("max-threads"))) {
+            String maxThreadsPropertyValue = serverConfig.getProperty("max-threads").value;
             try {
-                value = Integer.parseInt(props.getProperty("buffer-size").value);
+                threadPool.setMaxThreads(Integer.parseInt(maxThreadsPropertyValue));
             } catch (NumberFormatException e) {
-                value = 0;
-            }
-            if (value > 0) {
-                connector.setResponseBufferSize(value);
+                Debug.logError(e, "invalid value for max-threads: " + maxThreadsPropertyValue, module);
             }
         }
-
-        if (props.getProperty("linger-time") != null) {
-            int value = 0;
+        if (UtilValidate.isNotEmpty(serverConfig.getProperty("max-idle-time-ms"))) {
+            String maxIdleTimeMsPropertyValue = serverConfig.getProperty("max-idle-time-ms").value;
             try {
-                value = Integer.parseInt(props.getProperty("linger-time").value);
+                threadPool.setMaxIdleTimeMs(Integer.parseInt(maxIdleTimeMsPropertyValue));
             } catch (NumberFormatException e) {
-                value = 0;
-            }
-            if (value > 0) {
-                connector.setSoLingerTime(value);
+                Debug.logError(e, "invalid value for max-idle-time-ms: " + maxIdleTimeMsPropertyValue, module);
             }
         }
-
-        if (props.getProperty("low-resource-max-idle-time") != null) {
-            int value = 0;
+        if (UtilValidate.isNotEmpty(serverConfig.getProperty("max-stop-time-ms"))) {
+            String maxStopTimeMsPropertyValue = serverConfig.getProperty("max-stop-time-ms").value;
             try {
-                value = Integer.parseInt(props.getProperty("low-resource-max-idle-time").value);
+                threadPool.setMaxStopTimeMs(Integer.parseInt(maxStopTimeMsPropertyValue));
             } catch (NumberFormatException e) {
-                value = 0;
-            }
-            if (value > 0) {
-                connector.setLowResourceMaxIdleTime(value);
+                Debug.logError(e, "invalid value for max-stop-time-ms: " + maxStopTimeMsPropertyValue, module);
             }
         }
 
+        return threadPool;
+    }
 
-        BoundedThreadPool threadPool = new BoundedThreadPool();
+    private void setConnectorOptions(Connector connector, ContainerConfig.Container.Property connectorConfig) {
 
-        if (props.getProperty("min-threads") != null) {
-            int value = 0;
+        if (UtilValidate.isNotEmpty(connectorConfig.getProperty("host"))) {
+            connector.setHost(connectorConfig.getProperty("host").value);
+        }
+        if (UtilValidate.isNotEmpty(connectorConfig.getProperty("port"))) {
+            String portPropertyValue = connectorConfig.getProperty("port").value;
             try {
-                value = Integer.parseInt(props.getProperty("min-threads").value);
+                connector.setPort(Integer.parseInt(portPropertyValue));
             } catch (NumberFormatException e) {
-                value = 0;
-            }
-            if (value > 0) {
-                threadPool.setMinThreads(value);
+                Debug.logError(e, "invalid value for port: " + portPropertyValue, module);
             }
         }
-
-        if (props.getProperty("max-threads") != null) {
-            int value = 0;
+        if (UtilValidate.isNotEmpty(connectorConfig.getProperty("request-buffer-size"))) {
+            String requestBufferSizePropertyValue = connectorConfig.getProperty("request-buffer-size").value;
             try {
-                value = Integer.parseInt(props.getProperty("max-threads").value);
+                connector.setRequestBufferSize(Integer.parseInt(requestBufferSizePropertyValue));
             } catch (NumberFormatException e) {
-                value = 0;
-            }
-            if (value > 0) {
-                threadPool.setMaxThreads(value);
+                Debug.logError(e, "invalid value for request-buffer-size: " + requestBufferSizePropertyValue, module);
             }
         }
-
-        if (props.getProperty("max-idle-time") != null) {
-            int value = 0;
+        if (UtilValidate.isNotEmpty(connectorConfig.getProperty("request-header-size"))) {
+            String requestHeaderSizePropertyValue = connectorConfig.getProperty("request-header-size").value;
             try {
-                value = Integer.parseInt(props.getProperty("max-idle-time").value);
+                connector.setRequestHeaderSize(Integer.parseInt(requestHeaderSizePropertyValue));
             } catch (NumberFormatException e) {
-                value = 0;
+                Debug.logError(e, "invalid value for request-header-size: " + requestHeaderSizePropertyValue, module);
             }
-            if (value > 0) {
-                threadPool.setMaxIdleTimeMs(value);
+        }
+        if (UtilValidate.isNotEmpty(connectorConfig.getProperty("response-buffer-size"))) {
+            String responseBufferSizePropertyValue = connectorConfig.getProperty("response-buffer-size").value;
+            try {
+                connector.setResponseBufferSize(Integer.parseInt(responseBufferSizePropertyValue));
+            } catch (NumberFormatException e) {
+                Debug.logError(e, "invalid value for response-buffer-size: " + responseBufferSizePropertyValue, module);
             }
         }
-
-        if (props.getProperty("low-threads") != null) {
-            int value = 0;
+        if (UtilValidate.isNotEmpty(connectorConfig.getProperty("response-header-size"))) {
+            String responseHeaderSizePropertyValue = connectorConfig.getProperty("response-header-size").value;
             try {
-                value = Integer.parseInt(props.getProperty("low-threads").value);
+                connector.setResponseHeaderSize(Integer.parseInt(responseHeaderSizePropertyValue));
             } catch (NumberFormatException e) {
-                value = 0;
+                Debug.logError(e, "invalid value for response-header-size: " + responseHeaderSizePropertyValue, module);
             }
-            if (value > 0) {
-                threadPool.setLowThreads(value);
+        }
+        if (UtilValidate.isNotEmpty(connectorConfig.getProperty("low-resource-max-idle-time"))) {
+            String lowResourceMaxIdleTimePropertyValue = connectorConfig.getProperty("low-resource-max-idle-time").value;
+            try {
+                connector.setLowResourceMaxIdleTime(Integer.parseInt(lowResourceMaxIdleTimePropertyValue));
+            } catch (NumberFormatException e) {
+                Debug.logError(e, "invalid value for low-resource-max-idle-time: " + lowResourceMaxIdleTimePropertyValue, module);
             }
         }
 
-        connector.setThreadPool(threadPool);
+        // SSL options
+        if (connector instanceof SslConnector) {
+
+            SslContextFactory cf = ((SslConnector) connector).getSslContextFactory();
 
+            if (UtilValidate.isNotEmpty(connectorConfig.getProperty("keystore"))) {
+                cf.setKeyStorePath(connectorConfig.getProperty("keystore").value);
+            }
+            if (connectorConfig.getProperty("password") != null) {
+                cf.setKeyStorePassword(connectorConfig.getProperty("password").value);
+            }
+            if (connectorConfig.getProperty("key-password") != null) {
+                cf.setKeyManagerPassword(connectorConfig.getProperty("key-password").value);
+            }
+            if (UtilValidate.isNotEmpty(connectorConfig.getProperty("client-auth"))) {
+                if ("need".equals(connectorConfig.getProperty("client-auth").value)) {
+                    cf.setNeedClientAuth(true);
+                } else if ("want".equals(connectorConfig.getProperty("client-auth").value)) {
+                    cf.setWantClientAuth(true);
+                }
+            }
+        }
     }
 
     /**
      * @see org.ofbiz.base.container.Container#start()
      */
     public boolean start() throws ContainerException {
-        // start the server(s)
-        this.initJetty();
-        if (servers != null) {
-            for (Server server : servers.values()) {
-                try {
-                    server.start();
-                } catch (Exception e) {
-                    Debug.logError(e, "Jetty Server Exception", module);
-                    throw new ContainerException(e);
-                }
+        for (Server server : servers.values()) {
+            try {
+                server.start();
+            } catch (Exception e) {
+                throw new ContainerException(e);
             }
         }
         return true;
@@ -410,14 +355,13 @@ public class JettyContainer implements C
      * @see org.ofbiz.base.container.Container#stop()
      */
     public void stop() throws ContainerException {
-        if (servers != null) {
-            for (Server server : servers.values()) {
-                try {
-                    server.stop();
-                } catch (Exception e) {
-                    Debug.logWarning(e, module);
-                }
+        for (Server server : servers.values()) {
+            try {
+                server.stop();
+            } catch (Exception e) {
+                throw new ContainerException(e);
             }
         }
     }
+
 }



Re: svn commit: r1303894 - in /ofbiz/trunk/framework: base/config/ jetty/lib/ jetty/src/org/ofbiz/jetty/container/

Posted by Erwan de FERRIERES <er...@nereide.fr>.
Le 22/03/2012 18:08, eckardjf@apache.org a écrit :
> Author: eckardjf
> Date: Thu Mar 22 17:08:31 2012
> New Revision: 1303894
>
> URL: http://svn.apache.org/viewvc?rev=1303894&view=rev
> Log:
> update jetty container to use the latest jetty-8 release, 8.1.2
>

Hi Joseph,

please don't forget to update the .classpath and LICENSE files.

Cheers,

-- 
Erwan de FERRIERES
www.nereide.biz

Re: svn commit: r1303894 - in /ofbiz/trunk/framework: base/config/ jetty/lib/ jetty/src/org/ofbiz/jetty/container/

Posted by Jacopo Cappellato <ja...@hotwaxmedia.com>.
I see some jars that could be redundant: please check the existing ones especially in the base/lib/j2eespecs

Thanks,

Jacopo

On Mar 22, 2012, at 6:08 PM, eckardjf@apache.org wrote:

> Author: eckardjf
> Date: Thu Mar 22 17:08:31 2012
> New Revision: 1303894
> 
> URL: http://svn.apache.org/viewvc?rev=1303894&view=rev
> Log:
> update jetty container to use the latest jetty-8 release, 8.1.2
> 
> Added:
>    ofbiz/trunk/framework/jetty/lib/com.sun.el-2.2.0.v201108011116.jar
>    ofbiz/trunk/framework/jetty/lib/javax.el-2.2.0.v201108011116.jar
>    ofbiz/trunk/framework/jetty/lib/javax.servlet.jsp-2.2.0.v201112011158.jar
>    ofbiz/trunk/framework/jetty/lib/javax.servlet.jsp.jstl-1.2.0.v201105211821.jar
>    ofbiz/trunk/framework/jetty/lib/jetty-ajp-8.1.2.v20120308.jar
>    ofbiz/trunk/framework/jetty/lib/jetty-continuation-8.1.2.v20120308.jar
>    ofbiz/trunk/framework/jetty/lib/jetty-http-8.1.2.v20120308.jar
>    ofbiz/trunk/framework/jetty/lib/jetty-io-8.1.2.v20120308.jar
>    ofbiz/trunk/framework/jetty/lib/jetty-security-8.1.2.v20120308.jar
>    ofbiz/trunk/framework/jetty/lib/jetty-server-8.1.2.v20120308.jar
>    ofbiz/trunk/framework/jetty/lib/jetty-servlet-8.1.2.v20120308.jar
>    ofbiz/trunk/framework/jetty/lib/jetty-util-8.1.2.v20120308.jar
>    ofbiz/trunk/framework/jetty/lib/jetty-webapp-8.1.2.v20120308.jar
>    ofbiz/trunk/framework/jetty/lib/jetty-xml-8.1.2.v20120308.jar
>    ofbiz/trunk/framework/jetty/lib/org.apache.jasper.glassfish-2.2.2.v201112011158.jar
>    ofbiz/trunk/framework/jetty/lib/org.apache.taglibs.standard.glassfish-1.2.0.v201112081803.jar
>    ofbiz/trunk/framework/jetty/lib/org.eclipse.jdt.core-3.7.1.jar
> Removed:
>    ofbiz/trunk/framework/jetty/lib/ant-1.8.2.jar
>    ofbiz/trunk/framework/jetty/lib/jasper-compiler-5.5.15.jar
>    ofbiz/trunk/framework/jetty/lib/jasper-compiler-jdt-5.5.15.jar
>    ofbiz/trunk/framework/jetty/lib/jasper-runtime-5.5.15.jar
>    ofbiz/trunk/framework/jetty/lib/jcl104-over-slf4j-1.3.1.jar
>    ofbiz/trunk/framework/jetty/lib/jetty-6.1.11.jar
>    ofbiz/trunk/framework/jetty/lib/jetty-ajp-6.1.11.jar
>    ofbiz/trunk/framework/jetty/lib/jetty-sslengine-6.1.11.jar
>    ofbiz/trunk/framework/jetty/lib/jetty-util-6.1.11.jar
>    ofbiz/trunk/framework/jetty/lib/xmlParserAPIs-2.6.2.jar
> Modified:
>    ofbiz/trunk/framework/base/config/jetty-containers.xml
>    ofbiz/trunk/framework/jetty/src/org/ofbiz/jetty/container/JettyContainer.java
> 
> Modified: ofbiz/trunk/framework/base/config/jetty-containers.xml
> URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/base/config/jetty-containers.xml?rev=1303894&r1=1303893&r2=1303894&view=diff
> ==============================================================================
> --- ofbiz/trunk/framework/base/config/jetty-containers.xml (original)
> +++ ofbiz/trunk/framework/base/config/jetty-containers.xml Thu Mar 22 17:08:31 2012
> @@ -19,21 +19,17 @@ under the License.
> -->
> 
> <ofbiz-containers xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
> -        xsi:noNamespaceSchemaLocation="http://ofbiz.apache.org/dtds/ofbiz-containers.xsd">
> +                  xsi:noNamespaceSchemaLocation="http://ofbiz.apache.org/dtds/ofbiz-containers.xsd">
> +
>     <!-- load the ofbiz component container (always first) -->
>     <container name="component-container" class="org.ofbiz.base.container.ComponentContainer"/>
> 
>     <!-- load the cached classloader container (always second) -->
>     <container name="classloader-container" class="org.ofbiz.base.container.ClassLoaderContainer"/>
> 
> -    <!-- load JNDI/JOTM; this is no longer needed, leaving this in for now just in case someone wants to drop in JOTM from the specialized directory
> -    <container name="jotm-container" class="org.ofbiz.jotm.container.JotmContainer">
> -        <property name="jndi-config" value="iiop.properties"/>
> -    </container>
> -    -->
> -
>     <!-- load the naming (JNDI) server -->
>     <container name="naming-container" class="org.ofbiz.base.container.NamingServiceContainer">
> +        <property name="host" value="0.0.0.0"/>
>         <property name="port" value="1099"/>
>     </container>
> 
> @@ -52,105 +48,54 @@ under the License.
>         <property name="ssl-client-auth" value="false"/>
>     </container>
> 
> -    <!-- JavaMail Listener Container - Triggers MCA Rules -->
> -    <!-- if delete-mail is set to true, will delete messages after fetching them. otherwise, will try to mark them as seen
> -         mail.store.protocol supports both imap and pop3, but pop3 will not be able to mark messages as seen, so you would need to delete them
> -         Sounds like mail.store.protocol value should be "imaps" for GMail inbound emails to work.
> -         Not tested found here https://sourceforge.net/forum/message.php?msg_id=5879468 -->
> -    <!-- To use the mail listerner just uncomment and go...
> -    <container name="javamail-container" class="org.ofbiz.service.mail.JavaMailContainer">
> -        <property name="delegator-name" value="default"/>
> -        <property name="dispatcher-name" value="JavaMailDispatcher"/>
> -        <property name="run-as-user" value="system"/>
> -        <property name="poll-delay" value="300000"/>
> -        <property name="delete-mail" value="false"/>
> -        <property name="maxSize" value="100000"/>
> -        <property name="default-listener" value="store-listener">
> -        <property name="mail.store.protocol" value="imap"/>
> -        <property name="mail.host" value="[host]"/>
> -        <property name="mail.user" value="[user]"/>
> -        <property name="mail.pass" value="[pass]"/>
> -        <property name="mail.debug" value="false"/>
> -        </property>
> -    </container>
> -    -->
> -
> -    <!-- load Shark Workflow Engine -->
> -    <!-- NOTE: before uncommenting this please see the instructions in the ofbiz/OPTIONAL_LIBRARIES file.
> -    <container name="shark-container" class="org.ofbiz.shark.container.SharkContainer">
> -        <property name="engine-name" value="Shark"/>
> -        <property name="delegator-name" value="default"/>
> -        <property name="dispatcher-name" value="WFDispatcher"/>
> -        <property name="admin-user" value="system"/>
> -        <property name="admin-pass" value="ofbiz"/>
> -        <property name="iiop-host" value="127.0.0.1"/>
> -        <property name="iiop-port" value="2000"/>
> -    </container>
> -    -->
> -
>     <!-- load jetty and all web applications -->
>     <container name="jetty-container" class="org.ofbiz.jetty.container.JettyContainer">
> -        <property name="default-server">
> +        <property name="default-server" value="server">
>             <property name="send-server-version" value="false"/>
> -            <property name="http-listener" value="connector">
> +            <!-- thread pool config -->
> +            <property name="min-threads" value="5"/>
> +            <property name="max-threads" value="100"/>
> +            <property name="max-idle-time-ms" value="30000"/>
> +            <property name="max-stop-time-ms" value="5000"/>
> +            <!-- connectors -->
> +            <!--
> +            <property name="http-connector" value="connector">
>                 <property name="type" value="http"/>
>                 <property name="host" value="0.0.0.0"/>
>                 <property name="port" value="8080"/>
> -                <property name="min-threads" value="5"/>
> -                <property name="max-threads" value="100"/>
> -                <property name="max-idle-time" value="30000"/>
> -                <property name="low-threads" value="0"/>
> -                <property name="low-resource-max-idle-time" value="5000"/>
>             </property>
> -            <property name="https-listener" value="connector">
> +            <property name="https-connector" value="connector">
>                 <property name="type" value="https"/>
>                 <property name="host" value="0.0.0.0"/>
>                 <property name="port" value="8443"/>
> -                <property name="min-threads" value="5"/>
> -                <property name="max-threads" value="100"/>
> -                <property name="max-idle-time" value="30000"/>
> -                <property name="low-threads" value="0"/>
> -                <property name="low-resource-max-idle-time" value="5000"/>
>                 <property name="keystore" value="framework/base/config/ofbizssl.jks"/>
>                 <property name="password" value="changeit"/>
>                 <property name="key-password" value="changeit"/>
>                 <property name="client-auth" value="false"/>
>             </property>
> -            <!--
> -            <property name="nio-http-listener" value="connector">
> +            -->
> +            <property name="nio-http-connector" value="connector">
>                 <property name="type" value="http"/>
>                 <property name="host" value="0.0.0.0"/>
>                 <property name="port" value="8080"/>
> -                <property name="min-threads" value="5"/>
> -                <property name="max-threads" value="100"/>
> -                <property name="max-idle-time" value="30000"/>
> -                <property name="low-threads" value="0"/>
> -                <property name="low-resource-max-idle-time" value="5000"/>
>             </property>
> -            <property name="nio-https-listener" value="connector">
> +            <property name="nio-https-connector" value="connector">
>                 <property name="type" value="https"/>
>                 <property name="host" value="0.0.0.0"/>
>                 <property name="port" value="8443"/>
> -                <property name="min-threads" value="5"/>
> -                <property name="max-threads" value="100"/>
> -                <property name="max-idle-time" value="30000"/>
> -                <property name="low-threads" value="0"/>
> -                <property name="low-resource-max-idle-time" value="5000"/>
>                 <property name="keystore" value="framework/base/config/ofbizssl.jks"/>
>                 <property name="password" value="changeit"/>
>                 <property name="key-password" value="changeit"/>
>                 <property name="client-auth" value="false"/>
>             </property>
> -            <property name="ajp13-listener" value="connector">
> +            <!--
> +            <property name="ajp13-connector" value="connector">
>                 <property name="type" value="ajp13"/>
>                 <property name="host" value="0.0.0.0"/>
>                 <property name="port" value="8009"/>
> -                <property name="min-threads" value="5"/>
> -                <property name="max-threads" value="100"/>
> -                <property name="max-idle-time" value="30000"/>
> -                <property name="buffer-size" value="8192"/>
>             </property>
>             -->
> +            <!-- request logs -->
>             <property name="request-log" value="request-log">
>                 <property name="filename" value="runtime/logs/yyyy_mm_dd.request.log"/>
>                 <property name="append" value="true"/>
> @@ -161,10 +106,4 @@ under the License.
>         </property>
>     </container>
> 
> -    <!-- load BeanShell remote telnet server -->
> -    <container name="beanshell-container" class="org.ofbiz.base.container.BeanShellContainer">
> -        <!-- the port below and port-1 will be opened by beanshell -->
> -        <property name="telnet-port" value="9990"/>
> -        <property name="app-name" value="OFBiz"/>
> -    </container>
> </ofbiz-containers>
> 
> Added: ofbiz/trunk/framework/jetty/lib/com.sun.el-2.2.0.v201108011116.jar
> URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/jetty/lib/com.sun.el-2.2.0.v201108011116.jar?rev=1303894&view=auto
> ==============================================================================
> Files ofbiz/trunk/framework/jetty/lib/com.sun.el-2.2.0.v201108011116.jar (added) and ofbiz/trunk/framework/jetty/lib/com.sun.el-2.2.0.v201108011116.jar Thu Mar 22 17:08:31 2012 differ
> 
> Added: ofbiz/trunk/framework/jetty/lib/javax.el-2.2.0.v201108011116.jar
> URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/jetty/lib/javax.el-2.2.0.v201108011116.jar?rev=1303894&view=auto
> ==============================================================================
> Files ofbiz/trunk/framework/jetty/lib/javax.el-2.2.0.v201108011116.jar (added) and ofbiz/trunk/framework/jetty/lib/javax.el-2.2.0.v201108011116.jar Thu Mar 22 17:08:31 2012 differ
> 
> Added: ofbiz/trunk/framework/jetty/lib/javax.servlet.jsp-2.2.0.v201112011158.jar
> URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/jetty/lib/javax.servlet.jsp-2.2.0.v201112011158.jar?rev=1303894&view=auto
> ==============================================================================
> Files ofbiz/trunk/framework/jetty/lib/javax.servlet.jsp-2.2.0.v201112011158.jar (added) and ofbiz/trunk/framework/jetty/lib/javax.servlet.jsp-2.2.0.v201112011158.jar Thu Mar 22 17:08:31 2012 differ
> 
> Added: ofbiz/trunk/framework/jetty/lib/javax.servlet.jsp.jstl-1.2.0.v201105211821.jar
> URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/jetty/lib/javax.servlet.jsp.jstl-1.2.0.v201105211821.jar?rev=1303894&view=auto
> ==============================================================================
> Files ofbiz/trunk/framework/jetty/lib/javax.servlet.jsp.jstl-1.2.0.v201105211821.jar (added) and ofbiz/trunk/framework/jetty/lib/javax.servlet.jsp.jstl-1.2.0.v201105211821.jar Thu Mar 22 17:08:31 2012 differ
> 
> Added: ofbiz/trunk/framework/jetty/lib/jetty-ajp-8.1.2.v20120308.jar
> URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/jetty/lib/jetty-ajp-8.1.2.v20120308.jar?rev=1303894&view=auto
> ==============================================================================
> Files ofbiz/trunk/framework/jetty/lib/jetty-ajp-8.1.2.v20120308.jar (added) and ofbiz/trunk/framework/jetty/lib/jetty-ajp-8.1.2.v20120308.jar Thu Mar 22 17:08:31 2012 differ
> 
> Added: ofbiz/trunk/framework/jetty/lib/jetty-continuation-8.1.2.v20120308.jar
> URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/jetty/lib/jetty-continuation-8.1.2.v20120308.jar?rev=1303894&view=auto
> ==============================================================================
> Files ofbiz/trunk/framework/jetty/lib/jetty-continuation-8.1.2.v20120308.jar (added) and ofbiz/trunk/framework/jetty/lib/jetty-continuation-8.1.2.v20120308.jar Thu Mar 22 17:08:31 2012 differ
> 
> Added: ofbiz/trunk/framework/jetty/lib/jetty-http-8.1.2.v20120308.jar
> URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/jetty/lib/jetty-http-8.1.2.v20120308.jar?rev=1303894&view=auto
> ==============================================================================
> Files ofbiz/trunk/framework/jetty/lib/jetty-http-8.1.2.v20120308.jar (added) and ofbiz/trunk/framework/jetty/lib/jetty-http-8.1.2.v20120308.jar Thu Mar 22 17:08:31 2012 differ
> 
> Added: ofbiz/trunk/framework/jetty/lib/jetty-io-8.1.2.v20120308.jar
> URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/jetty/lib/jetty-io-8.1.2.v20120308.jar?rev=1303894&view=auto
> ==============================================================================
> Files ofbiz/trunk/framework/jetty/lib/jetty-io-8.1.2.v20120308.jar (added) and ofbiz/trunk/framework/jetty/lib/jetty-io-8.1.2.v20120308.jar Thu Mar 22 17:08:31 2012 differ
> 
> Added: ofbiz/trunk/framework/jetty/lib/jetty-security-8.1.2.v20120308.jar
> URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/jetty/lib/jetty-security-8.1.2.v20120308.jar?rev=1303894&view=auto
> ==============================================================================
> Files ofbiz/trunk/framework/jetty/lib/jetty-security-8.1.2.v20120308.jar (added) and ofbiz/trunk/framework/jetty/lib/jetty-security-8.1.2.v20120308.jar Thu Mar 22 17:08:31 2012 differ
> 
> Added: ofbiz/trunk/framework/jetty/lib/jetty-server-8.1.2.v20120308.jar
> URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/jetty/lib/jetty-server-8.1.2.v20120308.jar?rev=1303894&view=auto
> ==============================================================================
> Files ofbiz/trunk/framework/jetty/lib/jetty-server-8.1.2.v20120308.jar (added) and ofbiz/trunk/framework/jetty/lib/jetty-server-8.1.2.v20120308.jar Thu Mar 22 17:08:31 2012 differ
> 
> Added: ofbiz/trunk/framework/jetty/lib/jetty-servlet-8.1.2.v20120308.jar
> URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/jetty/lib/jetty-servlet-8.1.2.v20120308.jar?rev=1303894&view=auto
> ==============================================================================
> Files ofbiz/trunk/framework/jetty/lib/jetty-servlet-8.1.2.v20120308.jar (added) and ofbiz/trunk/framework/jetty/lib/jetty-servlet-8.1.2.v20120308.jar Thu Mar 22 17:08:31 2012 differ
> 
> Added: ofbiz/trunk/framework/jetty/lib/jetty-util-8.1.2.v20120308.jar
> URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/jetty/lib/jetty-util-8.1.2.v20120308.jar?rev=1303894&view=auto
> ==============================================================================
> Files ofbiz/trunk/framework/jetty/lib/jetty-util-8.1.2.v20120308.jar (added) and ofbiz/trunk/framework/jetty/lib/jetty-util-8.1.2.v20120308.jar Thu Mar 22 17:08:31 2012 differ
> 
> Added: ofbiz/trunk/framework/jetty/lib/jetty-webapp-8.1.2.v20120308.jar
> URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/jetty/lib/jetty-webapp-8.1.2.v20120308.jar?rev=1303894&view=auto
> ==============================================================================
> Files ofbiz/trunk/framework/jetty/lib/jetty-webapp-8.1.2.v20120308.jar (added) and ofbiz/trunk/framework/jetty/lib/jetty-webapp-8.1.2.v20120308.jar Thu Mar 22 17:08:31 2012 differ
> 
> Added: ofbiz/trunk/framework/jetty/lib/jetty-xml-8.1.2.v20120308.jar
> URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/jetty/lib/jetty-xml-8.1.2.v20120308.jar?rev=1303894&view=auto
> ==============================================================================
> Files ofbiz/trunk/framework/jetty/lib/jetty-xml-8.1.2.v20120308.jar (added) and ofbiz/trunk/framework/jetty/lib/jetty-xml-8.1.2.v20120308.jar Thu Mar 22 17:08:31 2012 differ
> 
> Added: ofbiz/trunk/framework/jetty/lib/org.apache.jasper.glassfish-2.2.2.v201112011158.jar
> URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/jetty/lib/org.apache.jasper.glassfish-2.2.2.v201112011158.jar?rev=1303894&view=auto
> ==============================================================================
> Files ofbiz/trunk/framework/jetty/lib/org.apache.jasper.glassfish-2.2.2.v201112011158.jar (added) and ofbiz/trunk/framework/jetty/lib/org.apache.jasper.glassfish-2.2.2.v201112011158.jar Thu Mar 22 17:08:31 2012 differ
> 
> Added: ofbiz/trunk/framework/jetty/lib/org.apache.taglibs.standard.glassfish-1.2.0.v201112081803.jar
> URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/jetty/lib/org.apache.taglibs.standard.glassfish-1.2.0.v201112081803.jar?rev=1303894&view=auto
> ==============================================================================
> Files ofbiz/trunk/framework/jetty/lib/org.apache.taglibs.standard.glassfish-1.2.0.v201112081803.jar (added) and ofbiz/trunk/framework/jetty/lib/org.apache.taglibs.standard.glassfish-1.2.0.v201112081803.jar Thu Mar 22 17:08:31 2012 differ
> 
> Added: ofbiz/trunk/framework/jetty/lib/org.eclipse.jdt.core-3.7.1.jar
> URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/jetty/lib/org.eclipse.jdt.core-3.7.1.jar?rev=1303894&view=auto
> ==============================================================================
> Files ofbiz/trunk/framework/jetty/lib/org.eclipse.jdt.core-3.7.1.jar (added) and ofbiz/trunk/framework/jetty/lib/org.eclipse.jdt.core-3.7.1.jar Thu Mar 22 17:08:31 2012 differ
> 
> Modified: ofbiz/trunk/framework/jetty/src/org/ofbiz/jetty/container/JettyContainer.java
> URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/jetty/src/org/ofbiz/jetty/container/JettyContainer.java?rev=1303894&r1=1303893&r2=1303894&view=diff
> ==============================================================================
> --- ofbiz/trunk/framework/jetty/src/org/ofbiz/jetty/container/JettyContainer.java (original)
> +++ ofbiz/trunk/framework/jetty/src/org/ofbiz/jetty/container/JettyContainer.java Thu Mar 22 17:08:31 2012
> @@ -18,24 +18,10 @@
>  *******************************************************************************/
> package org.ofbiz.jetty.container;
> 
> -import java.util.Collection;
> import java.util.HashMap;
> import java.util.List;
> import java.util.Map;
> 
> -import org.mortbay.jetty.AbstractConnector;
> -import org.mortbay.jetty.NCSARequestLog;
> -import org.mortbay.jetty.Server;
> -import org.mortbay.jetty.ajp.Ajp13SocketConnector;
> -import org.mortbay.jetty.bio.SocketConnector;
> -import org.mortbay.jetty.handler.RequestLogHandler;
> -import org.mortbay.jetty.nio.SelectChannelConnector;
> -import org.mortbay.jetty.security.SslSelectChannelConnector;
> -import org.mortbay.jetty.security.SslSocketConnector;
> -import org.mortbay.jetty.servlet.HashSessionManager;
> -import org.mortbay.jetty.servlet.SessionHandler;
> -import org.mortbay.jetty.webapp.WebAppContext;
> -import org.mortbay.thread.BoundedThreadPool;
> import org.ofbiz.base.component.ComponentConfig;
> import org.ofbiz.base.container.Container;
> import org.ofbiz.base.container.ContainerConfig;
> @@ -44,363 +30,322 @@ import org.ofbiz.base.util.Debug;
> import org.ofbiz.base.util.SSLUtil;
> import org.ofbiz.base.util.UtilValidate;
> 
> +import org.eclipse.jetty.ajp.Ajp13SocketConnector;
> +import org.eclipse.jetty.server.Connector;
> +import org.eclipse.jetty.server.NCSARequestLog;
> +import org.eclipse.jetty.server.Server;
> +import org.eclipse.jetty.server.bio.SocketConnector;
> +import org.eclipse.jetty.server.handler.HandlerCollection;
> +import org.eclipse.jetty.server.handler.RequestLogHandler;
> +import org.eclipse.jetty.server.nio.SelectChannelConnector;
> +import org.eclipse.jetty.server.session.HashSessionManager;
> +import org.eclipse.jetty.server.session.SessionHandler;
> +import org.eclipse.jetty.server.ssl.SslConnector;
> +import org.eclipse.jetty.server.ssl.SslSelectChannelConnector;
> +import org.eclipse.jetty.server.ssl.SslSocketConnector;
> +import org.eclipse.jetty.util.ssl.SslContextFactory;
> +import org.eclipse.jetty.util.thread.QueuedThreadPool;
> +import org.eclipse.jetty.util.thread.ThreadPool;
> +import org.eclipse.jetty.webapp.WebAppContext;
> +
> 
> /**
> - * JettyContainer - Container implementation for Jetty 6
> - *
> + * JettyContainer - Container implementation for Jetty
>  */
> public class JettyContainer implements Container {
> 
>     public static final String module = JettyContainer.class.getName();
> 
> -    protected String configFile = null;
>     private Map<String, Server> servers = new HashMap<String, Server>();
> 
>     /**
> -     * @see org.ofbiz.base.container.Container#init(java.lang.String[],java.lang.String)
> +     * @see org.ofbiz.base.container.Container#init(java.lang.String[], java.lang.String)
>      */
> -    public void init(String[] args, String configFile) {
> -        this.configFile = configFile;
> -    }
> -
> -    private void initJetty() throws ContainerException {
> +    public void init(String[] args, String configFile) throws ContainerException {
> 
>         // configure JSSE properties
>         SSLUtil.loadJsseProperties();
> 
> -        // get the container
> -        ContainerConfig.Container jc = ContainerConfig.getContainer("jetty-container", configFile);
> +        // get the jetty container config
> +        ContainerConfig.Container jettyContainerConfig = ContainerConfig.getContainer("jetty-container", configFile);
> 
>         // create the servers
> -        for (ContainerConfig.Container.Property property : jc.properties.values()) {
> -            servers.put(property.name, createServer(property));
> +        for (ContainerConfig.Container.Property serverConfig : jettyContainerConfig.getPropertiesWithValue("server")) {
> +            servers.put(serverConfig.name, createServer(serverConfig));
>         }
> 
> -        // load the applications
> -        Collection<ComponentConfig> componentConfigs = ComponentConfig.getAllComponents();
> -        if (componentConfigs != null) {
> +        // create the webapp contexts
> +        for (ComponentConfig componentConfig : ComponentConfig.getAllComponents()) {
> 
> -            for (Object componentConfig : componentConfigs) {
> +            for (ComponentConfig.WebappInfo webappInfo : componentConfig.getWebappInfos()) {
> 
> -                ComponentConfig component = (ComponentConfig) componentConfig;
> +                Server server = servers.get(webappInfo.server);
> +                if (server == null) {
> 
> -                for (ComponentConfig.WebappInfo webappInfo : component.getWebappInfos()) {
> +                    Debug.logError("Server with name [" + webappInfo.server + "] not found; not mounting [" + webappInfo.name + "]", module);
> 
> -                    List<String> virtualHosts = webappInfo.getVirtualHosts();
> -                    Map<String, String> initParameters = webappInfo.getInitParameters();
> +                } else {
> 
> -                    Server server = servers.get(webappInfo.server);
> +                    // set the root location (make sure we set the paths correctly)
> +                    String location = componentConfig.getRootLocation() + webappInfo.location;
> +                    location = location.replace('\\', '/');
> +                    if (location.endsWith("/")) {
> +                        location = location.substring(0, location.lastIndexOf("/"));
> +                    }
> 
> -                    if (server == null) {
> -                        Debug.logWarning("Server with name [" + webappInfo.server + "] not found; not mounting [" + webappInfo.name + "]", module);
> -                    } else {
> -
> -                        // set the root location (make sure we set the paths correctly)
> -                        String location = component.getRootLocation() + webappInfo.location;
> -                        location = location.replace('\\', '/');
> -                        if (location.endsWith("/")) {
> -                            location = location.substring(0, location.lastIndexOf("/"));
> -                        }
> +                    String mountPoint = webappInfo.mountPoint;
> +                    if (mountPoint.endsWith("/*")) {
> +                        mountPoint = mountPoint.substring(0, mountPoint.lastIndexOf("/"));
> +                    }
> 
> -                        // load the application
> -                        String mountPoint = webappInfo.mountPoint;
> -                        if (mountPoint.endsWith("/*")) {
> -                            mountPoint = mountPoint.substring(0, mountPoint.lastIndexOf("/"));
> -                        }
> +                    WebAppContext context = new WebAppContext(location, mountPoint);
> +                    context.setAttribute("_serverId", webappInfo.server);
> +                    context.setLogUrlOnStart(true);
> +
> +                    // set the session manager
> +                    HashSessionManager sm = new HashSessionManager();
> +                    context.setSessionHandler(new SessionHandler(sm));
> 
> -                        WebAppContext context = new WebAppContext(location, mountPoint);
> -                        context.setAttribute("_serverId", webappInfo.server);
> -                        context.setLogUrlOnStart(true);
> -
> -                         // set the session manager
> -                        HashSessionManager sm = new HashSessionManager();
> -                        context.setSessionHandler(new SessionHandler(sm));
> -
> -                        // set the virtual hosts
> -                        if (UtilValidate.isNotEmpty(virtualHosts)) {
> -                            context.setVirtualHosts(virtualHosts.toArray(new String[virtualHosts.size()]));
> -                        }
> +                    // set the virtual hosts
> +                    List<String> virtualHosts = webappInfo.getVirtualHosts();
> +                    if (UtilValidate.isNotEmpty(virtualHosts)) {
> +                        context.setVirtualHosts(virtualHosts.toArray(new String[virtualHosts.size()]));
> +                    }
> 
> -                        // set the init parameters
> -                        if (UtilValidate.isNotEmpty(initParameters)) {
> -                            context.setInitParams(initParameters);
> +                    // set the init parameters
> +                    Map<String, String> initParameters = webappInfo.getInitParameters();
> +                    if (UtilValidate.isNotEmpty(initParameters)) {
> +                        for (Map.Entry<String, String> e : initParameters.entrySet()) {
> +                            context.setInitParameter(e.getKey(), e.getValue());
>                         }
> -
> -                        server.addHandler(context);
>                     }
> +
> +                    ((HandlerCollection) server.getHandler()).addHandler(context);
>                 }
>             }
>         }
>     }
> 
> -    private Server createServer(ContainerConfig.Container.Property serverConfig) throws ContainerException {
> +    private Server createServer(ContainerConfig.Container.Property serverConfig) {
> 
>         Server server = new Server();
> +        server.setHandler(new HandlerCollection());
> 
> -        // configure the connectors / loggers
> -        for (ContainerConfig.Container.Property props : serverConfig.properties.values()) {
> -
> -            if ("send-server-version".equals(props.name)) {
> -                if ("false".equalsIgnoreCase(props.value)) {
> -                    server.setSendServerVersion(false);
> -                }
> -            } else if ("connector".equals(props.value)) {
> -
> -                if ("http".equals(props.getProperty("type").value)) {
> -
> -                    AbstractConnector connector = new SocketConnector();
> -                    setConnectorOptions(connector, props);
> -                    server.addConnector(connector);
> -
> -                } else if ("https".equals(props.getProperty("type").value)) {
> -
> -                    SslSocketConnector connector = new SslSocketConnector();
> -                    setConnectorOptions(connector, props);
> -
> -                    if (props.getProperty("keystore") != null) {
> -                        connector.setKeystore(props.getProperty("keystore").value);
> -                    }
> -                    if (props.getProperty("password") != null) {
> -                        connector.setPassword(props.getProperty("password").value);
> -                    }
> -                    if (props.getProperty("key-password") != null) {
> -                        connector.setKeyPassword(props.getProperty("key-password").value);
> -                    }
> -                    if (props.getProperty("client-auth") != null) {
> -                        if ("need".equals(props.getProperty("client-auth").value)) {
> -                            connector.setNeedClientAuth(true);
> -                        } else if ("want".equals(props.getProperty("client-auth").value)) {
> -                            connector.setWantClientAuth(true);
> -                        }
> -                    }
> -
> -                    server.addConnector(connector);
> -
> -                } else if ("nio-http".equals(props.getProperty("type").value)) {
> -
> -                    AbstractConnector connector = new SelectChannelConnector();
> -                    setConnectorOptions(connector, props);
> -                    server.addConnector(connector);
> -
> -                } else if ("nio-https".equals(props.getProperty("type").value)) {
> -
> -                    SslSelectChannelConnector connector = new SslSelectChannelConnector();
> -                    setConnectorOptions(connector, props);
> -
> -                    if (props.getProperty("keystore") != null) {
> -                        connector.setKeystore(props.getProperty("keystore").value);
> -                    }
> -                    if (props.getProperty("password") != null) {
> -                        connector.setPassword(props.getProperty("password").value);
> -                    }
> -                    if (props.getProperty("key-password") != null) {
> -                        connector.setKeyPassword(props.getProperty("key-password").value);
> -                    }
> -                    if (props.getProperty("need-client-auth") != null) {
> -                        boolean needClientAuth = "true".equalsIgnoreCase(props.getProperty("need-client-auth").value);
> -                        connector.setNeedClientAuth(needClientAuth);
> -                    }
> -
> -                    server.addConnector(connector);
> -
> -                } else if ("ajp13".equals(props.getProperty("type").value)) {
> +        // send server version?
> +        if (UtilValidate.isNotEmpty(serverConfig.getProperty("send-server-version"))) {
> +            String sendServerVersionPropertyValue = serverConfig.getProperty("send-server-version").value;
> +            try {
> +                server.setSendServerVersion(Boolean.parseBoolean(sendServerVersionPropertyValue));
> +            } catch (NumberFormatException e) {
> +                Debug.logError(e, "invalid value for send-server-version: " + sendServerVersionPropertyValue, module);
> +            }
> +        }
> 
> -                    AbstractConnector connector = new Ajp13SocketConnector();
> -                    setConnectorOptions(connector, props);
> -                    server.addConnector(connector);
> -                }
> +        // thread pool
> +        server.setThreadPool(createThreadPool(serverConfig));
> 
> -            } else if ("request-log".equals(props.value)) {
> +        // connectors
> +        for (ContainerConfig.Container.Property connectorConfig : serverConfig.getPropertiesWithValue("connector")) {
> 
> -                RequestLogHandler requestLogHandler = new RequestLogHandler();
> +            Connector connector = null;
> 
> -                NCSARequestLog requestLog = new NCSARequestLog();
> +            String connectorType = connectorConfig.getProperty("type").value;
> 
> -                if (props.getProperty("filename") != null) {
> -                    requestLog.setFilename(props.getProperty("filename").value);
> -                }
> +            if ("http".equals(connectorType)) {
> +                connector = new SocketConnector();
> +            } else if ("https".equals(connectorType)) {
> +                connector = new SslSocketConnector();
> +            } else if ("nio-http".equals(connectorType)) {
> +                connector = new SelectChannelConnector();
> +            } else if ("nio-https".equals(connectorType)) {
> +                connector = new SslSelectChannelConnector();
> +            } else if ("ajp13".equals(connectorType)) {
> +                connector = new Ajp13SocketConnector();
> +            }
> 
> -                if (props.getProperty("append") != null) {
> -                    requestLog.setAppend("true".equalsIgnoreCase(props.getProperty("append").value));
> -                }
> +            if (connector != null) {
> +                setConnectorOptions(connector, connectorConfig);
> +                server.addConnector(connector);
> +            }
> +        }
> 
> -                if (props.getProperty("extended") != null) {
> -                    requestLog.setExtended("true".equalsIgnoreCase(props.getProperty("extended").value));
> -                }
> +        // request logs
> +        for (ContainerConfig.Container.Property props : serverConfig.getPropertiesWithValue("request-log")) {
> 
> -                if (props.getProperty("timezone") != null) {
> -                    requestLog.setLogTimeZone(props.getProperty("timezone").value);
> -                }
> +            NCSARequestLog requestLog = new NCSARequestLog();
> 
> -                if (props.getProperty("date-format") != null) {
> -                    requestLog.setLogDateFormat(props.getProperty("date-format").value);
> +            if (UtilValidate.isNotEmpty(props.getProperty("filename"))) {
> +                requestLog.setFilename(props.getProperty("filename").value);
> +            }
> +            if (UtilValidate.isNotEmpty(props.getProperty("append"))) {
> +                requestLog.setAppend("true".equalsIgnoreCase(props.getProperty("append").value));
> +            }
> +            if (UtilValidate.isNotEmpty(props.getProperty("extended"))) {
> +                requestLog.setExtended("true".equalsIgnoreCase(props.getProperty("extended").value));
> +            }
> +            if (UtilValidate.isNotEmpty(props.getProperty("log-dispatch"))) {
> +                requestLog.setLogDispatch("true".equalsIgnoreCase(props.getProperty("log-dispatch").value));
> +            }
> +            if (UtilValidate.isNotEmpty(props.getProperty("log-latency"))) {
> +                requestLog.setLogLatency("true".equalsIgnoreCase(props.getProperty("log-latency").value));
> +            }
> +            if (UtilValidate.isNotEmpty(props.getProperty("log-server"))) {
> +                requestLog.setLogServer("true".equalsIgnoreCase(props.getProperty("log-server").value));
> +            }
> +            if (UtilValidate.isNotEmpty(props.getProperty("prefer-proxied-for-address"))) {
> +                requestLog.setPreferProxiedForAddress("true".equalsIgnoreCase(props.getProperty("prefer-proxied-for-address").value));
> +            }
> +            if (UtilValidate.isNotEmpty(props.getProperty("timezone"))) {
> +                requestLog.setLogTimeZone(props.getProperty("timezone").value);
> +            }
> +            if (UtilValidate.isNotEmpty(props.getProperty("date-format"))) {
> +                requestLog.setLogDateFormat(props.getProperty("date-format").value);
> +            }
> +            if (UtilValidate.isNotEmpty(props.getProperty("retain-days"))) {
> +                String retainDaysPropertyValue = props.getProperty("retain-days").value;
> +                try {
> +                    requestLog.setRetainDays(Integer.parseInt(retainDaysPropertyValue));
> +                } catch (NumberFormatException e) {
> +                    Debug.logError(e, "invalid value for retain-days: " + retainDaysPropertyValue, module);
>                 }
> +            }
> 
> -                if (props.getProperty("retain-days") != null) {
> -                    int days = 90;
> -                    try {
> -                        days = Integer.parseInt(props.getProperty("retain-days").value);
> -                    } catch (NumberFormatException e) {
> -                        days = 90;
> -                    }
> -                    requestLog.setRetainDays(days);
> -                }
> +            RequestLogHandler requestLogHandler = new RequestLogHandler();
> +            requestLogHandler.setRequestLog(requestLog);
> 
> -                requestLogHandler.setRequestLog(requestLog);
> -                server.addHandler(requestLogHandler);
> -            }
> +            ((HandlerCollection) server.getHandler()).addHandler(requestLogHandler);
>         }
> 
>         return server;
>     }
> 
> -    private void setConnectorOptions(AbstractConnector connector, ContainerConfig.Container.Property props) throws ContainerException {
> +    private ThreadPool createThreadPool(ContainerConfig.Container.Property serverConfig) {
> 
> -        String systemHost = null;
> -        if ("default".equals(props.getProperty("type").value)) {
> -            systemHost = System.getProperty(props.name + ".host");
> -        }
> -        if (props.getProperty("host") != null && systemHost == null) {
> -            connector.setHost(props.getProperty("host").value);
> -        } else {
> -            String host = "0.0.0.0";
> -            if (systemHost != null) {
> -                host = systemHost;
> -            }
> -            connector.setHost(host);
> -        }
> +        QueuedThreadPool threadPool = new QueuedThreadPool();
> 
> -        String systemPort = null;
> -        if ("default".equals(props.getProperty("type").value)) {
> -            systemPort = System.getProperty(props.name + ".port");
> -        }
> -        if (props.getProperty("port") != null && systemPort == null) {
> -            int value = 8080;
> +        if (UtilValidate.isNotEmpty(serverConfig.getProperty("min-threads"))) {
> +            String minThreadsPropertyValue = serverConfig.getProperty("min-threads").value;
>             try {
> -                value = Integer.parseInt(props.getProperty("port").value);
> +                threadPool.setMinThreads(Integer.parseInt(minThreadsPropertyValue));
>             } catch (NumberFormatException e) {
> -                value = 8080;
> -            }
> -            if (value == 0) value = 8080;
> -
> -            connector.setPort(value);
> -        } else {
> -            int port = 8080;
> -            if (systemPort != null) {
> -                try {
> -                    port = Integer.parseInt(systemPort);
> -                } catch (NumberFormatException e) {
> -                    port = 8080;
> -                }
> +                Debug.logError(e, "invalid value for min-threads: " + minThreadsPropertyValue, module);
>             }
> -            connector.setPort(port);
>         }
> -
> -        if (props.getProperty("buffer-size") != null) {
> -            int value = 0;
> +        if (UtilValidate.isNotEmpty(serverConfig.getProperty("max-threads"))) {
> +            String maxThreadsPropertyValue = serverConfig.getProperty("max-threads").value;
>             try {
> -                value = Integer.parseInt(props.getProperty("buffer-size").value);
> +                threadPool.setMaxThreads(Integer.parseInt(maxThreadsPropertyValue));
>             } catch (NumberFormatException e) {
> -                value = 0;
> -            }
> -            if (value > 0) {
> -                connector.setResponseBufferSize(value);
> +                Debug.logError(e, "invalid value for max-threads: " + maxThreadsPropertyValue, module);
>             }
>         }
> -
> -        if (props.getProperty("linger-time") != null) {
> -            int value = 0;
> +        if (UtilValidate.isNotEmpty(serverConfig.getProperty("max-idle-time-ms"))) {
> +            String maxIdleTimeMsPropertyValue = serverConfig.getProperty("max-idle-time-ms").value;
>             try {
> -                value = Integer.parseInt(props.getProperty("linger-time").value);
> +                threadPool.setMaxIdleTimeMs(Integer.parseInt(maxIdleTimeMsPropertyValue));
>             } catch (NumberFormatException e) {
> -                value = 0;
> -            }
> -            if (value > 0) {
> -                connector.setSoLingerTime(value);
> +                Debug.logError(e, "invalid value for max-idle-time-ms: " + maxIdleTimeMsPropertyValue, module);
>             }
>         }
> -
> -        if (props.getProperty("low-resource-max-idle-time") != null) {
> -            int value = 0;
> +        if (UtilValidate.isNotEmpty(serverConfig.getProperty("max-stop-time-ms"))) {
> +            String maxStopTimeMsPropertyValue = serverConfig.getProperty("max-stop-time-ms").value;
>             try {
> -                value = Integer.parseInt(props.getProperty("low-resource-max-idle-time").value);
> +                threadPool.setMaxStopTimeMs(Integer.parseInt(maxStopTimeMsPropertyValue));
>             } catch (NumberFormatException e) {
> -                value = 0;
> -            }
> -            if (value > 0) {
> -                connector.setLowResourceMaxIdleTime(value);
> +                Debug.logError(e, "invalid value for max-stop-time-ms: " + maxStopTimeMsPropertyValue, module);
>             }
>         }
> 
> +        return threadPool;
> +    }
> 
> -        BoundedThreadPool threadPool = new BoundedThreadPool();
> +    private void setConnectorOptions(Connector connector, ContainerConfig.Container.Property connectorConfig) {
> 
> -        if (props.getProperty("min-threads") != null) {
> -            int value = 0;
> +        if (UtilValidate.isNotEmpty(connectorConfig.getProperty("host"))) {
> +            connector.setHost(connectorConfig.getProperty("host").value);
> +        }
> +        if (UtilValidate.isNotEmpty(connectorConfig.getProperty("port"))) {
> +            String portPropertyValue = connectorConfig.getProperty("port").value;
>             try {
> -                value = Integer.parseInt(props.getProperty("min-threads").value);
> +                connector.setPort(Integer.parseInt(portPropertyValue));
>             } catch (NumberFormatException e) {
> -                value = 0;
> -            }
> -            if (value > 0) {
> -                threadPool.setMinThreads(value);
> +                Debug.logError(e, "invalid value for port: " + portPropertyValue, module);
>             }
>         }
> -
> -        if (props.getProperty("max-threads") != null) {
> -            int value = 0;
> +        if (UtilValidate.isNotEmpty(connectorConfig.getProperty("request-buffer-size"))) {
> +            String requestBufferSizePropertyValue = connectorConfig.getProperty("request-buffer-size").value;
>             try {
> -                value = Integer.parseInt(props.getProperty("max-threads").value);
> +                connector.setRequestBufferSize(Integer.parseInt(requestBufferSizePropertyValue));
>             } catch (NumberFormatException e) {
> -                value = 0;
> -            }
> -            if (value > 0) {
> -                threadPool.setMaxThreads(value);
> +                Debug.logError(e, "invalid value for request-buffer-size: " + requestBufferSizePropertyValue, module);
>             }
>         }
> -
> -        if (props.getProperty("max-idle-time") != null) {
> -            int value = 0;
> +        if (UtilValidate.isNotEmpty(connectorConfig.getProperty("request-header-size"))) {
> +            String requestHeaderSizePropertyValue = connectorConfig.getProperty("request-header-size").value;
>             try {
> -                value = Integer.parseInt(props.getProperty("max-idle-time").value);
> +                connector.setRequestHeaderSize(Integer.parseInt(requestHeaderSizePropertyValue));
>             } catch (NumberFormatException e) {
> -                value = 0;
> +                Debug.logError(e, "invalid value for request-header-size: " + requestHeaderSizePropertyValue, module);
>             }
> -            if (value > 0) {
> -                threadPool.setMaxIdleTimeMs(value);
> +        }
> +        if (UtilValidate.isNotEmpty(connectorConfig.getProperty("response-buffer-size"))) {
> +            String responseBufferSizePropertyValue = connectorConfig.getProperty("response-buffer-size").value;
> +            try {
> +                connector.setResponseBufferSize(Integer.parseInt(responseBufferSizePropertyValue));
> +            } catch (NumberFormatException e) {
> +                Debug.logError(e, "invalid value for response-buffer-size: " + responseBufferSizePropertyValue, module);
>             }
>         }
> -
> -        if (props.getProperty("low-threads") != null) {
> -            int value = 0;
> +        if (UtilValidate.isNotEmpty(connectorConfig.getProperty("response-header-size"))) {
> +            String responseHeaderSizePropertyValue = connectorConfig.getProperty("response-header-size").value;
>             try {
> -                value = Integer.parseInt(props.getProperty("low-threads").value);
> +                connector.setResponseHeaderSize(Integer.parseInt(responseHeaderSizePropertyValue));
>             } catch (NumberFormatException e) {
> -                value = 0;
> +                Debug.logError(e, "invalid value for response-header-size: " + responseHeaderSizePropertyValue, module);
>             }
> -            if (value > 0) {
> -                threadPool.setLowThreads(value);
> +        }
> +        if (UtilValidate.isNotEmpty(connectorConfig.getProperty("low-resource-max-idle-time"))) {
> +            String lowResourceMaxIdleTimePropertyValue = connectorConfig.getProperty("low-resource-max-idle-time").value;
> +            try {
> +                connector.setLowResourceMaxIdleTime(Integer.parseInt(lowResourceMaxIdleTimePropertyValue));
> +            } catch (NumberFormatException e) {
> +                Debug.logError(e, "invalid value for low-resource-max-idle-time: " + lowResourceMaxIdleTimePropertyValue, module);
>             }
>         }
> 
> -        connector.setThreadPool(threadPool);
> +        // SSL options
> +        if (connector instanceof SslConnector) {
> +
> +            SslContextFactory cf = ((SslConnector) connector).getSslContextFactory();
> 
> +            if (UtilValidate.isNotEmpty(connectorConfig.getProperty("keystore"))) {
> +                cf.setKeyStorePath(connectorConfig.getProperty("keystore").value);
> +            }
> +            if (connectorConfig.getProperty("password") != null) {
> +                cf.setKeyStorePassword(connectorConfig.getProperty("password").value);
> +            }
> +            if (connectorConfig.getProperty("key-password") != null) {
> +                cf.setKeyManagerPassword(connectorConfig.getProperty("key-password").value);
> +            }
> +            if (UtilValidate.isNotEmpty(connectorConfig.getProperty("client-auth"))) {
> +                if ("need".equals(connectorConfig.getProperty("client-auth").value)) {
> +                    cf.setNeedClientAuth(true);
> +                } else if ("want".equals(connectorConfig.getProperty("client-auth").value)) {
> +                    cf.setWantClientAuth(true);
> +                }
> +            }
> +        }
>     }
> 
>     /**
>      * @see org.ofbiz.base.container.Container#start()
>      */
>     public boolean start() throws ContainerException {
> -        // start the server(s)
> -        this.initJetty();
> -        if (servers != null) {
> -            for (Server server : servers.values()) {
> -                try {
> -                    server.start();
> -                } catch (Exception e) {
> -                    Debug.logError(e, "Jetty Server Exception", module);
> -                    throw new ContainerException(e);
> -                }
> +        for (Server server : servers.values()) {
> +            try {
> +                server.start();
> +            } catch (Exception e) {
> +                throw new ContainerException(e);
>             }
>         }
>         return true;
> @@ -410,14 +355,13 @@ public class JettyContainer implements C
>      * @see org.ofbiz.base.container.Container#stop()
>      */
>     public void stop() throws ContainerException {
> -        if (servers != null) {
> -            for (Server server : servers.values()) {
> -                try {
> -                    server.stop();
> -                } catch (Exception e) {
> -                    Debug.logWarning(e, module);
> -                }
> +        for (Server server : servers.values()) {
> +            try {
> +                server.stop();
> +            } catch (Exception e) {
> +                throw new ContainerException(e);
>             }
>         }
>     }
> +
> }
> 
>