You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@felix.apache.org by gn...@apache.org on 2009/09/08 20:37:14 UTC
svn commit: r812616 - in /felix/trunk/karaf: assembly/src/main/descriptors/
assembly/src/main/distribution/unix-shell/bin/
assembly/src/main/filtered-resources/bin/ gshell/gshell-admin/
gshell/gshell-admin/src/main/java/org/apache/felix/karaf/gshell/ad...
Author: gnodet
Date: Tue Sep 8 18:37:13 2009
New Revision: 812616
URL: http://svn.apache.org/viewvc?rev=812616&view=rev
Log:
FELIX-1547: OS shell level admin commands for Karaf
Added:
felix/trunk/karaf/assembly/src/main/filtered-resources/bin/
felix/trunk/karaf/assembly/src/main/filtered-resources/bin/admin (contents, props changed)
- copied, changed from r812566, felix/trunk/karaf/assembly/src/main/distribution/unix-shell/bin/karaf
felix/trunk/karaf/assembly/src/main/filtered-resources/bin/admin.bat
felix/trunk/karaf/gshell/gshell-admin/src/main/java/org/apache/felix/karaf/gshell/admin/main/
felix/trunk/karaf/gshell/gshell-admin/src/main/java/org/apache/felix/karaf/gshell/admin/main/Execute.java
felix/trunk/karaf/gshell/gshell-admin/src/main/resources/org/apache/felix/karaf/gshell/admin/bin/start
- copied, changed from r812566, felix/trunk/karaf/gshell/gshell-admin/src/main/resources/org/apache/felix/karaf/gshell/admin/bin/karaf
felix/trunk/karaf/gshell/gshell-admin/src/main/resources/org/apache/felix/karaf/gshell/admin/bin/start.bat
- copied, changed from r812566, felix/trunk/karaf/gshell/gshell-admin/src/main/resources/org/apache/felix/karaf/gshell/admin/bin/karaf.bat
felix/trunk/karaf/gshell/gshell-admin/src/main/resources/org/apache/felix/karaf/gshell/admin/bin/stop
- copied, changed from r812566, felix/trunk/karaf/gshell/gshell-admin/src/main/resources/org/apache/felix/karaf/gshell/admin/bin/karaf
felix/trunk/karaf/gshell/gshell-admin/src/main/resources/org/apache/felix/karaf/gshell/admin/bin/stop.bat
- copied, changed from r812566, felix/trunk/karaf/gshell/gshell-admin/src/main/resources/org/apache/felix/karaf/gshell/admin/bin/karaf.bat
felix/trunk/karaf/gshell/gshell-admin/src/test/java/org/apache/felix/karaf/gshell/
felix/trunk/karaf/gshell/gshell-admin/src/test/java/org/apache/felix/karaf/gshell/admin/
felix/trunk/karaf/gshell/gshell-admin/src/test/java/org/apache/felix/karaf/gshell/admin/main/
felix/trunk/karaf/gshell/gshell-admin/src/test/java/org/apache/felix/karaf/gshell/admin/main/ExecuteTest.java
Removed:
felix/trunk/karaf/gshell/gshell-admin/src/main/resources/org/apache/felix/karaf/gshell/admin/bin/karaf
felix/trunk/karaf/gshell/gshell-admin/src/main/resources/org/apache/felix/karaf/gshell/admin/bin/karaf.bat
Modified:
felix/trunk/karaf/assembly/src/main/descriptors/unix-bin.xml
felix/trunk/karaf/assembly/src/main/descriptors/windows-bin.xml
felix/trunk/karaf/assembly/src/main/distribution/unix-shell/bin/karaf
felix/trunk/karaf/gshell/gshell-admin/pom.xml
felix/trunk/karaf/gshell/gshell-admin/src/main/java/org/apache/felix/karaf/gshell/admin/internal/AdminServiceImpl.java
felix/trunk/karaf/gshell/gshell-admin/src/main/java/org/apache/felix/karaf/gshell/admin/internal/InstanceImpl.java
Modified: felix/trunk/karaf/assembly/src/main/descriptors/unix-bin.xml
URL: http://svn.apache.org/viewvc/felix/trunk/karaf/assembly/src/main/descriptors/unix-bin.xml?rev=812616&r1=812615&r2=812616&view=diff
==============================================================================
--- felix/trunk/karaf/assembly/src/main/descriptors/unix-bin.xml (original)
+++ felix/trunk/karaf/assembly/src/main/descriptors/unix-bin.xml Tue Sep 8 18:37:13 2009
@@ -45,6 +45,15 @@
<lineEnding>unix</lineEnding>
</fileSet>
<fileSet>
+ <directory>target/classes/bin</directory>
+ <outputDirectory>/bin/</outputDirectory>
+ <lineEnding>unix</lineEnding>
+ <fileMode>0755</fileMode>
+ <includes>
+ <include>admin</include>
+ </includes>
+ </fileSet>
+ <fileSet>
<directory>target/classes/etc</directory>
<outputDirectory>/etc/</outputDirectory>
<lineEnding>unix</lineEnding>
Modified: felix/trunk/karaf/assembly/src/main/descriptors/windows-bin.xml
URL: http://svn.apache.org/viewvc/felix/trunk/karaf/assembly/src/main/descriptors/windows-bin.xml?rev=812616&r1=812615&r2=812616&view=diff
==============================================================================
--- felix/trunk/karaf/assembly/src/main/descriptors/windows-bin.xml (original)
+++ felix/trunk/karaf/assembly/src/main/descriptors/windows-bin.xml Tue Sep 8 18:37:13 2009
@@ -46,6 +46,14 @@
<lineEnding>dos</lineEnding>
</fileSet>
<fileSet>
+ <directory>target/classes/bin</directory>
+ <outputDirectory>/bin/</outputDirectory>
+ <lineEnding>dos</lineEnding>
+ <includes>
+ <include>admin.bat</include>
+ </includes>
+ </fileSet>
+ <fileSet>
<directory>target/classes/etc</directory>
<outputDirectory>/etc/</outputDirectory>
<lineEnding>dos</lineEnding>
Modified: felix/trunk/karaf/assembly/src/main/distribution/unix-shell/bin/karaf
URL: http://svn.apache.org/viewvc/felix/trunk/karaf/assembly/src/main/distribution/unix-shell/bin/karaf?rev=812616&r1=812615&r2=812616&view=diff
==============================================================================
--- felix/trunk/karaf/assembly/src/main/distribution/unix-shell/bin/karaf (original)
+++ felix/trunk/karaf/assembly/src/main/distribution/unix-shell/bin/karaf Tue Sep 8 18:37:13 2009
@@ -285,12 +285,12 @@
KARAF_BASE=`cygpath --path --windows "$KARAF_BASE"`
CLASSPATH=`cygpath --path --windows "$CLASSPATH"`
fi
- exec $JAVA $JAVA_OPTS -Dkaraf.home="$KARAF_HOME" -Dkaraf.base="$KARAF_BASE" -Djava.util.logging.config.file=$KARAF_BASE/etc/java.util.logging.properties $OPTS -classpath "$CLASSPATH" org.apache.felix.karaf.main.Bootstrap $*
+ exec $JAVA $JAVA_OPTS -Dkaraf.home="$KARAF_HOME" -Dkaraf.base="$KARAF_BASE" -Djava.util.logging.config.file=$KARAF_BASE/etc/java.util.logging.properties $OPTS -classpath "$CLASSPATH" org.apache.felix.karaf.main.Bootstrap "$@"
}
main() {
init
- run $@
+ run "$@"
}
-main $@
+main "$@"
Copied: felix/trunk/karaf/assembly/src/main/filtered-resources/bin/admin (from r812566, felix/trunk/karaf/assembly/src/main/distribution/unix-shell/bin/karaf)
URL: http://svn.apache.org/viewvc/felix/trunk/karaf/assembly/src/main/filtered-resources/bin/admin?p2=felix/trunk/karaf/assembly/src/main/filtered-resources/bin/admin&p1=felix/trunk/karaf/assembly/src/main/distribution/unix-shell/bin/karaf&r1=812566&r2=812616&rev=812616&view=diff
==============================================================================
--- felix/trunk/karaf/assembly/src/main/distribution/unix-shell/bin/karaf (original)
+++ felix/trunk/karaf/assembly/src/main/filtered-resources/bin/admin Tue Sep 8 18:37:13 2009
@@ -15,7 +15,6 @@
# See the License for the specific language governing permissions and
# limitations under the License.
#
-# $Id: karaf 979 2005-11-30 22:50:55Z bsnyder $
#
DIRNAME=`dirname $0`
@@ -201,7 +200,7 @@
}
setupDefaults() {
- DEFAULT_JAVA_OPTS="-Xms$JAVA_MIN_MEM -Xmx$JAVA_MAX_MEM "
+ DEFAULT_JAVA_OPTS="-Dstorage.file=${KARAF_HOME}/etc/instances.properties -Xms$JAVA_MIN_MEM -Xmx$JAVA_MAX_MEM "
#Set the JVM_VENDOR specific JVM flags
if [ "$JVM_VENDOR" = "SUN" ]; then
@@ -265,32 +264,21 @@
}
run() {
- OPTS="-Dkaraf.startLocalConsole=true -Dkaraf.startRemoteShell=true"
- case "$1" in
- 'console')
- shift
- ;;
- 'server')
- OPTS="-Dkaraf.startLocalConsole=false -Dkaraf.startRemoteShell=true"
- shift
- ;;
- 'client')
- OPTS="-Dkaraf.startLocalConsole=true -Dkaraf.startRemoteShell=false"
- shift
- ;;
- esac
if $cygwin; then
KARAF_HOME=`cygpath --path --windows "$KARAF_HOME"`
KARAF_BASE=`cygpath --path --windows "$KARAF_BASE"`
CLASSPATH=`cygpath --path --windows "$CLASSPATH"`
fi
- exec $JAVA $JAVA_OPTS -Dkaraf.home="$KARAF_HOME" -Dkaraf.base="$KARAF_BASE" -Djava.util.logging.config.file=$KARAF_BASE/etc/java.util.logging.properties $OPTS -classpath "$CLASSPATH" org.apache.felix.karaf.main.Bootstrap $*
+
+ CLASSPATH=${KARAF_HOME}/system/org/apache/felix/karaf/gshell/org.apache.felix.karaf.gshell.admin/${project.version}/org.apache.felix.karaf.gshell.admin-${project.version}.jar:${KARAF_HOME}/system/org/apache/felix/karaf/gshell/org.apache.felix.karaf.gshell.console/${project.version}/org.apache.felix.karaf.gshell.console-${project.version}.jar:${KARAF_HOME}/system/org/apache/felix/gogo/org.apache.felix.gogo.runtime/${felix.gogo.version}/org.apache.felix.gogo.runtime-${felix.gogo.version}.jar:${KARAF_HOME}/system/org/apache/geronimo/blueprint-bundle/${geronimo.blueprint.version}/blueprint-bundle-${geronimo.blueprint.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
+
+ exec $JAVA $JAVA_OPTS -Dkaraf.home="$KARAF_HOME" -Dkaraf.base="$KARAF_BASE" -Djava.util.logging.config.file=$KARAF_BASE/etc/java.util.logging.properties $OPTS -classpath "$CLASSPATH" org.apache.felix.karaf.gshell.admin.main.Execute "$@"
}
main() {
init
- run $@
+ run "$@"
}
-main $@
+main "$@"
Propchange: felix/trunk/karaf/assembly/src/main/filtered-resources/bin/admin
------------------------------------------------------------------------------
svn:eol-style = native
Added: felix/trunk/karaf/assembly/src/main/filtered-resources/bin/admin.bat
URL: http://svn.apache.org/viewvc/felix/trunk/karaf/assembly/src/main/filtered-resources/bin/admin.bat?rev=812616&view=auto
==============================================================================
--- felix/trunk/karaf/assembly/src/main/filtered-resources/bin/admin.bat (added)
+++ felix/trunk/karaf/assembly/src/main/filtered-resources/bin/admin.bat Tue Sep 8 18:37:13 2009
@@ -0,0 +1,97 @@
+@echo off
+rem
+rem
+rem Licensed to the Apache Software Foundation (ASF) under one or more
+rem contributor license agreements. See the NOTICE file distributed with
+rem this work for additional information regarding copyright ownership.
+rem The ASF licenses this file to You under the Apache License, Version 2.0
+rem (the "License"); you may not use this file except in compliance with
+rem the License. You may obtain a copy of the License at
+rem
+rem http://www.apache.org/licenses/LICENSE-2.0
+rem
+rem Unless required by applicable law or agreed to in writing, software
+rem distributed under the License is distributed on an "AS IS" BASIS,
+rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+rem See the License for the specific language governing permissions and
+rem limitations under the License.
+rem
+rem
+
+if not "%ECHO%" == "" echo %ECHO%
+
+setlocal
+set DIRNAME=%~dp0%
+set PROGNAME=%~nx0%
+set ARGS=%*
+
+goto BEGIN
+
+:warn
+ echo %PROGNAME%: %*
+goto :EOF
+
+:BEGIN
+
+rem # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
+
+if not "%KARAF_HOME%" == "" (
+ call :warn Ignoring predefined value for KARAF_HOME
+)
+set KARAF_HOME=%DIRNAME%..
+if not exist "%KARAF_HOME%" (
+ call :warn KARAF_HOME is not valid: %KARAF_HOME%
+ goto END
+)
+
+if not "%KARAF_BASE%" == "" (
+ if not exist "%KARAF_BASE%" (
+ call :warn KARAF_BASE is not valid: %KARAF_BASE%
+ goto END
+ )
+)
+if "%KARAF_BASE%" == "" (
+ set KARAF_BASE=%KARAF_HOME%
+)
+
+set DEFAULT_JAVA_OPTS=-Dstorage.file="%KARAF_HOME%\etc\instances.properties"
+set DEFAULT_JAVA_DEBUG_OPTS=-Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005
+
+rem Support for loading native libraries
+set PATH=%PATH%;%KARAF_BASE%\lib;%KARAF_HOME%\lib
+
+rem Setup the Java Virtual Machine
+if not "%JAVA%" == "" goto :Check_JAVA_END
+ set JAVA=java
+ if "%JAVA_HOME%" == "" call :warn JAVA_HOME not set; results may vary
+ if not "%JAVA_HOME%" == "" set JAVA=%JAVA_HOME%\bin\java
+ if not exist "%JAVA_HOME%" (
+ call :warn JAVA_HOME is not valid: "%JAVA_HOME%"
+ goto END
+ )
+:Check_JAVA_END
+
+if "%JAVA_OPTS%" == "" set JAVA_OPTS=%DEFAULT_JAVA_OPTS%
+
+if "%KARAF_DEBUG%" == "" goto :KARAF_DEBUG_END
+ rem Use the defaults if JAVA_DEBUG_OPTS was not set
+ if "%JAVA_DEBUG_OPTS%" == "" set JAVA_DEBUG_OPTS=%DEFAULT_JAVA_DEBUG_OPTS%
+
+ set "JAVA_OPTS=%JAVA_DEBUG_OPTS% %JAVA_OPTS%"
+ call :warn Enabling Java debug options: %JAVA_DEBUG_OPTS%
+:KARAF_DEBUG_END
+
+set CLASSPATH=%KARAF_HOME%\system\org\apache\felix\karaf\gshell\org.apache.felix.karaf.gshell.admin\${project.version}\org.apache.felix.karaf.gshell.admin-${project.version}.jar;%KARAF_HOME%\system\org\apache\felix\karaf\gshell\org.apache.felix.karaf.gshell.console\${project.version}\org.apache.felix.karaf.gshell.console-${project.version}.jar;%KARAF_HOME%\system\org\apache\felix\gogo\org.apache.felix.gogo.runtime\${felix.gogo.version}\org.apache.felix.gogo.runtime-${felix.gogo.version}.jar;%KARAF_HOME%\system\org\apache\geronimo\blueprint-bundle\${geronimo.blueprint.version}\blueprint-bundle-${geronimo.blueprint.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
+
+:EXECUTE
+ if "%SHIFT%" == "true" SET ARGS=%2 %3 %4 %5 %6 %7 %8
+ if not "%SHIFT%" == "true" SET ARGS=%1 %2 %3 %4 %5 %6 %7 %8
+ rem Execute the Java Virtual Machine
+ "%JAVA%" %JAVA_OPTS% %OPTS% -classpath "%CLASSPATH%" -Dkaraf.home="%KARAF_HOME%" -Dkaraf.base="%KARAF_BASE%" -Djava.util.logging.config.file=%KARAF_BASE%\etc\java.util.logging.properties org.apache.felix.karaf.gshell.admin.main.Execute %ARGS%
+
+rem # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
+
+:END
+
+endlocal
+
Modified: felix/trunk/karaf/gshell/gshell-admin/pom.xml
URL: http://svn.apache.org/viewvc/felix/trunk/karaf/gshell/gshell-admin/pom.xml?rev=812616&r1=812615&r2=812616&view=diff
==============================================================================
--- felix/trunk/karaf/gshell/gshell-admin/pom.xml (original)
+++ felix/trunk/karaf/gshell/gshell-admin/pom.xml Tue Sep 8 18:37:13 2009
@@ -56,10 +56,23 @@
</dependency>
<dependency>
+ <groupId>org.ops4j.pax.logging</groupId>
+ <artifactId>pax-logging-api</artifactId>
+ <scope>test</scope>
+ </dependency>
+
+ <dependency>
<groupId>org.apache.servicemix.bundles</groupId>
<artifactId>org.apache.servicemix.bundles.junit</artifactId>
<scope>test</scope>
</dependency>
+
+ <dependency>
+ <groupId>org.easymock</groupId>
+ <artifactId>easymockclassextension</artifactId>
+ <version>${easymock.version}</version>
+ <scope>test</scope>
+ </dependency>
</dependencies>
<build>
Modified: felix/trunk/karaf/gshell/gshell-admin/src/main/java/org/apache/felix/karaf/gshell/admin/internal/AdminServiceImpl.java
URL: http://svn.apache.org/viewvc/felix/trunk/karaf/gshell/gshell-admin/src/main/java/org/apache/felix/karaf/gshell/admin/internal/AdminServiceImpl.java?rev=812616&r1=812615&r2=812616&view=diff
==============================================================================
--- felix/trunk/karaf/gshell/gshell-admin/src/main/java/org/apache/felix/karaf/gshell/admin/internal/AdminServiceImpl.java (original)
+++ felix/trunk/karaf/gshell/gshell-admin/src/main/java/org/apache/felix/karaf/gshell/admin/internal/AdminServiceImpl.java Tue Sep 8 18:37:13 2009
@@ -148,10 +148,13 @@
copyFilteredResourceToDir(serviceMixBase, "etc/system.properties", props);
copyFilteredResourceToDir(serviceMixBase, "etc/org.apache.felix.karaf.shell.cfg", props);
if( System.getProperty("os.name").startsWith("Win") ) {
- copyFilteredResourceToDir(serviceMixBase, "bin/karaf.bat", props);
+ copyFilteredResourceToDir(serviceMixBase, "bin/start.bat", props);
+ copyFilteredResourceToDir(serviceMixBase, "bin/stop.bat", props);
} else {
- copyFilteredResourceToDir(serviceMixBase, "bin/karaf", props);
- chmod(new File(serviceMixBase, "bin/karaf"), "a+x");
+ copyFilteredResourceToDir(serviceMixBase, "bin/start", props);
+ copyFilteredResourceToDir(serviceMixBase, "bin/stop", props);
+ chmod(new File(serviceMixBase, "bin/start"), "a+x");
+ chmod(new File(serviceMixBase, "bin/stop"), "a+x");
}
Instance instance = new InstanceImpl(this, name, serviceMixBase.toString());
instances.put(name, instance);
@@ -188,7 +191,7 @@
File outFile = new File(target, resource);
if( !outFile.exists() ) {
println(Ansi.ansi().a("Creating file: ").a(Ansi.Attribute.INTENSITY_BOLD).a(outFile.getPath()).a(Ansi.Attribute.RESET).toString());
- InputStream is = getClass().getClassLoader().getResourceAsStream("/org/apache/felix/karaf/gshell/admin/" + resource);
+ InputStream is = getClass().getClassLoader().getResourceAsStream("org/apache/felix/karaf/gshell/admin/" + resource);
try {
if( text ) {
// Read it line at a time so that we can use the platform line ending when we write it out.
@@ -228,7 +231,7 @@
File outFile = new File(target, resource);
if( !outFile.exists() ) {
println(Ansi.ansi().a("Creating file: ").a(Ansi.Attribute.INTENSITY_BOLD).a(outFile.getPath()).a(Ansi.Attribute.RESET).toString());
- InputStream is = getClass().getClassLoader().getResourceAsStream("/org/apache/felix/karaf/gshell/admin/" + resource);
+ InputStream is = getClass().getClassLoader().getResourceAsStream("org/apache/felix/karaf/gshell/admin/" + resource);
try {
// Read it line at a time so that we can use the platform line ending when we write it out.
PrintStream out = new PrintStream(new FileOutputStream(outFile));
Modified: felix/trunk/karaf/gshell/gshell-admin/src/main/java/org/apache/felix/karaf/gshell/admin/internal/InstanceImpl.java
URL: http://svn.apache.org/viewvc/felix/trunk/karaf/gshell/gshell-admin/src/main/java/org/apache/felix/karaf/gshell/admin/internal/InstanceImpl.java?rev=812616&r1=812615&r2=812616&view=diff
==============================================================================
--- felix/trunk/karaf/gshell/gshell-admin/src/main/java/org/apache/felix/karaf/gshell/admin/internal/InstanceImpl.java (original)
+++ felix/trunk/karaf/gshell/gshell-admin/src/main/java/org/apache/felix/karaf/gshell/admin/internal/InstanceImpl.java Tue Sep 8 18:37:13 2009
@@ -147,7 +147,7 @@
+ " -Dkaraf.startRemoteShell=true"
+ " -classpath " + classpath.toString()
+ " org.apache.felix.karaf.main.Bootstrap";
- LOG.debug("Starting instance with command: " + command);
+ LOG.debug("Starting instance " + name + " with command: " + command);
this.process = ProcessBuilderFactory.newInstance().newBuilder()
.directory(new File(location))
.command(command)
Added: felix/trunk/karaf/gshell/gshell-admin/src/main/java/org/apache/felix/karaf/gshell/admin/main/Execute.java
URL: http://svn.apache.org/viewvc/felix/trunk/karaf/gshell/gshell-admin/src/main/java/org/apache/felix/karaf/gshell/admin/main/Execute.java?rev=812616&view=auto
==============================================================================
--- felix/trunk/karaf/gshell/gshell-admin/src/main/java/org/apache/felix/karaf/gshell/admin/main/Execute.java (added)
+++ felix/trunk/karaf/gshell/gshell-admin/src/main/java/org/apache/felix/karaf/gshell/admin/main/Execute.java Tue Sep 8 18:37:13 2009
@@ -0,0 +1,127 @@
+/*
+ * 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.felix.karaf.gshell.admin.main;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import java.util.TreeMap;
+
+import org.apache.felix.gogo.commands.Action;
+import org.apache.felix.gogo.commands.Command;
+import org.apache.felix.gogo.commands.basic.DefaultActionPreparator;
+import org.apache.felix.karaf.gshell.admin.internal.AdminServiceImpl;
+import org.apache.felix.karaf.gshell.admin.internal.commands.AdminCommandSupport;
+import org.apache.felix.karaf.gshell.admin.internal.commands.CreateCommand;
+import org.apache.felix.karaf.gshell.admin.internal.commands.DestroyCommand;
+import org.apache.felix.karaf.gshell.admin.internal.commands.ListCommand;
+import org.apache.felix.karaf.gshell.admin.internal.commands.StartCommand;
+import org.apache.felix.karaf.gshell.admin.internal.commands.StopCommand;
+import org.apache.felix.karaf.gshell.admin.internal.commands.ChangePortCommand;
+import org.fusesource.jansi.AnsiConsole;
+
+public class Execute {
+ static Class<? extends Action> x = CreateCommand.class;
+ private static final Class<?> [] COMMAND_CLASSES = new Class[] {
+ CreateCommand.class,
+ StartCommand.class,
+ StopCommand.class,
+ DestroyCommand.class,
+ ListCommand.class,
+ ChangePortCommand.class};
+ private static final Map<String, Class<?>> COMMANDS = new TreeMap<String, Class<?>>();
+ static {
+ for (Class<?> c : COMMAND_CLASSES) {
+ Command ann = c.getAnnotation(Command.class);
+ if (ann == null) {
+ continue;
+ }
+ COMMANDS.put(ann.name(), c);
+ }
+ }
+
+ // For testing
+ static boolean exitAllowed = true;
+
+ public static void main(String[] args) throws Exception {
+ AnsiConsole.systemInstall();
+
+ if (args.length == 0) {
+ listCommands();
+ exit(0);
+ }
+
+ Class<?> cls = COMMANDS.get(args[0]);
+ if (cls == null) {
+ System.err.println("Command not found: " + args[0]);
+ exit(-1);
+ }
+
+ String storage = System.getProperty("storage.file");
+ if (storage == null) {
+ System.err.println("System property 'storage.file' is not set. \n" +
+ "This property needs to be set to the full path of the instance.properties file.");
+ exit(-1);
+ }
+ File storageFile = new File(storage);
+ System.setProperty("user.dir", storageFile.getParentFile().getParentFile().getCanonicalPath());
+
+ Object command = cls.newInstance();
+ if (command instanceof AdminCommandSupport) {
+ execute((AdminCommandSupport) command, storageFile, args);
+ } else {
+ System.err.println("Not an admin command: " + args[0]);
+ exit(-1);
+ }
+ }
+
+ static void execute(AdminCommandSupport command, File storageFile, String[] args) throws Exception {
+ DefaultActionPreparator dap = new DefaultActionPreparator();
+ List<Object> params = new ArrayList<Object>(Arrays.asList(args));
+ params.remove(0); // this is the actual command name
+
+ if (!dap.prepare(command, null, params)) {
+ return;
+ }
+
+ AdminServiceImpl admin = new AdminServiceImpl();
+ admin.setStorageLocation(storageFile);
+ admin.init();
+ command.setAdminService(admin);
+ command.execute(null);
+ }
+
+ private static void listCommands() {
+ System.out.println("Available commands:");
+ for (Map.Entry<String, Class<?>> entry : COMMANDS.entrySet()) {
+ Command ann = entry.getValue().getAnnotation(Command.class);
+ System.out.printf(" %s - %s\n", entry.getKey(), ann.description());
+ }
+
+ System.out.println("Type 'command --help' for more help on the specified command.");
+ }
+
+ private static void exit(int rc) {
+ if (exitAllowed) {
+ System.exit(rc);
+ } else {
+ throw new RuntimeException("" + rc);
+ }
+ }
+}
Copied: felix/trunk/karaf/gshell/gshell-admin/src/main/resources/org/apache/felix/karaf/gshell/admin/bin/start (from r812566, felix/trunk/karaf/gshell/gshell-admin/src/main/resources/org/apache/felix/karaf/gshell/admin/bin/karaf)
URL: http://svn.apache.org/viewvc/felix/trunk/karaf/gshell/gshell-admin/src/main/resources/org/apache/felix/karaf/gshell/admin/bin/start?p2=felix/trunk/karaf/gshell/gshell-admin/src/main/resources/org/apache/felix/karaf/gshell/admin/bin/start&p1=felix/trunk/karaf/gshell/gshell-admin/src/main/resources/org/apache/felix/karaf/gshell/admin/bin/karaf&r1=812566&r2=812616&rev=812616&view=diff
==============================================================================
--- felix/trunk/karaf/gshell/gshell-admin/src/main/resources/org/apache/felix/karaf/gshell/admin/bin/karaf (original)
+++ felix/trunk/karaf/gshell/gshell-admin/src/main/resources/org/apache/felix/karaf/gshell/admin/bin/start Tue Sep 8 18:37:13 2009
@@ -19,7 +19,6 @@
################################################################################
KARAF_HOME=${karaf.home}
-KARAF_BASE=${karaf.base}
-export KARAF_BASE
-${KARAF_HOME}/bin/karaf "$*"
+${KARAF_HOME}/bin/admin start ${karaf.name} "$@"
+
Copied: felix/trunk/karaf/gshell/gshell-admin/src/main/resources/org/apache/felix/karaf/gshell/admin/bin/start.bat (from r812566, felix/trunk/karaf/gshell/gshell-admin/src/main/resources/org/apache/felix/karaf/gshell/admin/bin/karaf.bat)
URL: http://svn.apache.org/viewvc/felix/trunk/karaf/gshell/gshell-admin/src/main/resources/org/apache/felix/karaf/gshell/admin/bin/start.bat?p2=felix/trunk/karaf/gshell/gshell-admin/src/main/resources/org/apache/felix/karaf/gshell/admin/bin/start.bat&p1=felix/trunk/karaf/gshell/gshell-admin/src/main/resources/org/apache/felix/karaf/gshell/admin/bin/karaf.bat&r1=812566&r2=812616&rev=812616&view=diff
==============================================================================
--- felix/trunk/karaf/gshell/gshell-admin/src/main/resources/org/apache/felix/karaf/gshell/admin/bin/karaf.bat (original)
+++ felix/trunk/karaf/gshell/gshell-admin/src/main/resources/org/apache/felix/karaf/gshell/admin/bin/start.bat Tue Sep 8 18:37:13 2009
@@ -18,8 +18,6 @@
REM
REM =========================================================================
-SET KARAF_BASE=${karaf.base}
-SETLOCAL
SET KARAF_HOME=${karaf.home}
-%KARAF_HOME%\bin\karaf.bat %*
+%KARAF_HOME%\bin\admin.bat start ${karaf.name}
Copied: felix/trunk/karaf/gshell/gshell-admin/src/main/resources/org/apache/felix/karaf/gshell/admin/bin/stop (from r812566, felix/trunk/karaf/gshell/gshell-admin/src/main/resources/org/apache/felix/karaf/gshell/admin/bin/karaf)
URL: http://svn.apache.org/viewvc/felix/trunk/karaf/gshell/gshell-admin/src/main/resources/org/apache/felix/karaf/gshell/admin/bin/stop?p2=felix/trunk/karaf/gshell/gshell-admin/src/main/resources/org/apache/felix/karaf/gshell/admin/bin/stop&p1=felix/trunk/karaf/gshell/gshell-admin/src/main/resources/org/apache/felix/karaf/gshell/admin/bin/karaf&r1=812566&r2=812616&rev=812616&view=diff
==============================================================================
--- felix/trunk/karaf/gshell/gshell-admin/src/main/resources/org/apache/felix/karaf/gshell/admin/bin/karaf (original)
+++ felix/trunk/karaf/gshell/gshell-admin/src/main/resources/org/apache/felix/karaf/gshell/admin/bin/stop Tue Sep 8 18:37:13 2009
@@ -19,7 +19,6 @@
################################################################################
KARAF_HOME=${karaf.home}
-KARAF_BASE=${karaf.base}
-export KARAF_BASE
-${KARAF_HOME}/bin/karaf "$*"
+${KARAF_HOME}/bin/admin stop ${karaf.name} "$@"
+
Copied: felix/trunk/karaf/gshell/gshell-admin/src/main/resources/org/apache/felix/karaf/gshell/admin/bin/stop.bat (from r812566, felix/trunk/karaf/gshell/gshell-admin/src/main/resources/org/apache/felix/karaf/gshell/admin/bin/karaf.bat)
URL: http://svn.apache.org/viewvc/felix/trunk/karaf/gshell/gshell-admin/src/main/resources/org/apache/felix/karaf/gshell/admin/bin/stop.bat?p2=felix/trunk/karaf/gshell/gshell-admin/src/main/resources/org/apache/felix/karaf/gshell/admin/bin/stop.bat&p1=felix/trunk/karaf/gshell/gshell-admin/src/main/resources/org/apache/felix/karaf/gshell/admin/bin/karaf.bat&r1=812566&r2=812616&rev=812616&view=diff
==============================================================================
--- felix/trunk/karaf/gshell/gshell-admin/src/main/resources/org/apache/felix/karaf/gshell/admin/bin/karaf.bat (original)
+++ felix/trunk/karaf/gshell/gshell-admin/src/main/resources/org/apache/felix/karaf/gshell/admin/bin/stop.bat Tue Sep 8 18:37:13 2009
@@ -18,8 +18,6 @@
REM
REM =========================================================================
-SET KARAF_BASE=${karaf.base}
-SETLOCAL
SET KARAF_HOME=${karaf.home}
-%KARAF_HOME%\bin\karaf.bat %*
+%KARAF_HOME%\bin\admin.bat stop ${karaf.name}
Added: felix/trunk/karaf/gshell/gshell-admin/src/test/java/org/apache/felix/karaf/gshell/admin/main/ExecuteTest.java
URL: http://svn.apache.org/viewvc/felix/trunk/karaf/gshell/gshell-admin/src/test/java/org/apache/felix/karaf/gshell/admin/main/ExecuteTest.java?rev=812616&view=auto
==============================================================================
--- felix/trunk/karaf/gshell/gshell-admin/src/test/java/org/apache/felix/karaf/gshell/admin/main/ExecuteTest.java (added)
+++ felix/trunk/karaf/gshell/gshell-admin/src/test/java/org/apache/felix/karaf/gshell/admin/main/ExecuteTest.java Tue Sep 8 18:37:13 2009
@@ -0,0 +1,160 @@
+/*
+ * 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.felix.karaf.gshell.admin.main;
+
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.PrintStream;
+import java.lang.reflect.Field;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Properties;
+
+import junit.framework.TestCase;
+
+import org.apache.felix.karaf.gshell.admin.AdminService;
+import org.apache.felix.karaf.gshell.admin.internal.AdminServiceImpl;
+import org.apache.felix.karaf.gshell.admin.internal.commands.AdminCommandSupport;
+import org.easymock.IAnswer;
+import org.easymock.classextension.EasyMock;
+
+public class ExecuteTest extends TestCase {
+ private String userDir;
+
+ @Override
+ protected void setUp() throws Exception {
+ super.setUp();
+ Execute.exitAllowed = false;
+ userDir = System.getProperty("user.dir");
+ }
+
+ @Override
+ protected void tearDown() throws Exception {
+ super.tearDown();
+ Execute.exitAllowed = true;
+ System.setProperty("user.dir", userDir);
+ }
+
+ public void testListCommands() throws Exception {
+ PrintStream oldOut = System.out;
+
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ PrintStream capturedOut = new PrintStream(baos);
+ System.setOut(capturedOut);
+
+ try {
+ Execute.main(new String [] {});
+ } catch (RuntimeException re) {
+ assertEquals("0", re.getMessage());
+
+ String s = new String(baos.toByteArray());
+ assertTrue(s.contains("list"));
+ assertTrue(s.contains("create"));
+ assertTrue(s.contains("destroy"));
+ } finally {
+ System.setOut(oldOut);
+ }
+ }
+
+ public void testNonexistingCommand() throws Exception {
+ try {
+ Execute.main(new String [] {"bheuaark"});
+ } catch (RuntimeException re) {
+ assertEquals("-1", re.getMessage());
+ }
+ }
+
+ public void testNoStorageFile() throws Exception {
+ PrintStream oldErr = System.err;
+
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ PrintStream capturedErr = new PrintStream(baos);
+ System.setErr(capturedErr);
+
+ try {
+ Execute.main(new String [] {"create"});
+ } catch (RuntimeException re) {
+ assertEquals("-1", re.getMessage());
+
+ String s = new String(baos.toByteArray());
+ assertTrue(s.contains("storage.file"));
+ assertTrue(s.contains("instance.properties"));
+ } finally {
+ System.setErr(oldErr);
+ }
+ }
+
+ public void testSetDir() throws Exception {
+ Properties oldProps = (Properties) System.getProperties().clone();
+ File tempFile = File.createTempFile(getName(), ".tmp");
+ assertFalse("Precondition failed",
+ tempFile.getParentFile().getParentFile().getCanonicalPath().equals(System.getProperty("user.dir")));
+
+ System.setProperty("storage.file", tempFile.getCanonicalPath());
+ try {
+ Execute.main(new String [] {"list"});
+ assertTrue(tempFile.getParentFile().getParentFile().getCanonicalPath().equals(System.getProperty("user.dir")));
+ } finally {
+ System.setProperties(oldProps);
+ assertNull("Postcondition failed", System.getProperty("storage.file"));
+ tempFile.delete();
+ }
+ }
+
+ public void testExecute() throws Exception {
+ final File tempFile = File.createTempFile(getName(), ".properties");
+ Properties p = new Properties();
+ p.setProperty("port", "1302");
+ FileOutputStream fos = new FileOutputStream(tempFile);
+ p.store(fos, "");
+ fos.close();
+
+ final List<AdminServiceImpl> admins = new ArrayList<AdminServiceImpl>();
+ try {
+ AdminCommandSupport mockCommand = EasyMock.createStrictMock(AdminCommandSupport.class);
+ mockCommand.setAdminService((AdminService) EasyMock.anyObject());
+ EasyMock.expectLastCall().andAnswer(new IAnswer<Object>() {
+ public Object answer() throws Throwable {
+ AdminServiceImpl svc = (AdminServiceImpl) EasyMock.getCurrentArguments()[0];
+ assertEquals(tempFile, svc.getStorageLocation());
+ admins.add(svc);
+ return null;
+ }
+ });
+
+ EasyMock.expect(mockCommand.execute(null)).andAnswer(new IAnswer<Object>() {
+ public Object answer() throws Throwable {
+ // The Admin Service should be initialized at this point.
+ // One way to find this out is by reading out the port number
+ AdminServiceImpl admin = admins.get(0);
+ Field field = AdminServiceImpl.class.getDeclaredField("defaultPortStart");
+ field.setAccessible(true);
+ assertEquals(1302, field.get(admin));
+ return null;
+ }
+ });
+ EasyMock.replay(mockCommand);
+
+ Execute.execute(mockCommand, tempFile, new String [] {"test"});
+
+ EasyMock.verify(mockCommand);
+ } finally {
+ tempFile.delete();
+ }
+ }
+}