Repository: karaf
Updated Branches:
  refs/heads/master 33674bd39 -> b60231147


[KARAF-3025] Add an instance:restart command


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

Branch: refs/heads/master
Commit: b602311476a92f7a9cd4e720e94e1b9fe95cd5bb
Parents: a8df35e
Author: Guillaume Nodet <[email protected]>
Authored: Fri Jun 6 12:48:26 2014 +0200
Committer: Guillaume Nodet <[email protected]>
Committed: Fri Jun 6 12:48:40 2014 +0200

----------------------------------------------------------------------
 .../filtered-resources/resources/bin/instance   |  17 +-
 .../resources/bin/instance.bat                  |   6 +-
 .../karaf/instance/command/RestartCommand.java  |  83 ++++++++
 .../apache/karaf/instance/core/Instance.java    |   2 +
 .../instance/core/internal/InstanceImpl.java    |   4 +
 .../core/internal/InstanceServiceImpl.java      | 193 +++++++++++++------
 .../org/apache/karaf/instance/main/Execute.java |   2 +
 7 files changed, 236 insertions(+), 71 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/karaf/blob/b6023114/assemblies/features/framework/src/main/filtered-resources/resources/bin/instance
----------------------------------------------------------------------
diff --git 
a/assemblies/features/framework/src/main/filtered-resources/resources/bin/instance
 
b/assemblies/features/framework/src/main/filtered-resources/resources/bin/instance
index 2c3a8a8..eaf71c5 100755
--- 
a/assemblies/features/framework/src/main/filtered-resources/resources/bin/instance
+++ 
b/assemblies/features/framework/src/main/filtered-resources/resources/bin/instance
@@ -275,15 +275,12 @@ setupDefaults() {
         fi
     fi
 
-    # Add the jars in the lib dir
-    for file in "$KARAF_HOME"/lib/*.jar
-    do
-        if [ -z "$CLASSPATH" ]; then
-            CLASSPATH="$file"
-        else
-            CLASSPATH="$CLASSPATH:$file"
-        fi
-    done
+    # Setup classpath
+    
CLASSPATH="$KARAF_HOME/system/org/apache/karaf/instance/org.apache.karaf.instance.core/${project.version}/org.apache.karaf.shell.instance-${project.version}.jar"
+    
CLASSPATH="$CLASSPATH:$KARAF_HOME/system/org/apache/karaf/shell/org.apache.karaf.shell.core/${project.version}/org.apache.karaf.shell.core-${project.version}.jar"
+    
CLASSPATH="$CLASSPATH:$KARAF_HOME/system/org/ops4j/pax/logging/pax-logging-api/${pax.logging.version}/pax-logging-api-${pax.logging.version}.jar"
+    
CLASSPATH="$CLASSPATH:$KARAF_HOME/system/jline/jline/${jline.version}/jline-${jline.version}.jar"
+
     DEFAULT_JAVA_DEBUG_OPTS="-Xdebug -Xnoagent -Djava.compiler=NONE 
-Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005"
 
     ##
@@ -331,8 +328,6 @@ init() {
 
 run() {
 
-    
CLASSPATH="${KARAF_HOME}/system/org/apache/karaf/instance/org.apache.karaf.instance.command/${project.version}/org.apache.karaf.instance.command-${project.version}.jar:${KARAF_HOME}/system/org/apache/karaf/instance/org.apache.karaf.instance.core/${project.version}/org.apache.karaf.instance.core-${project.version}.jar:${KARAF_HOME}/system/org/apache/karaf/shell/org.apache.karaf.shell.console/${project.version}/org.apache.karaf.shell.console-${project.version}.jar:${KARAF_HOME}/system/org/apache/karaf/shell/org.apache.karaf.shell.table/${project.version}/org.apache.karaf.shell.table-${project.version}.jar:${KARAF_HOME}/system/org/apache/aries/blueprint/org.apache.aries.blueprint.api/${aries.blueprint.api.version}/org.apache.aries.blueprint.api-${aries.blueprint.api.version}.jar:${KARAF_HOME}/system/org/apache/aries/blueprint/org.apache.aries.blueprint.core/${aries.blueprint.core.version}/org.apache.aries.blueprint.core-${aries.blueprint.core.version}.jar:${KARAF_HOME}/system/org/a
 
pache/aries/blueprint/org.apache.aries.blueprint.cm/${aries.blueprint.cm.version}/org.apache.aries.blueprint.cm-${aries.blueprint.cm.version}.jar:${KARAF_HOME}/system/org/ops4j/pax/logging/pax-logging-api/${pax.logging.version}/pax-logging-api-${pax.logging.version}.jar:${KARAF_HOME}/system/org/apache/felix/org.apache.felix.framework/${felix.framework.version}/org.apache.felix.framework-${felix.framework.version}.jar:${KARAF_HOME}/system/jline/jline/${jline.version}/jline-${jline.version}.jar:$CLASSPATH"
-
     if $cygwin; then
         KARAF_HOME=`cygpath --path --windows "$KARAF_HOME"`
         KARAF_BASE=`cygpath --path --windows "$KARAF_BASE"`

http://git-wip-us.apache.org/repos/asf/karaf/blob/b6023114/assemblies/features/framework/src/main/filtered-resources/resources/bin/instance.bat
----------------------------------------------------------------------
diff --git 
a/assemblies/features/framework/src/main/filtered-resources/resources/bin/instance.bat
 
b/assemblies/features/framework/src/main/filtered-resources/resources/bin/instance.bat
index bb2a911..fbfe266 100644
--- 
a/assemblies/features/framework/src/main/filtered-resources/resources/bin/instance.bat
+++ 
b/assemblies/features/framework/src/main/filtered-resources/resources/bin/instance.bat
@@ -139,7 +139,11 @@ goto :EOF
 
 :CLASSPATH_END
 
-set 
CLASSPATH=%KARAF_HOME%\system\org\apache\karaf\instance\org.apache.karaf.instance.command\${project.version}\org.apache.karaf.instance.command-${project.version}.jar;%KARAF_HOME%\system\org\apache\karaf\instance\org.apache.karaf.instance.core\${project.version}\org.apache.karaf.instance.core-${project.version}.jar;%KARAF_HOME%\system\org\apache\karaf\shell\org.apache.karaf.shell.console\${project.version}\org.apache.karaf.shell.console-${project.version}.jar;%KARAF_HOME%\system\org\apache\karaf\shell\org.apache.karaf.shell.table\${project.version}\org.apache.karaf.shell.table-${project.version}.jar;%KARAF_HOME%\system\org\apache\aries\blueprint\org.apache.aries.blueprint.api\${aries.blueprint.api.version}\org.apache.aries.blueprint.api-${aries.blueprint.api.version}.jar;%KARAF_HOME%\system\org\apache\aries\blueprint\org.apache.aries.blueprint.core\${aries.blueprint.core.version}\org.apache.aries.blueprint.core-${aries.blueprint.core.version}.jar;%KARAF_HOME%\system\org\apache\ar
 
ies\blueprint\org.apache.aries.blueprint.cm\${aries.blueprint.cm.version}\org.apache.aries.blueprint.cm-${aries.blueprint.cm.version}.jar;%KARAF_HOME%\system\org\ops4j\pax\logging\pax-logging-api\${pax.logging.version}\pax-logging-api-${pax.logging.version}.jar;%KARAF_HOME%\system\org\apache\felix\org.apache.felix.framework\${felix.framework.version}\org.apache.felix.framework-${felix.framework.version}.jar;%KARAF_HOME%\system\jline\jline\${jline.version}\jline-${jline.version}.jar;%CLASSPATH%
+set 
CLASSPATH=%KARAF_HOME%\system\org\apache\karaf\instance\org.apache.karaf.instance.core\${project.version}\org.apache.karaf.instance.core-${project.version}.jar
+set 
CLASSPATH=%CLASSPATH%;%KARAF_HOME%\system\org\apache\karaf\shell\org.apache.karaf.shell.core\${project.version}\org.apache.karaf.shell.core-${project.version}.jar
+set 
CLASSPATH=%CLASSPATH%;%KARAF_HOME%\system\org\ops4j\pax\logging\pax-logging-api\${pax.logging.version}\pax-logging-api-${pax.logging.version}.jar
+set 
CLASSPATH=%CLASSPATH%;%KARAF_HOME%\system\jline\jline\${jline.version}\jline-${jline.version}.jar
+
 
 :EXECUTE
     if "%SHIFT%" == "true" SET ARGS=%2 %3 %4 %5 %6 %7 %8

http://git-wip-us.apache.org/repos/asf/karaf/blob/b6023114/instance/src/main/java/org/apache/karaf/instance/command/RestartCommand.java
----------------------------------------------------------------------
diff --git 
a/instance/src/main/java/org/apache/karaf/instance/command/RestartCommand.java 
b/instance/src/main/java/org/apache/karaf/instance/command/RestartCommand.java
new file mode 100644
index 0000000..7a22348
--- /dev/null
+++ 
b/instance/src/main/java/org/apache/karaf/instance/command/RestartCommand.java
@@ -0,0 +1,83 @@
+/*
+ * 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.karaf.instance.command;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.karaf.instance.command.completers.InstanceCompleter;
+import org.apache.karaf.instance.core.Instance;
+import org.apache.karaf.shell.api.action.Argument;
+import org.apache.karaf.shell.api.action.Command;
+import org.apache.karaf.shell.api.action.Completion;
+import org.apache.karaf.shell.api.action.Option;
+import org.apache.karaf.shell.api.action.lifecycle.Service;
+import org.apache.karaf.shell.support.MultiException;
+
+@Command(scope = "instance", name = "restart", description = "Restart an 
existing container instance.")
+@Service
+public class RestartCommand extends InstanceCommandSupport {
+                      
+    @Option(name = "-d", aliases = { "--debug"}, description = "Start the 
instance in debug mode", required = false, multiValued = false)
+    private boolean debug; 
+    
+    @Option(name = "-o", aliases = { "--java-opts"}, description = "Java 
options when launching the instance", required = false, multiValued = false)
+    private String javaOpts;
+
+    @Argument(index = 0, name = "name", description = "The name of the 
container instance", required = true, multiValued = true)
+    @Completion(InstanceCompleter.class)
+    private List<String> instances = null;
+
+    static final String DEBUG_OPTS = " -Xdebug -Xnoagent -Djava.compiler=NONE 
-Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005";
+    static final String DEFAULT_OPTS = "-server -Xmx512M 
-Dcom.sun.management.jmxremote";
+
+    protected Object doExecute() throws Exception {
+        MultiException exception = new MultiException("Error starting 
instance(s)");
+        List<Instance> toWaitFor = new ArrayList<>();
+        for (Instance instance : getMatchingInstances(instances)) {
+            try {
+                String opts = javaOpts;
+                if (opts == null) {
+                    opts = instance.getJavaOpts();
+                }
+                if (opts == null) {
+                    opts = DEFAULT_OPTS;
+                }
+                if (debug) {
+                    opts += DEBUG_OPTS;
+                }
+                instance.restart(opts);
+            } catch (Exception e) {
+                exception.addException(e);
+            }
+        }
+        exception.throwIfExceptions();
+        while (true) {
+            boolean allStarted = true;
+            for (Instance child : toWaitFor) {
+                allStarted &= Instance.STARTED.equals(child.getState());
+            }
+            if (allStarted) {
+                break;
+            } else {
+                Thread.sleep(500);
+            }
+        }
+        return null;
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/karaf/blob/b6023114/instance/src/main/java/org/apache/karaf/instance/core/Instance.java
----------------------------------------------------------------------
diff --git 
a/instance/src/main/java/org/apache/karaf/instance/core/Instance.java 
b/instance/src/main/java/org/apache/karaf/instance/core/Instance.java
index 5e78bb2..ee1102d 100644
--- a/instance/src/main/java/org/apache/karaf/instance/core/Instance.java
+++ b/instance/src/main/java/org/apache/karaf/instance/core/Instance.java
@@ -53,6 +53,8 @@ public interface Instance {
 
     void changeJavaOpts(String javaOpts) throws Exception;
 
+    void restart(String javaOpts) throws Exception;
+
     void start(String javaOpts) throws Exception;
 
     void stop() throws Exception;

http://git-wip-us.apache.org/repos/asf/karaf/blob/b6023114/instance/src/main/java/org/apache/karaf/instance/core/internal/InstanceImpl.java
----------------------------------------------------------------------
diff --git 
a/instance/src/main/java/org/apache/karaf/instance/core/internal/InstanceImpl.java
 
b/instance/src/main/java/org/apache/karaf/instance/core/internal/InstanceImpl.java
index edc4ec5..95c1ef2 100644
--- 
a/instance/src/main/java/org/apache/karaf/instance/core/internal/InstanceImpl.java
+++ 
b/instance/src/main/java/org/apache/karaf/instance/core/internal/InstanceImpl.java
@@ -88,6 +88,10 @@ public class InstanceImpl implements Instance {
         service.changeInstanceJavaOpts(name, javaOpts);
     }
 
+    public void restart(String javaOpts) throws Exception {
+        service.restartInstance(name, javaOpts);
+    }
+
     public void start(String javaOpts) throws Exception {
         service.startInstance(name, javaOpts);
     }

http://git-wip-us.apache.org/repos/asf/karaf/blob/b6023114/instance/src/main/java/org/apache/karaf/instance/core/internal/InstanceServiceImpl.java
----------------------------------------------------------------------
diff --git 
a/instance/src/main/java/org/apache/karaf/instance/core/internal/InstanceServiceImpl.java
 
b/instance/src/main/java/org/apache/karaf/instance/core/internal/InstanceServiceImpl.java
index ca57c80..87b02cc 100644
--- 
a/instance/src/main/java/org/apache/karaf/instance/core/internal/InstanceServiceImpl.java
+++ 
b/instance/src/main/java/org/apache/karaf/instance/core/internal/InstanceServiceImpl.java
@@ -19,6 +19,7 @@ package org.apache.karaf.instance.core.internal;
 import org.apache.karaf.instance.core.Instance;
 import org.apache.karaf.instance.core.InstanceService;
 import org.apache.karaf.instance.core.InstanceSettings;
+import org.apache.karaf.instance.main.Execute;
 import org.apache.karaf.jpm.Process;
 import org.apache.karaf.jpm.impl.ProcessBuilderFactoryImpl;
 import org.apache.karaf.jpm.impl.ScriptUtils;
@@ -49,6 +50,7 @@ import java.util.List;
 import java.util.Map;
 import java.util.Properties;
 import java.util.Scanner;
+import java.util.TreeMap;
 
 public class InstanceServiceImpl implements InstanceService {
 
@@ -410,71 +412,144 @@ public class InstanceServiceImpl implements 
InstanceService {
                 if (instance.pid != 0) {
                     throw new IllegalStateException("Instance already 
started");
                 }
-                String opts = javaOpts;
-                if (opts == null || opts.length() == 0) {
-                    opts = instance.opts;
-                }
-                if (opts == null || opts.length() == 0) {
-                    opts = DEFAULT_JAVA_OPTS;
-                }
+                doStart(instance, name, javaOpts);
+                return null;
+            }
+
+        });
+    }
+
+    private void doStart(InstanceState instance, String name, String javaOpts) 
throws IOException {
+        String opts = javaOpts;
+        if (opts == null || opts.length() == 0) {
+            opts = instance.opts;
+        }
+        if (opts == null || opts.length() == 0) {
+            opts = DEFAULT_JAVA_OPTS;
+        }
+
+        // fallback and read karafOpts from KARAF_OPTS environment if no 
System property present
+        String karafOptsEnv = System.getenv("KARAF_OPTS");
+        String karafOpts = System.getProperty("karaf.opts", karafOptsEnv != 
null ? karafOptsEnv : "");
 
-                // fallback and read karafOpts from KARAF_OPTS environment if 
no System property present
-                String karafOptsEnv = System.getenv("KARAF_OPTS");
-                String karafOpts = System.getProperty("karaf.opts", 
karafOptsEnv != null ? karafOptsEnv : "");
-                
-                String location = instance.loc;
-
-                File libDir = new File(System.getProperty("karaf.home"), 
"lib");
-                File childLibDir = new File(location, "lib");
-                
-                StringBuilder classpath = classpathFromLibDir(libDir);
-                StringBuilder childClasspath = 
classpathFromLibDir(childLibDir);
-                if (childClasspath.length() > 0 && 
!libDir.equals(childLibDir)) {
+        String location = instance.loc;
+
+        File libDir = new File(System.getProperty("karaf.home"), "lib");
+        File childLibDir = new File(location, "lib");
+
+        StringBuilder classpath = classpathFromLibDir(libDir);
+        StringBuilder childClasspath = classpathFromLibDir(childLibDir);
+        if (childClasspath.length() > 0 && !libDir.equals(childLibDir)) {
+            classpath.append(System.getProperty("path.separator"));
+            classpath.append(childClasspath);
+        }
+
+        String command = "\""
+                + new File(System.getProperty("java.home"), 
ScriptUtils.isWindows() ? "bin\\java.exe" : "bin/java").getCanonicalPath()
+                + "\" " + opts
+                + " " + karafOpts
+                + " -Djava.util.logging.config.file=\"" + new File(location, 
"etc/java.util.logging.properties").getCanonicalPath() + "\""
+                + " -Djava.endorsed.dirs=\"" + new File(new File(new 
File(System.getProperty("java.home"), "jre"), "lib"), "endorsed") + 
System.getProperty("path.separator") + new File(new 
File(System.getProperty("java.home"), "lib"), "endorsed") + 
System.getProperty("path.separator") + new File(libDir, 
"endorsed").getCanonicalPath() + "\""
+                + " -Djava.ext.dirs=\"" + new File(new File(new 
File(System.getProperty("java.home"), "jre"), "lib"), "ext") + 
System.getProperty("path.separator") + new File(new 
File(System.getProperty("java.home"), "lib"), "ext") + 
System.getProperty("path.separator") + new File(libDir, 
"ext").getCanonicalPath() + "\""
+                + " -Dkaraf.home=\"" + System.getProperty("karaf.home") + "\""
+                + " -Dkaraf.base=\"" + new File(location).getCanonicalPath() + 
"\""
+                + " -Dkaraf.data=\"" + new File(new 
File(location).getCanonicalPath(), "data") + "\""
+                + " -Dkaraf.etc=\"" + new File(new 
File(location).getCanonicalPath(), "etc") + "\""
+                + " 
-Djavax.management.builder.initial=org.apache.karaf.management.boot.KarafMBeanServerBuilder"
+                + " -Dkaraf.startLocalConsole=false"
+                + " -Dkaraf.startRemoteShell=true"
+                + " -classpath \"" + classpath.toString() + "\""
+                + " org.apache.karaf.main.Main";
+        LOGGER.debug("Starting instance " + name + " with command: " + 
command);
+        Process process = new ProcessBuilderFactoryImpl().newBuilder()
+                .directory(new File(location))
+                .command(command)
+                .start();
+        instance.pid = process.getPid();
+    }
+
+    private StringBuilder classpathFromLibDir(File libDir) throws IOException {
+        File[] jars = libDir.listFiles(new FilenameFilter() {
+            public boolean accept(File dir, String name) {
+                return name.endsWith(".jar");
+            }
+        });
+        StringBuilder classpath = new StringBuilder();
+        if (jars != null) {
+            for (File jar : jars) {
+                if (classpath.length() > 0) {
                     classpath.append(System.getProperty("path.separator"));
-                    classpath.append(childClasspath);
-                }    
-
-                String command = "\""
-                        + new File(System.getProperty("java.home"), 
ScriptUtils.isWindows() ? "bin\\java.exe" : "bin/java").getCanonicalPath()
-                        + "\" " + opts
-                        + " " + karafOpts
-                        + " -Djava.util.logging.config.file=\"" + new 
File(location, "etc/java.util.logging.properties").getCanonicalPath() + "\""
-                        + " -Djava.endorsed.dirs=\"" + new File(new File(new 
File(System.getProperty("java.home"), "jre"), "lib"), "endorsed") + 
System.getProperty("path.separator") + new File(new 
File(System.getProperty("java.home"), "lib"), "endorsed") + 
System.getProperty("path.separator") + new File(libDir, 
"endorsed").getCanonicalPath() + "\""
-                        + " -Djava.ext.dirs=\"" + new File(new File(new 
File(System.getProperty("java.home"), "jre"), "lib"), "ext") + 
System.getProperty("path.separator") + new File(new 
File(System.getProperty("java.home"), "lib"), "ext") + 
System.getProperty("path.separator") + new File(libDir, 
"ext").getCanonicalPath() + "\""
-                        + " -Dkaraf.home=\"" + 
System.getProperty("karaf.home") + "\""
-                        + " -Dkaraf.base=\"" + new 
File(location).getCanonicalPath() + "\""
-                        + " -Dkaraf.data=\"" + new File(new 
File(location).getCanonicalPath(), "data") + "\""
-                        + " -Dkaraf.etc=\"" + new File(new 
File(location).getCanonicalPath(), "etc") + "\""
-                        + " 
-Djavax.management.builder.initial=org.apache.karaf.management.boot.KarafMBeanServerBuilder"
-                        + " -Dkaraf.startLocalConsole=false"
-                        + " -Dkaraf.startRemoteShell=true"
-                        + " -classpath \"" + classpath.toString() + "\""
-                        + " org.apache.karaf.main.Main";
-                LOGGER.debug("Starting instance " + name + " with command: " + 
command);
-                org.apache.karaf.jpm.Process process = new 
ProcessBuilderFactoryImpl().newBuilder()
-                        .directory(new File(location))
-                        .command(command)
-                        .start();
-                instance.pid = process.getPid();
-                return null;
+                }
+                classpath.append(jar.getCanonicalPath());
             }
+        }
+        return classpath;
+    }
 
-            private StringBuilder classpathFromLibDir(File libDir) throws 
IOException {
-                File[] jars = libDir.listFiles(new FilenameFilter() {
-                    public boolean accept(File dir, String name) {
-                        return name.endsWith(".jar");
-                    }
-                });
-                StringBuilder classpath = new StringBuilder();
-                if (jars != null) {
-                    for (File jar : jars) {
-                        if (classpath.length() > 0) {
-                            
classpath.append(System.getProperty("path.separator"));
-                        }
-                        classpath.append(jar.getCanonicalPath());
+    private void addJar(StringBuilder sb, String groupId, String artifactId) {
+        File artifactDir = new File(System.getProperty("karaf.home") + 
File.separator +
+                                    "system" + File.separator +
+                                    groupId.replaceAll("\\.", File.separator) 
+ File.separator +
+                                    artifactId + File.separator);
+        TreeMap<String, File> jars = new TreeMap<>();
+        String[] versions = artifactDir.list();
+        if (versions != null) {
+            for (String version : versions) {
+                File jar = new File(artifactDir, version + File.separator + 
artifactId + "-" + version + ".jar");
+                if (jar.exists()) {
+                    jars.put(version, jar);
+                }
+            }
+        }
+        if (jars.isEmpty()) {
+            throw new IllegalStateException("Cound not find jar for " + 
groupId + "/" + artifactId);
+        }
+        if (sb.length() > 0) {
+            sb.append(File.pathSeparator);
+        }
+        sb.append(jars.lastEntry().getValue().getAbsolutePath());
+    }
+
+    public void restartInstance(final String name, final String javaOpts) {
+        execute(new Task<Object>() {
+            public Object call(State state) throws IOException {
+                InstanceState instance = state.instances.get(name);
+                if (instance == null) {
+                    throw new IllegalArgumentException("Instance " + name + " 
not found");
+                }
+                String current = System.getProperty("karaf.name");
+                if (name.equals(current)) {
+                    String location = System.getProperty("karaf.home");
+                    StringBuilder classpath = new StringBuilder();
+                    addJar(classpath, "org.apache.karaf.instance", 
"org.apache.karaf.instance.core");
+                    addJar(classpath, "org.apache.karaf.shell", 
"org.apache.karaf.shell.core");
+                    addJar(classpath, "org.ops4j.pax.logging", 
"pax-logging-api");
+                    addJar(classpath, "jline", "jline");
+                    String command = "\""
+                            + new File(System.getProperty("java.home"), 
ScriptUtils.isWindows() ? "bin\\java.exe" : "bin/java").getCanonicalPath()
+                            + "\" "
+                            + " -Djava.util.logging.config.file=\"" + new 
File(location, "etc/java.util.logging.properties").getCanonicalPath() + "\""
+                            + " -Dkaraf.home=\"" + 
System.getProperty("karaf.home") + "\""
+                            + " -Dkaraf.base=\"" + new 
File(location).getCanonicalPath() + "\""
+                            + " -Dkaraf.data=\"" + new File(new 
File(location).getCanonicalPath(), "data") + "\""
+                            + " -Dkaraf.etc=\"" + new File(new 
File(location).getCanonicalPath(), "etc") + "\""
+                            + " -Dkaraf.instances=\"" + 
System.getProperty("karaf.instances") + "\""
+                            + " 
-Djavax.management.builder.initial=org.apache.karaf.management.boot.KarafMBeanServerBuilder"
+                            + " -classpath \"" + classpath.toString() + "\""
+                            + " " + Execute.class.getName()
+                            + " restart --java-opts \"" + javaOpts + "\" " + 
name;
+                    org.apache.karaf.jpm.Process process = new 
ProcessBuilderFactoryImpl().newBuilder()
+                            .directory(new 
File(System.getProperty("karaf.home")))
+                            .command(command)
+                            .start();
+                } else {
+                    checkPid(instance);
+                    if (instance.pid != 0) {
+                        cleanShutdown(instance);
                     }
+                    doStart(instance, name, javaOpts);
                 }
-                return classpath;
+                return null;
             }
         });
     }

http://git-wip-us.apache.org/repos/asf/karaf/blob/b6023114/instance/src/main/java/org/apache/karaf/instance/main/Execute.java
----------------------------------------------------------------------
diff --git a/instance/src/main/java/org/apache/karaf/instance/main/Execute.java 
b/instance/src/main/java/org/apache/karaf/instance/main/Execute.java
index 591873e..d94276a 100644
--- a/instance/src/main/java/org/apache/karaf/instance/main/Execute.java
+++ b/instance/src/main/java/org/apache/karaf/instance/main/Execute.java
@@ -33,6 +33,7 @@ import org.apache.karaf.instance.command.DestroyCommand;
 import org.apache.karaf.instance.command.InstanceCommandSupport;
 import org.apache.karaf.instance.command.ListCommand;
 import org.apache.karaf.instance.command.RenameCommand;
+import org.apache.karaf.instance.command.RestartCommand;
 import org.apache.karaf.instance.command.StartCommand;
 import org.apache.karaf.instance.command.StatusCommand;
 import org.apache.karaf.instance.command.StopCommand;
@@ -54,6 +55,7 @@ public class Execute {
             DestroyCommand.class,
             ListCommand.class,
             RenameCommand.class,
+            RestartCommand.class,
             StartCommand.class,
             StatusCommand.class,
             StopCommand.class};

Reply via email to