Repository: tomee
Updated Branches:
  refs/heads/master 2f6930e4e -> 36a534adb


TOMEE-1921 Configuration.loadFromClasspath for tomee embedded


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

Branch: refs/heads/master
Commit: acaec7ef0829cc06f359dce27cf953302db2edc6
Parents: 2f6930e
Author: Romain manni-Bucau <rmannibu...@gmail.com>
Authored: Fri Sep 2 12:56:10 2016 +0200
Committer: Romain manni-Bucau <rmannibu...@gmail.com>
Committed: Fri Sep 2 12:56:53 2016 +0200

----------------------------------------------------------------------
 .../embedded/EmbeddedTomEEConfiguration.java    |   9 +
 .../embedded/EmbeddedTomEEContainer.java        |   4 +
 .../apache/tomee/embedded/Configuration.java    | 163 +++++++++++++++++--
 .../java/org/apache/tomee/embedded/Main.java    |  11 +-
 4 files changed, 174 insertions(+), 13 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tomee/blob/acaec7ef/arquillian/arquillian-tomee-embedded/src/main/java/org/apache/openejb/arquillian/embedded/EmbeddedTomEEConfiguration.java
----------------------------------------------------------------------
diff --git 
a/arquillian/arquillian-tomee-embedded/src/main/java/org/apache/openejb/arquillian/embedded/EmbeddedTomEEConfiguration.java
 
b/arquillian/arquillian-tomee-embedded/src/main/java/org/apache/openejb/arquillian/embedded/EmbeddedTomEEConfiguration.java
index 8996aa4..dd51346 100644
--- 
a/arquillian/arquillian-tomee-embedded/src/main/java/org/apache/openejb/arquillian/embedded/EmbeddedTomEEConfiguration.java
+++ 
b/arquillian/arquillian-tomee-embedded/src/main/java/org/apache/openejb/arquillian/embedded/EmbeddedTomEEConfiguration.java
@@ -47,6 +47,15 @@ public class EmbeddedTomEEConfiguration extends 
TomEEConfiguration {
     private boolean webResourcesCached = true;
     private boolean http2;
     private String configurationCustomizers;
+    private String classpathConfiguration;
+
+    public String getClasspathConfiguration() {
+        return classpathConfiguration;
+    }
+
+    public void setClasspathConfiguration(final String classpathConfiguration) 
{
+        this.classpathConfiguration = classpathConfiguration;
+    }
 
     public boolean isHttp2() {
         return http2;

http://git-wip-us.apache.org/repos/asf/tomee/blob/acaec7ef/arquillian/arquillian-tomee-embedded/src/main/java/org/apache/openejb/arquillian/embedded/EmbeddedTomEEContainer.java
----------------------------------------------------------------------
diff --git 
a/arquillian/arquillian-tomee-embedded/src/main/java/org/apache/openejb/arquillian/embedded/EmbeddedTomEEContainer.java
 
b/arquillian/arquillian-tomee-embedded/src/main/java/org/apache/openejb/arquillian/embedded/EmbeddedTomEEContainer.java
index 8c3624e..4c172c7 100644
--- 
a/arquillian/arquillian-tomee-embedded/src/main/java/org/apache/openejb/arquillian/embedded/EmbeddedTomEEContainer.java
+++ 
b/arquillian/arquillian-tomee-embedded/src/main/java/org/apache/openejb/arquillian/embedded/EmbeddedTomEEContainer.java
@@ -101,6 +101,10 @@ public class EmbeddedTomEEContainer extends 
TomEEContainer<EmbeddedTomEEConfigur
 
         
configuration.setWebResourceCached(tomeeConfiguration.isWebResourcesCached());
 
+        if (tomeeConfiguration.getClasspathConfiguration() != null) {
+            
configuration.loadFromClasspath(tomeeConfiguration.getClasspathConfiguration());
+        }
+
         if (tomeeConfiguration.getConfigurationCustomizers() != null) {
             for (final String s : 
tomeeConfiguration.getConfigurationCustomizers().split(",")) {
                 final String trim = s.trim();

http://git-wip-us.apache.org/repos/asf/tomee/blob/acaec7ef/tomee/tomee-embedded/src/main/java/org/apache/tomee/embedded/Configuration.java
----------------------------------------------------------------------
diff --git 
a/tomee/tomee-embedded/src/main/java/org/apache/tomee/embedded/Configuration.java
 
b/tomee/tomee-embedded/src/main/java/org/apache/tomee/embedded/Configuration.java
index c0b1e6e..650e47e 100644
--- 
a/tomee/tomee-embedded/src/main/java/org/apache/tomee/embedded/Configuration.java
+++ 
b/tomee/tomee-embedded/src/main/java/org/apache/tomee/embedded/Configuration.java
@@ -5,22 +5,26 @@
  * 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;
 
 import org.apache.catalina.Realm;
 import org.apache.catalina.connector.Connector;
+import org.apache.openejb.loader.IO;
 import org.apache.openejb.util.NetworkUtil;
+import org.apache.xbean.recipe.ObjectRecipe;
 
 import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.HashMap;
@@ -29,8 +33,8 @@ import java.util.Map;
 import java.util.Properties;
 
 /**
-* @version $Rev$ $Date$
-*/
+ * @version $Rev$ $Date$
+ */
 public class Configuration {
 
     private int httpPort = 8080;
@@ -77,6 +81,145 @@ public class Configuration {
 
     private String conf;
 
+    public Configuration loadFromClasspath(final String resource) {
+        try (final InputStream is = 
Thread.currentThread().getContextClassLoader().getResourceAsStream(resource)) {
+            if (is == null) {
+                throw new IllegalArgumentException(resource + " not found");
+            }
+            final Properties config = IO.readProperties(is, new Properties());
+            final String http = config.getProperty("http");
+            if (http != null) {
+                setHttpPort(Integer.parseInt(http));
+            }
+            final String https = config.getProperty("https");
+            if (https != null) {
+                setHttpsPort(Integer.parseInt(https));
+            }
+            final String stop = config.getProperty("stop");
+            if (stop != null) {
+                setStopPort(Integer.parseInt(stop));
+            }
+            final String host = config.getProperty("host");
+            if (host != null) {
+                setHost(host);
+            }
+            final String dir = config.getProperty("dir");
+            if (dir != null) {
+                setDir(dir);
+            }
+            final String serverXml = config.getProperty("serverXml");
+            if (serverXml != null) {
+                setServerXml(serverXml);
+            }
+            final String keepServerXmlAsThis = 
config.getProperty("keepServerXmlAsThis");
+            if (keepServerXmlAsThis != null) {
+                
setKeepServerXmlAsThis(Boolean.parseBoolean(keepServerXmlAsThis));
+            }
+            final String quickSession = config.getProperty("quickSession");
+            if (quickSession != null) {
+                setQuickSession(Boolean.parseBoolean(quickSession));
+            }
+            final String skipHttp = config.getProperty("skipHttp");
+            if (skipHttp != null) {
+                setSkipHttp(Boolean.parseBoolean(skipHttp));
+            }
+            final String ssl = config.getProperty("ssl");
+            if (ssl != null) {
+                setSsl(Boolean.parseBoolean(ssl));
+            }
+            final String http2 = config.getProperty("http2");
+            if (http2 != null) {
+                setHttp2(Boolean.parseBoolean(http2));
+            }
+            final String webResourceCached = 
config.getProperty("webResourceCached");
+            if (webResourceCached != null) {
+                setWebResourceCached(Boolean.parseBoolean(webResourceCached));
+            }
+            final String withEjbRemote = config.getProperty("withEjbRemote");
+            if (withEjbRemote != null) {
+                setWithEjbRemote(Boolean.parseBoolean(withEjbRemote));
+            }
+            final String deployOpenEjbApp = 
config.getProperty("deployOpenEjbApp");
+            if (deployOpenEjbApp != null) {
+                setDeployOpenEjbApp(Boolean.parseBoolean(deployOpenEjbApp));
+            }
+            final String keystoreFile = config.getProperty("keystoreFile");
+            if (keystoreFile != null) {
+                setKeystoreFile(keystoreFile);
+            }
+            final String keystorePass = config.getProperty("keystorePass");
+            if (keystorePass != null) {
+                setKeystorePass(keystorePass);
+            }
+            final String keystoreType = config.getProperty("keystoreType");
+            if (keystoreType != null) {
+                setKeystoreType(keystoreType);
+            }
+            final String clientAuth = config.getProperty("clientAuth");
+            if (clientAuth != null) {
+                setClientAuth(clientAuth);
+            }
+            final String keyAlias = config.getProperty("keyAlias");
+            if (keyAlias != null) {
+                setKeyAlias(keyAlias);
+            }
+            final String sslProtocol = config.getProperty("sslProtocol");
+            if (sslProtocol != null) {
+                setSslProtocol(sslProtocol);
+            }
+            final String webXml = config.getProperty("webXml");
+            if (webXml != null) {
+                setWebXml(webXml);
+            }
+            final String tempDir = config.getProperty("tempDir");
+            if (tempDir != null) {
+                setTempDir(tempDir);
+            }
+            final String conf = config.getProperty("conf");
+            if (conf != null) {
+                setConf(conf);
+            }
+            for (final String prop : config.stringPropertyNames()) {
+                if (prop.startsWith("properties.")) {
+                    property(prop.substring("properties.".length()), 
config.getProperty(prop));
+                } else if (prop.startsWith("users.")) {
+                    user(prop.substring("users.".length()), 
config.getProperty(prop));
+                } else if (prop.startsWith("roles.")) {
+                    role(prop.substring("roles.".length()), 
config.getProperty(prop));
+                } else if (prop.startsWith("connector.")) { // created in 
container
+                    property(prop, config.getProperty(prop));
+                } else if (prop.equals("realm")) {
+                    final ObjectRecipe recipe = new 
ObjectRecipe(config.getProperty(prop));
+                    for (final String realmConfig : 
config.stringPropertyNames()) {
+                        if (realmConfig.startsWith("realm.")) {
+                            
recipe.setProperty(realmConfig.substring("realm.".length()), 
config.getProperty(realmConfig));
+                        }
+                    }
+                    setRealm(Realm.class.cast(recipe.create()));
+                } else if (prop.equals("login")) {
+                    final ObjectRecipe recipe = new 
ObjectRecipe(LoginConfigBuilder.class.getName());
+                    for (final String nestedConfig : 
config.stringPropertyNames()) {
+                        if (nestedConfig.startsWith("login.")) {
+                            
recipe.setProperty(nestedConfig.substring("login.".length()), 
config.getProperty(nestedConfig));
+                        }
+                    }
+                    
loginConfig(LoginConfigBuilder.class.cast(recipe.create()));
+                } else if (prop.equals("securityConstraint")) {
+                    final ObjectRecipe recipe = new 
ObjectRecipe(SecurityConstaintBuilder.class.getName());
+                    for (final String nestedConfig : 
config.stringPropertyNames()) {
+                        if (nestedConfig.startsWith("securityConstraints.")) {
+                            
recipe.setProperty(nestedConfig.substring("securityConstraints.".length()), 
config.getProperty(nestedConfig));
+                        }
+                    }
+                    
securityConstaint(SecurityConstaintBuilder.class.cast(recipe.create()));
+                }
+            }
+            return this;
+        } catch (final IOException e) {
+            throw new IllegalStateException(e);
+        }
+    }
+
     public int getHttpPort() {
         return httpPort;
     }

http://git-wip-us.apache.org/repos/asf/tomee/blob/acaec7ef/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 16f1627..74d3db7 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
@@ -73,6 +73,7 @@ public class Main {
     public static final String SIMPLE_LOG = "simple-log";
     public static final String PRE_TASK = "pre-task";
     public static final String INTERACTIVE = "interactive";
+    public static final String CLASSPATH_CONFIGURATION = 
"classpath-configuration";
 
     public static void main(final String[] args) {
         final CommandLineParser parser = new PosixParser();
@@ -246,14 +247,18 @@ public class Main {
         options.addOption(null, BASIC, true, "basic authentication if set");
         options.addOption(null, SIMPLE_LOG, true, "should tomee use simple log 
format (level - message) - demo intended");
         options.addOption("i", INTERACTIVE, true, "should tomee start and wait 
for SIGTERM signal or wait for 'exit' to be entered");
+        options.addOption(null, CLASSPATH_CONFIGURATION, true, "a properties 
file containing the configuration to load");
         return options;
     }
 
     private static Configuration createConfiguration(final CommandLine args) {
         final Configuration config = new Configuration();
-        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(CLASSPATH_CONFIGURATION)) {
+            
config.loadFromClasspath(args.getOptionValue(CLASSPATH_CONFIGURATION));
+        }
+        config.setHttpPort(Integer.parseInt(args.getOptionValue(PORT, 
Integer.toString(config.getHttpPort()))));
+        config.setStopPort(Integer.parseInt(args.getOptionValue(SHUTDOWN, 
Integer.toString(config.getHttpsPort()))));
+        config.setDir(args.getOptionValue(DIRECTORY, config.getDir() == null ? 
new File(new File("."), "apache-tomee").getAbsolutePath() : config.getDir()));
         if (args.hasOption(SERVER_XML)) {
             config.setServerXml(args.getOptionValue(SERVER_XML));
         }

Reply via email to