Repository: tomee
Updated Branches:
  refs/heads/master 710448afb -> 3d8d8af0e


TOMEE-1916 conf option to tomee embedded


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

Branch: refs/heads/master
Commit: 6bf49291bca020ae8c1656e2a45c4f67e22bc47b
Parents: 710448a
Author: Romain manni-Bucau <rmannibu...@gmail.com>
Authored: Sat Aug 27 18:22:43 2016 +0200
Committer: Romain manni-Bucau <rmannibu...@gmail.com>
Committed: Sat Aug 27 18:22:43 2016 +0200

----------------------------------------------------------------------
 .../gradle/embedded/TomEEEmbeddedTask.java      |  4 ++
 .../maven/plugins/TomEEEmbeddedMojo.java        |  9 ++-
 .../event/TomEEEmbeddedScannerCreated.java      | 33 ++++++++++
 .../apache/tomee/embedded/Configuration.java    | 15 +++++
 .../org/apache/tomee/embedded/Container.java    | 63 +++++++++++++++++---
 .../org/apache/tomee/embedded/ConfTest.java     | 46 ++++++++++++++
 .../src/test/resources/ConfTest/server.xml      | 40 +++++++++++++
 .../test/resources/ConfTest/system.properties   | 18 ++++++
 8 files changed, 216 insertions(+), 12 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tomee/blob/6bf49291/gradle/gradle-tomee-embedded/src/main/java/org/apache/tomee/gradle/embedded/TomEEEmbeddedTask.java
----------------------------------------------------------------------
diff --git 
a/gradle/gradle-tomee-embedded/src/main/java/org/apache/tomee/gradle/embedded/TomEEEmbeddedTask.java
 
b/gradle/gradle-tomee-embedded/src/main/java/org/apache/tomee/gradle/embedded/TomEEEmbeddedTask.java
index b5c3e27..bf06e0b 100644
--- 
a/gradle/gradle-tomee-embedded/src/main/java/org/apache/tomee/gradle/embedded/TomEEEmbeddedTask.java
+++ 
b/gradle/gradle-tomee-embedded/src/main/java/org/apache/tomee/gradle/embedded/TomEEEmbeddedTask.java
@@ -175,6 +175,10 @@ public class TomEEEmbeddedTask extends DefaultTask {
     @Input
     private String dir;
 
+    @Optional
+    @Input
+    private String conf;
+
     /* TODO if needed
     @Parameter //a dvanced config but a simple boolean will be used for 
defaults (withLiveReload)
     private LiveReload liveReload;

http://git-wip-us.apache.org/repos/asf/tomee/blob/6bf49291/maven/tomee-embedded-maven-plugin/src/main/java/org/apache/openejb/maven/plugins/TomEEEmbeddedMojo.java
----------------------------------------------------------------------
diff --git 
a/maven/tomee-embedded-maven-plugin/src/main/java/org/apache/openejb/maven/plugins/TomEEEmbeddedMojo.java
 
b/maven/tomee-embedded-maven-plugin/src/main/java/org/apache/openejb/maven/plugins/TomEEEmbeddedMojo.java
index 8f841b7..95038ab 100644
--- 
a/maven/tomee-embedded-maven-plugin/src/main/java/org/apache/openejb/maven/plugins/TomEEEmbeddedMojo.java
+++ 
b/maven/tomee-embedded-maven-plugin/src/main/java/org/apache/openejb/maven/plugins/TomEEEmbeddedMojo.java
@@ -32,7 +32,6 @@ import org.apache.maven.plugins.annotations.ResolutionScope;
 import org.apache.maven.project.MavenProject;
 import org.apache.openejb.OpenEJBException;
 import org.apache.openejb.UndeployException;
-import org.apache.openejb.assembler.classic.AppInfo;
 import org.apache.openejb.assembler.classic.Assembler;
 import org.apache.openejb.core.ParentClassLoaderFinder;
 import org.apache.openejb.core.ProvidedClassLoaderFinder;
@@ -41,7 +40,6 @@ import org.apache.openejb.loader.IO;
 import org.apache.openejb.loader.SystemInstance;
 import org.apache.openejb.maven.util.MavenLogStreamFactory;
 import org.apache.openejb.maven.util.XmlFormatter;
-import org.apache.openejb.spi.ContainerSystem;
 import org.apache.openejb.util.JuliLogStreamFactory;
 import org.apache.tomee.catalina.TomEERuntimeException;
 import org.apache.tomee.embedded.Configuration;
@@ -59,7 +57,6 @@ import java.net.MalformedURLException;
 import java.net.URL;
 import java.net.URLClassLoader;
 import java.util.ArrayList;
-import java.util.Collection;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -228,6 +225,12 @@ public class TomEEEmbeddedMojo extends AbstractMojo {
     protected String context;
 
     /**
+     * Conf classpath folder.
+     */
+    @Parameter(property = "tomee-embedded-plugin.conf")
+    protected String conf;
+
+    /**
      * TomEE properties.
      */
     @Parameter // don't call it properties to avoid to break getConfig()

http://git-wip-us.apache.org/repos/asf/tomee/blob/6bf49291/tomee/tomee-embedded#src/main/java/org/apache/tomee/embedded/event/TomEEEmbeddedScannerCreated.java
----------------------------------------------------------------------
diff --git 
a/tomee/tomee-embedded#src/main/java/org/apache/tomee/embedded/event/TomEEEmbeddedScannerCreated.java
 
b/tomee/tomee-embedded#src/main/java/org/apache/tomee/embedded/event/TomEEEmbeddedScannerCreated.java
new file mode 100644
index 0000000..4110593
--- /dev/null
+++ 
b/tomee/tomee-embedded#src/main/java/org/apache/tomee/embedded/event/TomEEEmbeddedScannerCreated.java
@@ -0,0 +1,33 @@
+/**
+ * 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.event;
+
+import org.apache.openejb.observer.Event;
+import org.apache.xbean.finder.IAnnotationFinder;
+
+@Event
+public class TomEEEmbeddedScannerCreated {
+    private final IAnnotationFinder finder;
+
+    public TomEEEmbeddedScannerCreated(final IAnnotationFinder finder) {
+        this.finder = finder;
+    }
+
+    public IAnnotationFinder getFinder() {
+        return finder;
+    }
+}

http://git-wip-us.apache.org/repos/asf/tomee/blob/6bf49291/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 7871812..c0b1e6e 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
@@ -75,6 +75,8 @@ public class Configuration {
 
     private boolean webResourceCached = true;
 
+    private String conf;
+
     public int getHttpPort() {
         return httpPort;
     }
@@ -366,6 +368,19 @@ public class Configuration {
         configurationCustomizer.customize(this);
     }
 
+    public Configuration conf(final String config) {
+        setConf(config);
+        return this;
+    }
+
+    public String getConf() {
+        return conf;
+    }
+
+    public void setConf(final String conf) {
+        this.conf = conf;
+    }
+
     public interface ConfigurationCustomizer {
         void customize(Configuration configuration);
     }

http://git-wip-us.apache.org/repos/asf/tomee/blob/6bf49291/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 d3d5538..a3c521d 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
@@ -83,6 +83,7 @@ import org.apache.velocity.app.VelocityEngine;
 import org.apache.velocity.runtime.log.NullLogChute;
 import org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader;
 import org.apache.xbean.finder.AnnotationFinder;
+import org.apache.xbean.finder.ResourceFinder;
 import org.apache.xbean.finder.UrlSet;
 import org.apache.xbean.finder.filter.Filters;
 import org.apache.xbean.recipe.ObjectRecipe;
@@ -391,12 +392,35 @@ public class Container implements AutoCloseable {
         Files.mkdirs(base);
         Files.deleteOnExit(base);
 
-        createDirectory(base, "conf");
+        final File conf = createDirectory(base, "conf");
         createDirectory(base, "lib");
         createDirectory(base, "logs");
         createDirectory(base, "temp");
         createDirectory(base, "work");
         createDirectory(base, "webapps");
+
+        synchronize(conf, configuration.getConf());
+    }
+
+    private void synchronize(final File base, final String resourceBase) {
+        if (resourceBase == null) {
+            return;
+        }
+
+        try {
+            final Map<String, URL> urls = new 
ResourceFinder("").getResourcesMap(resourceBase);
+            for (final Map.Entry<String, URL> u : urls.entrySet()) {
+                try (final InputStream is = u.getValue().openStream()) {
+                    final File to = new File(base, u.getKey());
+                    IO.copy(is, to);
+                    if ("server.xml".equals(u.getKey())) {
+                        configuration.setServerXml(to.getAbsolutePath());
+                    }
+                }
+            }
+        } catch (final IOException e) {
+            throw new IllegalStateException(e);
+        }
     }
 
     public File getBase() {
@@ -459,11 +483,13 @@ public class Container implements AutoCloseable {
         final boolean initialized;
         if (configuration.hasServerXml()) {
             final File file = new File(conf, "server.xml");
-            final FileOutputStream fos = new FileOutputStream(file);
-            try {
-                IO.copy(configuration.getServerXmlFile(), fos);
-            } finally {
-                IO.close(fos);
+            if (!file.equals(configuration.getServerXmlFile())) {
+                final FileOutputStream fos = new FileOutputStream(file);
+                try {
+                    IO.copy(configuration.getServerXmlFile(), fos);
+                } finally {
+                    IO.close(fos);
+                }
             }
 
             // respect config (host/port) of the Configuration
@@ -488,7 +514,16 @@ public class Container implements AutoCloseable {
         }
 
         if (props != null && !props.isEmpty()) {
-            final FileWriter systemProperties = new FileWriter(new File(conf, 
"system.properties"));
+            final File file = new File(conf, "system.properties");
+            if (file.isFile()) {
+                final Properties existing = IO.readProperties(file);
+                for (final String key : existing.stringPropertyNames()) {
+                    if (!props.containsKey(key)) {
+                        props.put(key, existing.getProperty(key));
+                    }
+                }
+            }
+            final FileWriter systemProperties = new FileWriter(file);
             try {
                 props.store(systemProperties, "");
             } finally {
@@ -897,6 +932,11 @@ public class Container implements AutoCloseable {
     }
 
     private void copyTemplateTo(final File targetDir, final String filename) 
throws Exception {
+        final File file = new File(targetDir, filename);
+        if (file.exists()) {
+            return;
+        }
+
         // don't break apps using Velocity facade
         final VelocityEngine engine = new VelocityEngine();
         engine.setProperty(Velocity.RUNTIME_LOG_LOGSYSTEM, new NullLogChute());
@@ -908,17 +948,22 @@ public class Container implements AutoCloseable {
         final VelocityContext context = new VelocityContext();
         context.put("tomcatHttpPort", 
Integer.toString(configuration.getHttpPort()));
         context.put("tomcatShutdownPort", 
Integer.toString(configuration.getStopPort()));
-        final Writer writer = new FileWriter(new File(targetDir, filename));
+        final Writer writer = new FileWriter(file);
         template.merge(context, writer);
         writer.flush();
         writer.close();
     }
 
     private void copyFileTo(final File targetDir, final String filename) 
throws IOException {
+        final File to = new File(targetDir, filename);
+        if (to.exists()) { // user provided one
+            return;
+        }
+
         final InputStream is = 
getClass().getResourceAsStream("/org/apache/tomee/configs/" + filename);
         if (is != null) { // should be null since we are using default conf
             try {
-                IO.copy(is, new File(targetDir, filename));
+                IO.copy(is, to);
             } finally {
                 IO.close(is);
             }

http://git-wip-us.apache.org/repos/asf/tomee/blob/6bf49291/tomee/tomee-embedded/src/test/java/org/apache/tomee/embedded/ConfTest.java
----------------------------------------------------------------------
diff --git 
a/tomee/tomee-embedded/src/test/java/org/apache/tomee/embedded/ConfTest.java 
b/tomee/tomee-embedded/src/test/java/org/apache/tomee/embedded/ConfTest.java
new file mode 100644
index 0000000..d1670dc
--- /dev/null
+++ b/tomee/tomee-embedded/src/test/java/org/apache/tomee/embedded/ConfTest.java
@@ -0,0 +1,46 @@
+/**
+ * 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
+ *
+ *     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.
+ */
+package org.apache.tomee.embedded;
+
+import org.apache.catalina.Realm;
+import org.apache.catalina.core.StandardServer;
+import org.apache.catalina.realm.JAASRealm;
+import org.apache.openejb.loader.SystemInstance;
+import org.apache.tomee.catalina.TomEERealm;
+import org.apache.tomee.loader.TomcatHelper;
+import org.junit.Test;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
+public class ConfTest {
+    @Test
+    public void run() {
+        try (final Container container = new Container(new 
Configuration().conf("ConfTest"))) {
+            final StandardServer standardServer = TomcatHelper.getServer();
+            final Realm engineRealm = 
standardServer.findServices()[0].getContainer().getRealm();
+            assertTrue(String.valueOf(engineRealm), 
TomEERealm.class.isInstance(engineRealm));
+            assertTrue(String.valueOf(engineRealm), 
JAASRealm.class.isInstance(TomEERealm.class.cast(engineRealm).getNestedRealms()[0]));
+            final JAASRealm jaas = 
JAASRealm.class.cast(TomEERealm.class.cast(engineRealm).getNestedRealms()[0]);
+            assertEquals("PropertiesLoginModule", jaas.getAppName());
+            
assertEquals("org.apache.openejb.core.security.jaas.UserPrincipal", 
jaas.getUserClassNames());
+            
assertEquals("org.apache.openejb.core.security.jaas.GroupPrincipal", 
jaas.getRoleClassNames());
+
+            assertEquals("test", 
SystemInstance.get().getProperty("ConfTest.value"));
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/tomee/blob/6bf49291/tomee/tomee-embedded/src/test/resources/ConfTest/server.xml
----------------------------------------------------------------------
diff --git a/tomee/tomee-embedded/src/test/resources/ConfTest/server.xml 
b/tomee/tomee-embedded/src/test/resources/ConfTest/server.xml
new file mode 100644
index 0000000..62be947
--- /dev/null
+++ b/tomee/tomee-embedded/src/test/resources/ConfTest/server.xml
@@ -0,0 +1,40 @@
+<?xml version='1.0' encoding='utf-8'?>
+<!--
+    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
+
+    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.
+-->
+<Server port="8005" shutdown="SHUTDOWN">
+  <Listener className="org.apache.tomee.catalina.ServerListener"/>
+  <Listener className="org.apache.catalina.security.SecurityListener"/>
+
+  <Service name="Catalina">
+    <Connector port="8080" protocol="HTTP/1.1"
+               connectionTimeout="20000"
+               redirectPort="8443"/>
+    <Connector port="8009" protocol="AJP/1.3" redirectPort="8443"/>
+    <Engine name="Catalina" defaultHost="localhost">
+
+      <Realm className="org.apache.catalina.realm.JAASRealm" 
appName="PropertiesLoginModule"
+             
userClassNames="org.apache.openejb.core.security.jaas.UserPrincipal"
+             
roleClassNames="org.apache.openejb.core.security.jaas.GroupPrincipal">
+      </Realm>
+
+      <Host name="localhost" appBase="webapps"
+            unpackWARs="true" autoDeploy="true"/>
+    </Engine>
+  </Service>
+</Server>

http://git-wip-us.apache.org/repos/asf/tomee/blob/6bf49291/tomee/tomee-embedded/src/test/resources/ConfTest/system.properties
----------------------------------------------------------------------
diff --git a/tomee/tomee-embedded/src/test/resources/ConfTest/system.properties 
b/tomee/tomee-embedded/src/test/resources/ConfTest/system.properties
new file mode 100644
index 0000000..554c50a
--- /dev/null
+++ b/tomee/tomee-embedded/src/test/resources/ConfTest/system.properties
@@ -0,0 +1,18 @@
+#
+# 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
+#
+#     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.
+#
+ConfTest.value = test
+

Reply via email to