You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by rm...@apache.org on 2016/03/20 15:15:41 UTC

tomee git commit: TOMEE-1746 TOMEE-1745 TOMEE-1744 tomeexml adn serverxml Main options for tomee embedded, allowing to configure tomee embedded connector through properties and ensuring it uses tomcat default connector type (nio)

Repository: tomee
Updated Branches:
  refs/heads/master 01ba71b2e -> c3a5f3965


TOMEE-1746 TOMEE-1745 TOMEE-1744 tomeexml adn serverxml Main options for tomee embedded, allowing to configure tomee embedded connector through properties and ensuring it uses tomcat default connector type (nio)


Project: http://git-wip-us.apache.org/repos/asf/tomee/repo
Commit: http://git-wip-us.apache.org/repos/asf/tomee/commit/c3a5f396
Tree: http://git-wip-us.apache.org/repos/asf/tomee/tree/c3a5f396
Diff: http://git-wip-us.apache.org/repos/asf/tomee/diff/c3a5f396

Branch: refs/heads/master
Commit: c3a5f396502029342909568305dbbe3ab81379c9
Parents: 01ba71b
Author: Romain manni-Bucau <rm...@gmail.com>
Authored: Sun Mar 20 15:15:15 2016 +0100
Committer: Romain manni-Bucau <rm...@gmail.com>
Committed: Sun Mar 20 15:15:15 2016 +0100

----------------------------------------------------------------------
 .../org/apache/tomee/embedded/Container.java    | 66 +++++++++++++++-----
 .../java/org/apache/tomee/embedded/Main.java    | 22 +++++++
 .../tomee/embedded/ConnectorConfigTest.java     | 58 +++++++++++++++++
 3 files changed, 130 insertions(+), 16 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tomee/blob/c3a5f396/tomee/tomee-embedded/src/main/java/org/apache/tomee/embedded/Container.java
----------------------------------------------------------------------
diff --git a/tomee/tomee-embedded/src/main/java/org/apache/tomee/embedded/Container.java b/tomee/tomee-embedded/src/main/java/org/apache/tomee/embedded/Container.java
index 0f09858..c650a7c 100644
--- a/tomee/tomee-embedded/src/main/java/org/apache/tomee/embedded/Container.java
+++ b/tomee/tomee-embedded/src/main/java/org/apache/tomee/embedded/Container.java
@@ -5,14 +5,14 @@
  * The ASF licenses this file to You under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing, software
- *  distributed under the License is distributed on an "AS IS" BASIS,
- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
+ * <p>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p>
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
  */
 package org.apache.tomee.embedded;
 
@@ -30,7 +30,6 @@ import org.apache.catalina.startup.Catalina;
 import org.apache.catalina.startup.CatalinaProperties;
 import org.apache.catalina.startup.Tomcat;
 import org.apache.commons.lang3.text.StrSubstitutor;
-import org.apache.coyote.http11.Http11Protocol;
 import org.apache.openejb.AppContext;
 import org.apache.openejb.BeanContext;
 import org.apache.openejb.Injector;
@@ -83,8 +82,11 @@ import org.apache.velocity.runtime.log.NullLogChute;
 import org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader;
 import org.apache.xbean.finder.UrlSet;
 import org.apache.xbean.finder.filter.Filters;
+import org.apache.xbean.recipe.ObjectRecipe;
 import org.codehaus.swizzle.stream.ReplaceStringsInputStream;
 
+import javax.naming.Context;
+import javax.naming.NamingException;
 import java.io.File;
 import java.io.FileOutputStream;
 import java.io.FileWriter;
@@ -102,8 +104,6 @@ import java.util.Map;
 import java.util.Properties;
 import java.util.Set;
 import java.util.concurrent.CountDownLatch;
-import javax.naming.Context;
-import javax.naming.NamingException;
 
 import static java.util.Arrays.asList;
 
@@ -479,16 +479,19 @@ public class Container implements AutoCloseable {
         }
 
         if (tomcat.getRawConnector() == null && !configuration.isSkipHttp()) {
-            final Connector connector = new Connector(Http11Protocol.class.getName());
+            final Connector connector = createConnector();
             connector.setPort(configuration.getHttpPort());
-            connector.setAttribute("connectionTimeout", "3000");
+            if (connector.getAttribute("connectionTimeout") == null) {
+                connector.setAttribute("connectionTimeout", "3000");
+            }
+
             tomcat.getService().addConnector(connector);
             tomcat.setConnector(connector);
         }
 
         // create https connector
         if (configuration.isSsl()) {
-            final Connector httpsConnector = new Connector(Http11Protocol.class.getName());
+            final Connector httpsConnector = createConnector();
             httpsConnector.setPort(configuration.getHttpsPort());
             httpsConnector.setSecure(true);
             httpsConnector.setProperty("SSLEnabled", "true");
@@ -501,8 +504,12 @@ public class Container implements AutoCloseable {
                 httpsConnector.setAttribute("keystorePass", configuration.getKeystorePass());
             }
             httpsConnector.setAttribute("keystoreType", configuration.getKeystoreType());
-            httpsConnector.setAttribute("clientAuth", configuration.getClientAuth());
-            httpsConnector.setAttribute("keyAlias", configuration.getKeyAlias());
+            if (configuration.getClientAuth() != null) {
+                httpsConnector.setAttribute("clientAuth", configuration.getClientAuth());
+            }
+            if (configuration.getKeyAlias() != null) {
+                httpsConnector.setAttribute("keyAlias", configuration.getKeyAlias());
+            }
 
             tomcat.getService().addConnector(httpsConnector);
 
@@ -599,6 +606,33 @@ public class Container implements AutoCloseable {
         }
     }
 
+    protected Connector createConnector() {
+        final Connector connector;
+        final Properties properties = configuration.getProperties();
+        if (properties != null) {
+            final Map<String, String> attributes = new HashMap<>();
+            final ObjectRecipe recipe = new ObjectRecipe(Connector.class);
+            for (final String key : properties.stringPropertyNames()) {
+                if (!key.startsWith("connector.")) {
+                    continue;
+                }
+                final String substring = key.substring("connector.".length());
+                if (!substring.startsWith("attributes.")) {
+                    recipe.setProperty(substring, properties.getProperty(key));
+                } else {
+                    attributes.put(substring.substring("attributes.".length()), properties.getProperty(key));
+                }
+            }
+            connector = recipe.getProperties().isEmpty() ?  new Connector() : Connector.class.cast(recipe.create());
+            for (final Map.Entry<String, String> attr : attributes.entrySet()) {
+                connector.setAttribute(attr.getKey(), attr.getValue());
+            }
+        } else {
+            connector = new Connector();
+        }
+        return connector;
+    }
+
     private static Server createServer(final String serverXml) {
         final Catalina catalina = new Catalina() {
             // skip few init we don't need *here*

http://git-wip-us.apache.org/repos/asf/tomee/blob/c3a5f396/tomee/tomee-embedded/src/main/java/org/apache/tomee/embedded/Main.java
----------------------------------------------------------------------
diff --git a/tomee/tomee-embedded/src/main/java/org/apache/tomee/embedded/Main.java b/tomee/tomee-embedded/src/main/java/org/apache/tomee/embedded/Main.java
index 44306ff..2eb7ea9 100644
--- a/tomee/tomee-embedded/src/main/java/org/apache/tomee/embedded/Main.java
+++ b/tomee/tomee-embedded/src/main/java/org/apache/tomee/embedded/Main.java
@@ -38,6 +38,9 @@ public class Main {
     public static final String DOC_BASE = "doc-base";
     public static final String AS_WAR = "as-war";
     public static final String RENAMING = "renaming";
+    public static final String SERVER_XML = "serverxml";
+    public static final String TOMEE_XML = "tomeexml";
+    public static final String PROPERTY = "property";
 
     public static void main(final String[] args) {
         final CommandLineParser parser = new PosixParser();
@@ -121,6 +124,9 @@ public class Main {
         options.addOption("c", AS_WAR, false, "deploy classpath as war");
         options.addOption("b", DOC_BASE, true, "when deploy classpath as war, the doc base");
         options.addOption(null, RENAMING, true, "for fat war only, is renaming of the context supported");
+        options.addOption(null, SERVER_XML, true, "the server.xml path");
+        options.addOption(null, TOMEE_XML, true, "the tomee.xml path");
+        options.addOption(null, PROPERTY, true, "some container properties");
         return options;
     }
 
@@ -130,6 +136,22 @@ public class Main {
         config.setHttpPort(Integer.parseInt(args.getOptionValue(PORT, "8080")));
         config.setStopPort(Integer.parseInt(args.getOptionValue(SHUTDOWN, "8005")));
         config.setDir(args.getOptionValue(DIRECTORY, new File(new File("."), "apache-tomee").getAbsolutePath()));
+        if (args.hasOption(SERVER_XML)) {
+            config.setServerXml(args.getOptionValue(SERVER_XML));
+        }
+        if (args.hasOption(TOMEE_XML)) {
+            config.property("openejb.conf.file", args.getOptionValue(TOMEE_XML));
+        }
+        if (args.hasOption(PROPERTY)) {
+            for (final String opt : args.getOptionValues(PROPERTY)) {
+                final int sep = opt.indexOf('=');
+                if (sep > 0) {
+                    config.property(opt.substring(0, sep), opt.substring(sep + 1));
+                } else {
+                    config.property(opt, "true");
+                }
+            }
+        }
         return config;
     }
 

http://git-wip-us.apache.org/repos/asf/tomee/blob/c3a5f396/tomee/tomee-embedded/src/test/java/org/apache/tomee/embedded/ConnectorConfigTest.java
----------------------------------------------------------------------
diff --git a/tomee/tomee-embedded/src/test/java/org/apache/tomee/embedded/ConnectorConfigTest.java b/tomee/tomee-embedded/src/test/java/org/apache/tomee/embedded/ConnectorConfigTest.java
new file mode 100644
index 0000000..6b2dfb9
--- /dev/null
+++ b/tomee/tomee-embedded/src/test/java/org/apache/tomee/embedded/ConnectorConfigTest.java
@@ -0,0 +1,58 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ * <p>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p>
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.tomee.embedded;
+
+import org.apache.catalina.connector.Connector;
+import org.apache.coyote.http11.AbstractHttp11Protocol;
+import org.junit.Test;
+
+import java.util.concurrent.atomic.AtomicReference;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
+public class ConnectorConfigTest {
+    @Test
+    public void createConnector() {
+        final AtomicReference<Connector> connector = new AtomicReference<>();
+        try {
+            new Container(new Configuration()
+                    .property("connector.xpoweredBy", "true")
+                    .property("connector.attributes.compression", "true")
+                    .property("connector.attributes.maxHeaderCount", "2016")) {
+
+                @Override
+                protected Connector createConnector() {
+                    final Connector connector1 = super.createConnector();
+                    connector.set(connector1);
+                    throw new RuntimeException("end");
+                }
+            };
+            fail("we throw an exception to prevent startup");
+        } catch (final Exception re) {
+            assertEquals(re.getMessage(), "java.lang.RuntimeException: end", re.getMessage());
+
+            final Connector c = connector.get();
+            assertNotNull(c);
+            assertTrue(c.getXpoweredBy());
+            assertEquals(2016, AbstractHttp11Protocol.class.cast(c.getProtocolHandler()).getMaxHeaderCount());
+            assertEquals("true", AbstractHttp11Protocol.class.cast(c.getProtocolHandler()).getCompression());
+        }
+    }
+}