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)); }