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/12/03 16:37:49 UTC

[23/50] tomee git commit: adding DeleteBaseOnStartup option to tomee embedded and ensuring properties are filtered

adding DeleteBaseOnStartup option to tomee embedded and ensuring properties are filtered


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

Branch: refs/heads/tomee-1.7.x
Commit: f86f5a355d7f324df989613ee61ae501d4343ec0
Parents: 8143fc0
Author: rmannibucau <rm...@apache.org>
Authored: Tue Oct 4 16:04:00 2016 +0200
Committer: rmannibucau <rm...@apache.org>
Committed: Tue Oct 4 16:04:00 2016 +0200

----------------------------------------------------------------------
 .../apache/tomee/embedded/Configuration.java    | 35 ++++++++++++++++++++
 .../org/apache/tomee/embedded/Container.java    | 19 ++++++-----
 .../TomEEEmbeddedApplicationRunner.java         |  4 ++-
 .../embedded/SingleInstanceRunnerTest.java      |  7 +++-
 4 files changed, 54 insertions(+), 11 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tomee/blob/f86f5a35/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 b74ad95..e55f0cf 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
@@ -18,6 +18,8 @@ package org.apache.tomee.embedded;
 
 import org.apache.catalina.Realm;
 import org.apache.catalina.connector.Connector;
+import org.apache.commons.lang3.text.StrLookup;
+import org.apache.commons.lang3.text.StrSubstitutor;
 import org.apache.openejb.loader.IO;
 import org.apache.openejb.util.NetworkUtil;
 import org.apache.xbean.finder.filter.Filter;
@@ -85,6 +87,7 @@ public class Configuration {
     private boolean webResourceCached = true;
 
     private String conf;
+    private boolean deleteBaseOnStartup = true;
 
     public Configuration loadFrom(final String resource) {
         try (final InputStream is = findStream(resource)) {
@@ -110,6 +113,26 @@ public class Configuration {
     }
 
     public void loadFromProperties(final Properties config) {
+        // filtering properties with system properties or themself
+        final StrSubstitutor strSubstitutor = new StrSubstitutor(new StrLookup<String>() {
+            @Override
+            public String lookup(final String key) {
+                final String property = System.getProperty(key);
+                return property == null ? config.getProperty(key) : null;
+            }
+        });
+        for (final String key : config.stringPropertyNames()) {
+            final String val = config.getProperty(key);
+            if (val == null || val.trim().isEmpty()) {
+                continue;
+            }
+            final String newVal = strSubstitutor.replace(config.getProperty(key));
+            if (!val.equals(newVal)) {
+                config.setProperty(key, newVal);
+            }
+        }
+
+
         final String http = config.getProperty("http");
         if (http != null) {
             setHttpPort(Integer.parseInt(http));
@@ -154,6 +177,10 @@ public class Configuration {
         if (http2 != null) {
             setHttp2(Boolean.parseBoolean(http2));
         }
+        final String deleteBaseOnStartup = config.getProperty("deleteBaseOnStartup");
+        if (deleteBaseOnStartup != null) {
+            setDeleteBaseOnStartup(Boolean.parseBoolean(deleteBaseOnStartup));
+        }
         final String webResourceCached = config.getProperty("webResourceCached");
         if (webResourceCached != null) {
             setWebResourceCached(Boolean.parseBoolean(webResourceCached));
@@ -576,6 +603,14 @@ public class Configuration {
         return classesFilter;
     }
 
+    public boolean isDeleteBaseOnStartup() {
+        return deleteBaseOnStartup;
+    }
+
+    public void setDeleteBaseOnStartup(final boolean deleteBaseOnStartup) {
+        this.deleteBaseOnStartup = deleteBaseOnStartup;
+    }
+
     public interface ConfigurationCustomizer {
         void customize(Configuration configuration);
     }

http://git-wip-us.apache.org/repos/asf/tomee/blob/f86f5a35/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 06b33dd..aa2d054 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
@@ -423,14 +423,13 @@ public class Container implements AutoCloseable {
 
         // create basic installation in setup to be able to handle anything the caller does between setup() and start()
         base = new File(getBaseDir());
-        if (base.exists()) {
-            // TODO: get rid of Files which has its own shutdown hook which can mess up order if started/shutdown multiple times?
+        if (base.exists() && configuration.isDeleteBaseOnStartup()) {
             Files.delete(base);
+        } else if (!base.exists()) {
+            Files.mkdirs(base);
+            Files.deleteOnExit(base);
         }
 
-        Files.mkdirs(base);
-        Files.deleteOnExit(base);
-
         final File conf = createDirectory(base, "conf");
         createDirectory(base, "lib");
         createDirectory(base, "logs");
@@ -842,10 +841,12 @@ public class Container implements AutoCloseable {
         } catch (final LifecycleException e) {
             e.printStackTrace();
         }
-        try {
-            deleteTree(base);
-        } catch (final Exception e) {
-            e.printStackTrace();
+        if (configuration.isDeleteBaseOnStartup()) {
+            try {
+                deleteTree(base);
+            } catch (final Exception e) {
+                e.printStackTrace();
+            }
         }
 
         OpenEJB.destroy();

http://git-wip-us.apache.org/repos/asf/tomee/blob/f86f5a35/tomee/tomee-embedded/src/main/java/org/apache/tomee/embedded/TomEEEmbeddedApplicationRunner.java
----------------------------------------------------------------------
diff --git a/tomee/tomee-embedded/src/main/java/org/apache/tomee/embedded/TomEEEmbeddedApplicationRunner.java b/tomee/tomee-embedded/src/main/java/org/apache/tomee/embedded/TomEEEmbeddedApplicationRunner.java
index 7f69d32..ffc4dcd 100644
--- a/tomee/tomee-embedded/src/main/java/org/apache/tomee/embedded/TomEEEmbeddedApplicationRunner.java
+++ b/tomee/tomee-embedded/src/main/java/org/apache/tomee/embedded/TomEEEmbeddedApplicationRunner.java
@@ -16,6 +16,7 @@
  */
 package org.apache.tomee.embedded;
 
+import org.apache.commons.lang3.text.StrSubstitutor;
 import org.apache.openejb.config.DeploymentsResolver;
 import org.apache.openejb.loader.SystemInstance;
 import org.apache.openejb.testing.Application;
@@ -147,9 +148,10 @@ public class TomEEEmbeddedApplicationRunner implements AutoCloseable {
             for (final ContainerProperties.Property p : props.value()) {
                 final String name = p.name();
                 if (name.startsWith("tomee.embedded.application.runner.")) { // allow to tune the Configuration
+                    // no need to filter there since it is done in loadFromProperties()
                     runnerProperties.setProperty(name.substring("tomee.embedded.application.runner.".length()), p.value());
                 } else {
-                    configuration.property(name, p.value());
+                    configuration.property(name, StrSubstitutor.replaceSystemProperties(p.value()));
                 }
             }
             if (!runnerProperties.isEmpty()) {

http://git-wip-us.apache.org/repos/asf/tomee/blob/f86f5a35/tomee/tomee-embedded/src/test/java/org/apache/tomee/embedded/SingleInstanceRunnerTest.java
----------------------------------------------------------------------
diff --git a/tomee/tomee-embedded/src/test/java/org/apache/tomee/embedded/SingleInstanceRunnerTest.java b/tomee/tomee-embedded/src/test/java/org/apache/tomee/embedded/SingleInstanceRunnerTest.java
index 8bb73e7..7435205 100644
--- a/tomee/tomee-embedded/src/test/java/org/apache/tomee/embedded/SingleInstanceRunnerTest.java
+++ b/tomee/tomee-embedded/src/test/java/org/apache/tomee/embedded/SingleInstanceRunnerTest.java
@@ -53,6 +53,7 @@ public class SingleInstanceRunnerTest {
     @Test
     public void run() {
         assertNotNull(SystemInstance.get().getComponent(Assembler.class));
+        assertEquals("val", SystemInstance.get().getProperty("simple"));
         assertEquals("set", SystemInstance.get().getProperty("t"));
         assertEquals("p", SystemInstance.get().getProperty("prog"));
         assertEquals("128463", SystemInstance.get().getProperty("my.server.port"));
@@ -70,7 +71,11 @@ public class SingleInstanceRunnerTest {
 
     @Application
     @Classes(context = "app")
-    @ContainerProperties(@ContainerProperties.Property(name = "t", value = "set"))
+    @ContainerProperties({
+            @ContainerProperties.Property(name = "simple", value = "val"),
+            @ContainerProperties.Property(name = "tomee.embedded.application.runner.properties.t", value = "${t.value}"),
+            @ContainerProperties.Property(name = "tomee.embedded.application.runner.t.value", value = "set")
+    })
     @TomEEEmbeddedApplicationRunner.LifecycleTasks(MyTask.class)
     // can start a ftp/sftp/elasticsearch/mongo/... server before tomee
     @TomEEEmbeddedApplicationRunner.Configurers(SetMyProperty.class)