You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by jd...@apache.org on 2006/10/06 03:51:56 UTC

svn commit: r453458 - in /geronimo/server/trunk/maven-plugins/geronimo-maven-plugin/src/main/java/org/apache/geronimo/mavenplugins/geronimo/server: OptionSet.java StartServerMojo.java

Author: jdillon
Date: Thu Oct  5 18:51:55 2006
New Revision: 453458

URL: http://svn.apache.org/viewvc?view=rev&rev=453458
Log:
Add support for optionSets, to allow for greater flexibility to configure the server

Added:
    geronimo/server/trunk/maven-plugins/geronimo-maven-plugin/src/main/java/org/apache/geronimo/mavenplugins/geronimo/server/OptionSet.java   (with props)
Modified:
    geronimo/server/trunk/maven-plugins/geronimo-maven-plugin/src/main/java/org/apache/geronimo/mavenplugins/geronimo/server/StartServerMojo.java

Added: geronimo/server/trunk/maven-plugins/geronimo-maven-plugin/src/main/java/org/apache/geronimo/mavenplugins/geronimo/server/OptionSet.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/maven-plugins/geronimo-maven-plugin/src/main/java/org/apache/geronimo/mavenplugins/geronimo/server/OptionSet.java?view=auto&rev=453458
==============================================================================
--- geronimo/server/trunk/maven-plugins/geronimo-maven-plugin/src/main/java/org/apache/geronimo/mavenplugins/geronimo/server/OptionSet.java (added)
+++ geronimo/server/trunk/maven-plugins/geronimo-maven-plugin/src/main/java/org/apache/geronimo/mavenplugins/geronimo/server/OptionSet.java Thu Oct  5 18:51:55 2006
@@ -0,0 +1,77 @@
+/*
+ * 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.geronimo.mavenplugins.geronimo.server;
+
+import java.util.Properties;
+import java.util.Arrays;
+
+/**
+ * Container for a set of options to be passed to a JVM.
+ *
+ * @version $Rev$ $Date$
+ */
+public class OptionSet
+{
+    /**
+     * @parameter
+     */
+    private String id = null;
+
+    /**
+     * @parameter
+     */
+    private String[] options = null;
+
+    /**
+     * @parameter
+     */
+    private Properties properties = null;
+
+    public String toString() {
+        return "{ id=" + id +
+               ", options=" + (options != null ? Arrays.asList(options) : null) +
+               ", properties=" + properties +
+               " }";
+    }
+
+    public void setId(final String id) {
+        this.id = id;
+    }
+
+    public String getId() {
+        return id;
+    }
+
+    public void setOptions(final String[] options) {
+        this.options = options;
+    }
+
+    public String[] getOptions() {
+        return options;
+    }
+
+    public Properties getProperties() {
+        return properties;
+    }
+
+    public void setProperties(final Properties properties) {
+        this.properties = properties;
+    }
+}

Propchange: geronimo/server/trunk/maven-plugins/geronimo-maven-plugin/src/main/java/org/apache/geronimo/mavenplugins/geronimo/server/OptionSet.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: geronimo/server/trunk/maven-plugins/geronimo-maven-plugin/src/main/java/org/apache/geronimo/mavenplugins/geronimo/server/OptionSet.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Propchange: geronimo/server/trunk/maven-plugins/geronimo-maven-plugin/src/main/java/org/apache/geronimo/mavenplugins/geronimo/server/OptionSet.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: geronimo/server/trunk/maven-plugins/geronimo-maven-plugin/src/main/java/org/apache/geronimo/mavenplugins/geronimo/server/StartServerMojo.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/maven-plugins/geronimo-maven-plugin/src/main/java/org/apache/geronimo/mavenplugins/geronimo/server/StartServerMojo.java?view=diff&rev=453458&r1=453457&r2=453458
==============================================================================
--- geronimo/server/trunk/maven-plugins/geronimo-maven-plugin/src/main/java/org/apache/geronimo/mavenplugins/geronimo/server/StartServerMojo.java (original)
+++ geronimo/server/trunk/maven-plugins/geronimo-maven-plugin/src/main/java/org/apache/geronimo/mavenplugins/geronimo/server/StartServerMojo.java Thu Oct  5 18:51:55 2006
@@ -20,8 +20,13 @@
 package org.apache.geronimo.mavenplugins.geronimo.server;
 
 import java.io.File;
+
 import java.util.Timer;
 import java.util.TimerTask;
+import java.util.Map;
+import java.util.HashMap;
+import java.util.Properties;
+import java.util.Iterator;
 
 import org.apache.maven.plugin.MojoExecutionException;
 
@@ -30,6 +35,7 @@
 
 import org.apache.geronimo.genesis.ObjectHolder;
 import org.apache.geronimo.mavenplugins.geronimo.ServerProxy;
+
 import org.codehaus.plexus.util.FileUtils;
 
 /**
@@ -91,6 +97,10 @@
      */
     private int verifyTimeout = -1;
 
+    //
+    // TODO: Remove this debug stuff... make it use optionSet, maybe -Ddebug=true will enable the "debug" optionSet?
+    //
+    
     /**
      * JVM arguments to be applied when debug is enabled.
      *
@@ -106,6 +116,20 @@
     private boolean debug = false;
 
     /**
+     * An array of option sets which can be enabled by setting optionSetId.
+     *
+     * @parameter
+     */
+    private OptionSet[] optionSets = null;
+
+    /**
+     * The optionSet to be enabled.
+     *
+     * @parameter expression="${optionSetId}"
+     */
+    private String optionSetId = null;
+
+    /**
      * A list of module names to be started using --override.
      *
      * @parameter
@@ -114,13 +138,6 @@
 
     private Timer timer = new Timer(true);
 
-    private String appendSystemPath(final String name, final File file) {
-        assert name != null;
-        assert file != null;
-
-        return System.getProperty(name) + File.pathSeparator + file.getPath();
-    }
-
     protected void doExecute() throws Exception {
         installAssembly();
 
@@ -132,8 +149,7 @@
         java.setDir(geronimoHome);
         java.setFailonerror(true);
         java.setFork(true);
-        java.setLogError(true);
-
+        
         if (timeout > 0) {
             java.setTimeout(new Long(timeout * 1000));
         }
@@ -157,29 +173,52 @@
             }
         }
 
-        // Set the properties which we pass to the JVM from the startup script
+        // Apply option sets
+        if (optionSetId != null  && (optionSets == null || optionSets.length == 0)) {
+            throw new MojoExecutionException("At least one optionSet must be defined to select one using optionSetId");
+        }
+        else if (optionSetId == null) {
+            optionSetId = "default";
+        }
+        
+        if (optionSets != null && optionSets.length != 0) {
+            //
+            // TODO: Support selecting a comma seperated list of optionSet ids
+            //
+            
+            OptionSet set = selectOptionSet(optionSetId);
 
-        Environment.Variable var;
+            if (log.isDebugEnabled()) {
+                log.debug("Selected option set: " + set);
+            }
+            else {
+                log.info("Selected option set: " + optionSetId);    
+            }
 
-        var = new Environment.Variable();
-        var.setKey("org.apache.geronimo.base.dir");
-        var.setFile(geronimoHome);
-        java.addSysproperty(var);
+            String[] options = set.getOptions();
+            if (options != null) {
+                for (int i=0; i<options.length; i++) {
+                    java.createJvmarg().setValue(options[i]);
+                }
+            }
 
-        var = new Environment.Variable();
-        var.setKey("java.io.tmpdir");
-        var.setFile(new File(geronimoHome, "var/temp"));
-        java.addSysproperty(var);
+            Properties props = set.getProperties();
+            if (props != null) {
+                Iterator iter = props.keySet().iterator();
+                while (iter.hasNext()) {
+                    String name = (String)iter.next();
+                    String value = props.getProperty(name);
 
-        var = new Environment.Variable();
-        var.setKey("java.endorsed.dirs");
-        var.setValue(appendSystemPath("java.endorsed.dirs", new File(geronimoHome, "lib/endorsed")));
-        java.addSysproperty(var);
+                    setSystemProperty(java, name, value);
+                }
+            }
+        }
 
-        var = new Environment.Variable();
-        var.setKey("java.ext.dirs");
-        var.setValue(appendSystemPath("java.ext.dirs", new File(geronimoHome, "lib/ext")));
-        java.addSysproperty(var);
+        // Set the properties which we pass to the JVM from the startup script
+        setSystemProperty(java, "org.apache.geronimo.base.dir", geronimoHome);
+        setSystemProperty(java, "java.io.tmpdir", new File(geronimoHome, "var/temp"));
+        setSystemProperty(java, "java.endorsed.dirs", appendSystemPath("java.endorsed.dirs", new File(geronimoHome, "lib/endorsed")));
+        setSystemProperty(java, "java.ext.dirs", appendSystemPath("java.ext.dirs", new File(geronimoHome, "lib/ext")));
         
         if (quiet) {
             java.createArg().setValue("--quiet");
@@ -295,6 +334,64 @@
 
             t.join();
         }
+    }
+
+    private String appendSystemPath(final String name, final File file) {
+        assert name != null;
+        assert file != null;
+
+        return System.getProperty(name) + File.pathSeparator + file.getPath();
+    }
+
+    private OptionSet selectOptionSet(final String targetId) throws MojoExecutionException {
+        // Make a map of the option sets and validate ids
+        Map map = new HashMap();
+        for (int i=0; i<optionSets.length; i++) {
+            if (log.isDebugEnabled()) {
+                log.debug("Checking option set: " + optionSets[i]);
+            }
+            
+            String id = optionSets[i].getId();
+
+            if (id == null && optionSets.length > 1) {
+                throw new MojoExecutionException("Must specify id for optionSet when more than one optionSet is configured");
+            }
+            else if (id == null && optionSets.length == 1) {
+                id = "default";
+                optionSets[i].setId(id);
+            }
+
+            if (map.containsKey(id)) {
+                throw new MojoExecutionException("Must specify unique id for optionSet: " + id);
+            }
+            map.put(id, optionSets[i]);
+        }
+
+        OptionSet set = (OptionSet)map.get(targetId);
+        if (set == null) {
+            if ("default".equals(targetId)) {
+                log.warn("Default optionSet selected, but no optionSet defined with that id; ignoring");
+            }
+            else {
+                throw new MojoExecutionException("Missing optionSet for id: " + targetId);
+            }
+        }
+
+        return set;
+    }
+
+    private void setSystemProperty(final Java java, final String name, final String value) {
+        Environment.Variable var = new Environment.Variable();
+        var.setKey(name);
+        var.setValue(value);
+        java.addSysproperty(var);
+    }
+
+    private void setSystemProperty(final Java java, final String name, final File value) {
+        Environment.Variable var = new Environment.Variable();
+        var.setKey(name);
+        var.setFile(value);
+        java.addSysproperty(var);
     }
 
     protected String getGoalName() {