You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@servicemix.apache.org by ch...@apache.org on 2007/12/11 22:06:33 UTC

svn commit: r603356 - in /servicemix/smx4/runtime/trunk: assembly/src/main/distribution/binary/bin/ assembly/src/main/distribution/unix-binary/bin/linux/ assembly/src/main/distribution/unix-binary/bin/macosx/ assembly/src/main/distribution/unix-shell/b...

Author: chirino
Date: Tue Dec 11 13:06:17 2007
New Revision: 603356

URL: http://svn.apache.org/viewvc?rev=603356&view=rev
Log:
Moved the java service wrapper into it's own OSGI bundle that folks can optionally install

Added:
    servicemix/smx4/runtime/trunk/gshell/gshell-wrapper/
    servicemix/smx4/runtime/trunk/gshell/gshell-wrapper/.project
    servicemix/smx4/runtime/trunk/gshell/gshell-wrapper/pom.xml   (with props)
    servicemix/smx4/runtime/trunk/gshell/gshell-wrapper/src/
    servicemix/smx4/runtime/trunk/gshell/gshell-wrapper/src/main/
    servicemix/smx4/runtime/trunk/gshell/gshell-wrapper/src/main/filtered-resources/
    servicemix/smx4/runtime/trunk/gshell/gshell-wrapper/src/main/java/
    servicemix/smx4/runtime/trunk/gshell/gshell-wrapper/src/main/java/org/
    servicemix/smx4/runtime/trunk/gshell/gshell-wrapper/src/main/java/org/apache/
    servicemix/smx4/runtime/trunk/gshell/gshell-wrapper/src/main/java/org/apache/servicemix/
    servicemix/smx4/runtime/trunk/gshell/gshell-wrapper/src/main/java/org/apache/servicemix/runtime/
    servicemix/smx4/runtime/trunk/gshell/gshell-wrapper/src/main/java/org/apache/servicemix/runtime/gshell/
    servicemix/smx4/runtime/trunk/gshell/gshell-wrapper/src/main/java/org/apache/servicemix/runtime/gshell/wrapper/
    servicemix/smx4/runtime/trunk/gshell/gshell-wrapper/src/main/java/org/apache/servicemix/runtime/gshell/wrapper/InstallCommand.java   (with props)
    servicemix/smx4/runtime/trunk/gshell/gshell-wrapper/src/main/resources/
    servicemix/smx4/runtime/trunk/gshell/gshell-wrapper/src/main/resources/META-INF/
    servicemix/smx4/runtime/trunk/gshell/gshell-wrapper/src/main/resources/META-INF/spring/
    servicemix/smx4/runtime/trunk/gshell/gshell-wrapper/src/main/resources/META-INF/spring/gshell-osgi.xml   (with props)
    servicemix/smx4/runtime/trunk/gshell/gshell-wrapper/src/main/resources/org/
    servicemix/smx4/runtime/trunk/gshell/gshell-wrapper/src/main/resources/org/apache/
    servicemix/smx4/runtime/trunk/gshell/gshell-wrapper/src/main/resources/org/apache/servicemix/
    servicemix/smx4/runtime/trunk/gshell/gshell-wrapper/src/main/resources/org/apache/servicemix/runtime/
    servicemix/smx4/runtime/trunk/gshell/gshell-wrapper/src/main/resources/org/apache/servicemix/runtime/gshell/
    servicemix/smx4/runtime/trunk/gshell/gshell-wrapper/src/main/resources/org/apache/servicemix/runtime/gshell/wrapper/
    servicemix/smx4/runtime/trunk/gshell/gshell-wrapper/src/main/resources/org/apache/servicemix/runtime/gshell/wrapper/all/
    servicemix/smx4/runtime/trunk/gshell/gshell-wrapper/src/main/resources/org/apache/servicemix/runtime/gshell/wrapper/all/wrapper.conf
    servicemix/smx4/runtime/trunk/gshell/gshell-wrapper/src/main/resources/org/apache/servicemix/runtime/gshell/wrapper/all/wrapper.jar   (with props)
    servicemix/smx4/runtime/trunk/gshell/gshell-wrapper/src/main/resources/org/apache/servicemix/runtime/gshell/wrapper/linux/
    servicemix/smx4/runtime/trunk/gshell/gshell-wrapper/src/main/resources/org/apache/servicemix/runtime/gshell/wrapper/linux/libwrapper.so   (with props)
    servicemix/smx4/runtime/trunk/gshell/gshell-wrapper/src/main/resources/org/apache/servicemix/runtime/gshell/wrapper/linux/wrapper   (with props)
    servicemix/smx4/runtime/trunk/gshell/gshell-wrapper/src/main/resources/org/apache/servicemix/runtime/gshell/wrapper/macosx/
    servicemix/smx4/runtime/trunk/gshell/gshell-wrapper/src/main/resources/org/apache/servicemix/runtime/gshell/wrapper/macosx/libwrapper.jnilib   (with props)
    servicemix/smx4/runtime/trunk/gshell/gshell-wrapper/src/main/resources/org/apache/servicemix/runtime/gshell/wrapper/macosx/wrapper   (with props)
    servicemix/smx4/runtime/trunk/gshell/gshell-wrapper/src/main/resources/org/apache/servicemix/runtime/gshell/wrapper/unix/
    servicemix/smx4/runtime/trunk/gshell/gshell-wrapper/src/main/resources/org/apache/servicemix/runtime/gshell/wrapper/unix/servicemix-service   (with props)
    servicemix/smx4/runtime/trunk/gshell/gshell-wrapper/src/main/resources/org/apache/servicemix/runtime/gshell/wrapper/windows/
    servicemix/smx4/runtime/trunk/gshell/gshell-wrapper/src/main/resources/org/apache/servicemix/runtime/gshell/wrapper/windows/servicemix-service.bat   (with props)
    servicemix/smx4/runtime/trunk/gshell/gshell-wrapper/src/main/resources/org/apache/servicemix/runtime/gshell/wrapper/windows/wrapper.dll   (with props)
    servicemix/smx4/runtime/trunk/gshell/gshell-wrapper/src/main/resources/org/apache/servicemix/runtime/gshell/wrapper/windows/wrapper.exe   (with props)
    servicemix/smx4/runtime/trunk/gshell/gshell-wrapper/src/test/
    servicemix/smx4/runtime/trunk/gshell/gshell-wrapper/src/test/java/
    servicemix/smx4/runtime/trunk/gshell/gshell-wrapper/src/test/resources/
Removed:
    servicemix/smx4/runtime/trunk/assembly/src/main/distribution/binary/bin/wrapper.jar
    servicemix/smx4/runtime/trunk/assembly/src/main/distribution/unix-binary/bin/linux/
    servicemix/smx4/runtime/trunk/assembly/src/main/distribution/unix-binary/bin/macosx/
    servicemix/smx4/runtime/trunk/assembly/src/main/distribution/unix-shell/bin/linux/
    servicemix/smx4/runtime/trunk/assembly/src/main/distribution/unix-shell/bin/macosx/
    servicemix/smx4/runtime/trunk/assembly/src/main/distribution/unix-text/bin/linux/
    servicemix/smx4/runtime/trunk/assembly/src/main/distribution/unix-text/bin/macosx/
    servicemix/smx4/runtime/trunk/assembly/src/main/distribution/windows-binary/bin/win32/
    servicemix/smx4/runtime/trunk/assembly/src/main/distribution/windows-text/bin/win32/
Modified:
    servicemix/smx4/runtime/trunk/gshell/pom.xml

Added: servicemix/smx4/runtime/trunk/gshell/gshell-wrapper/.project
URL: http://svn.apache.org/viewvc/servicemix/smx4/runtime/trunk/gshell/gshell-wrapper/.project?rev=603356&view=auto
==============================================================================
--- servicemix/smx4/runtime/trunk/gshell/gshell-wrapper/.project (added)
+++ servicemix/smx4/runtime/trunk/gshell/gshell-wrapper/.project Tue Dec 11 13:06:17 2007
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.apache.servicemix.runtime.gshell.wrapper</name>
+	<comment>Provides the Service Wrapper GShell integration</comment>
+	<projects>
+		<project>org.apache.servicemix.bundles.cglib-2.1_3</project>
+		<project>org.apache.servicemix.runtime.gshell.core</project>
+		<project>org.apache.servicemix.runtime.main</project>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+	</natures>
+</projectDescription>

Added: servicemix/smx4/runtime/trunk/gshell/gshell-wrapper/pom.xml
URL: http://svn.apache.org/viewvc/servicemix/smx4/runtime/trunk/gshell/gshell-wrapper/pom.xml?rev=603356&view=auto
==============================================================================
--- servicemix/smx4/runtime/trunk/gshell/gshell-wrapper/pom.xml (added)
+++ servicemix/smx4/runtime/trunk/gshell/gshell-wrapper/pom.xml Tue Dec 11 13:06:17 2007
@@ -0,0 +1,112 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+
+    <!--
+
+        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.
+    -->
+
+    <modelVersion>4.0.0</modelVersion>
+
+    <parent>
+        <groupId>org.apache.servicemix.runtime.gshell</groupId>
+        <artifactId>gshell</artifactId>
+        <version>0.1-SNAPSHOT</version>
+    </parent>
+
+    <groupId>org.apache.servicemix.runtime.gshell</groupId>
+    <artifactId>org.apache.servicemix.runtime.gshell.wrapper</artifactId>
+    <packaging>bundle</packaging>
+    <name>ServiceMix Runtime :: GShell Service Wrapper</name>
+
+    <description>
+        Provides the Service Wrapper GShell integration
+    </description>
+
+    <properties>
+        <gshell.osgi.import>
+            org.apache.servicemix.runtime.main.spi.*;resolution:=optional,
+            org.apache.geronimo.gshell*,
+        </gshell.osgi.import>
+        <gshell.osgi.export>
+        </gshell.osgi.export>
+        <gshell.osgi.private>
+          org.apache.servicemix.runtime.gshell.wrapper.*,
+        </gshell.osgi.private>
+    </properties>
+
+    <dependencies>
+      <dependency>
+          <groupId>org.apache.servicemix.runtime.gshell</groupId>
+          <artifactId>org.apache.servicemix.runtime.gshell.core</artifactId>
+          <version>0.1-SNAPSHOT</version>
+      </dependency>
+
+      <dependency>
+          <groupId>org.apache.felix</groupId>
+          <artifactId>org.osgi.core</artifactId>
+          <version>${felix.osgi.version}</version>
+          <scope>provided</scope>
+      </dependency>
+
+      <dependency>
+          <groupId>org.springframework.osgi</groupId>
+          <artifactId>spring-osgi-core</artifactId>
+          <version>${spring.osgi.version}</version>
+      </dependency>
+    </dependencies>
+
+    <build>
+        <resources>
+            <resource>
+                <directory>${pom.basedir}/src/main/resources</directory>
+                <includes>
+                    <include>**/*</include>
+                </includes>
+            </resource>
+            <resource>
+                <directory>${pom.basedir}/src/main/filtered-resources</directory>
+                <filtering>true</filtering>
+                <includes>
+                    <include>**/*</include>
+                </includes>
+            </resource>
+        </resources>
+        <plugins>
+            <plugin>
+                <groupId>org.codehaus.mojo</groupId>
+                <artifactId>exec-maven-plugin</artifactId>
+                <configuration>
+                    <mainClass>Main</mainClass>
+                </configuration>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.felix</groupId>
+                <artifactId>maven-bundle-plugin</artifactId>
+                <configuration>
+                    <instructions>
+                        <Bundle-SymbolicName>${artifactId}</Bundle-SymbolicName>
+                        <Export-Package>org.apache.servicemix.runtime.gshell.wrapper.*;version=${project.version}</Export-Package>
+                        <Import-Package>*</Import-Package>
+                        <Private-Package>!*</Private-Package>
+                        <Spring-Context>*;publish-context:=false</Spring-Context>
+                    </instructions>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
+</project>

Propchange: servicemix/smx4/runtime/trunk/gshell/gshell-wrapper/pom.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: servicemix/smx4/runtime/trunk/gshell/gshell-wrapper/pom.xml
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Propchange: servicemix/smx4/runtime/trunk/gshell/gshell-wrapper/pom.xml
------------------------------------------------------------------------------
    svn:mime-type = text/xml

Added: servicemix/smx4/runtime/trunk/gshell/gshell-wrapper/src/main/java/org/apache/servicemix/runtime/gshell/wrapper/InstallCommand.java
URL: http://svn.apache.org/viewvc/servicemix/smx4/runtime/trunk/gshell/gshell-wrapper/src/main/java/org/apache/servicemix/runtime/gshell/wrapper/InstallCommand.java?rev=603356&view=auto
==============================================================================
--- servicemix/smx4/runtime/trunk/gshell/gshell-wrapper/src/main/java/org/apache/servicemix/runtime/gshell/wrapper/InstallCommand.java (added)
+++ servicemix/smx4/runtime/trunk/gshell/gshell-wrapper/src/main/java/org/apache/servicemix/runtime/gshell/wrapper/InstallCommand.java Tue Dec 11 13:06:17 2007
@@ -0,0 +1,278 @@
+/*
+ * 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.servicemix.runtime.gshell.wrapper;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.io.PrintStream;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Scanner;
+
+import org.apache.geronimo.gshell.clp.Option;
+import org.apache.geronimo.gshell.command.annotation.CommandComponent;
+import org.apache.geronimo.gshell.support.OsgiCommandSupport;
+
+/**
+ * Installs this ServiceMix instance as a service in your operating systems. 
+ *
+ * @version $Rev$ $Date$
+ */
+@CommandComponent(id="wrapper:install", description="Installs this ServiceMix instance as a service in your operating systems.")
+public class InstallCommand
+    extends OsgiCommandSupport
+{
+	
+    @Option(name="-n", aliases={"--name"}, description="The service name that will be used when installing the service.  Defaults to the directory name of the instance.")
+    private String name;
+    @Option(name="-d", aliases={"--display"}, description="The display name of the service.")
+    private String displayName;
+    @Option(name="-D", aliases={"--description"}, description="The description of the service.")
+    private String description="";
+    @Option(name="-s", aliases={"--start-type"}, description="Mode in which the service is installed.  AUTO_START or DEMAND_START")
+    private String startType="AUTO_START";
+
+    protected Object doExecute() throws Exception {
+    	
+    	try {
+    		String name = getName();    		
+    		File base = new File(System.getProperty("servicemix.base"));
+    		File bin = new File(base, "bin");
+    		File etc = new File(base, "etc");
+    		File lib = new File(base, "lib");
+    		
+			HashMap<String, String> props = new HashMap<String, String>();
+			props.put("${servicemix.home}", System.getProperty("servicemix.home"));
+			props.put("${servicemix.base}", base.getPath());
+			props.put("${name}", name);
+			props.put("${displayName}", getDisplayName());
+			props.put("${description}", getDescription());
+			props.put("${startType}", getStartType());
+			
+			String os = System.getProperty("os.name", "Unknown");
+			File serviceFile=null;
+			if( os.startsWith("Win") ) {
+				mkdir(bin);
+				copyResourceToDir(bin, "windows/wrapper.exe", false);
+				serviceFile = new File(bin,"servicemix-service.bat");
+				copyFilteredResourceTo(serviceFile, "macosx/servicemix-service.bat", props);
+				mkdir(lib);
+				copyResourceToDir(lib, "windows/wrapper.dll", false);								
+			} else if( os.startsWith("Mac OS X") ) {
+				mkdir(bin);
+				copyResourceToDir(bin, "macosx/wrapper", false);
+				serviceFile = new File(bin,"servicemix-service");
+				copyFilteredResourceTo(serviceFile, "unix/servicemix-service", props);
+				mkdir(lib);
+				copyResourceToDir(lib, "macosx/libwrapper.jnilib", false);
+				
+				// TODO: figure out how to hook in the service that it starts up
+				// when the machine boots up.
+			} else if( os.startsWith("Linux") ) {
+				mkdir(bin);
+				serviceFile = new File(bin,"servicemix-service");
+				copyFilteredResourceTo(serviceFile, "unix/servicemix-service", props);
+				copyResourceToDir(bin, "linux/wrapper", false);
+				mkdir(lib);
+				copyResourceToDir(lib, "linux/libwrapper.jnilib", false);
+				
+				// TODO: figure out how to hook in the service that it starts up
+				// when the machine boots up.
+			} else {
+		        io.out.println("Your operating system '"+os+"' is not currently supported.");
+		        return 1;
+			}
+
+    		// Install the wrapper jar to the lib directory..
+			mkdir(lib);
+			copyResourceToDir(lib, "all/wrapper.jar", false);
+			mkdir(etc);
+			File wrapperConf = new File(etc,"wrapper.conf");
+			copyFilteredResourceTo(wrapperConf, "all/wrapper.conf", props);
+
+			io.out.println("Setup complete.  You may want to tweak the JVM properties in the wrapper configuration file: "+wrapperConf.getPath());
+			io.out.println("before installing and starting the service.");
+			io.out.println("");
+			if( os.startsWith("Win") ) {
+				io.out.println("To install the service, run: ");
+				io.out.println("  C:> "+serviceFile.getPath()+" install");
+				io.out.println("");
+				io.out.println("Once installed, to start the service run: ");
+				io.out.println("  C:> net start \""+name+"\"");
+				io.out.println("");
+				io.out.println("Once running, to stop the service run: ");
+				io.out.println("  C:> net stop \""+name+"\"");
+				io.out.println("");
+				io.out.println("Once stopped, to remove the installed the service run: ");
+				io.out.println("  C:> "+serviceFile.getPath()+" remove");
+				io.out.println("");
+			} else if( os.startsWith("Mac OS X") ) {
+			} else if( os.startsWith("Linux") ) {
+				io.out.println("The way the service is installed depends upon your flavor of Linux. ");
+				io.out.println("On Redhat Systems you run:");
+				io.out.println("  ln -s "+serviceFile.getPath()+" /etc/init.d/");
+				io.out.println("  service add "+serviceFile.getName());
+				io.out.println("");
+			}
+
+			
+		} catch (Exception e) {
+			e.printStackTrace();
+			throw e;
+		}
+
+        return 0;
+    }
+
+	private void copyResourceToDir(File target, String resource, boolean text) throws Exception {
+		File outFile = new File(target, new File(resource).getName());
+		if( !outFile.exists() ) {
+	        io.out.println("Creating file: "+outFile.getPath()+"");
+			InputStream is = InstallCommand.class.getResourceAsStream(resource);
+			try {
+				if( text ) {
+					// 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));
+					try { 
+						Scanner scanner = new Scanner(is);
+						while (scanner.hasNextLine() ) {
+							String line = scanner.nextLine();
+							out.println(line);
+						}
+					} finally {
+						safeClose(out);
+					}
+				} else {
+					// Binary so just write it out the way it came in.
+					FileOutputStream out = new FileOutputStream(outFile);
+					try {
+						int c=0;
+						while((c=is.read())>=0) {
+							out.write(c);
+						}
+					} finally {
+						safeClose(out);
+					}
+				}
+			} finally {
+				safeClose(is);
+			}
+		}
+	}
+	
+	private void copyFilteredResourceTo(File outFile, String resource, HashMap<String, String> props) throws Exception {
+		if( !outFile.exists() ) {
+	        io.out.println("Creating file: "+outFile.getPath()+"");
+			InputStream is = InstallCommand.class.getResourceAsStream(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));
+				try { 
+					Scanner scanner = new Scanner(is);
+					while (scanner.hasNextLine() ) {
+						String line = scanner.nextLine();
+						line = filter(line, props);
+						out.println(line);
+					}
+				} finally {
+					safeClose(out);
+				}
+			} finally {
+				safeClose(is);
+			}
+		}
+	}
+
+	private void safeClose(InputStream is) throws IOException {
+		if( is==null)
+			return;
+		try {
+			is.close();
+		} catch (Throwable ignore) {
+		}
+	}
+	
+	private void safeClose(OutputStream is) throws IOException {
+		if( is==null)
+			return;
+		try {
+			is.close();
+		} catch (Throwable ignore) {
+		}
+	}
+
+	private String filter(String line, HashMap<String, String> props) {
+		for (Map.Entry<String, String> i : props.entrySet()) {
+			int p1 = line.indexOf(i.getKey());
+			if( p1 >= 0 ) {
+				String l1 = line.substring(0, p1);
+				String l2 = line.substring(p1+i.getKey().length());
+				line = l1+i.getValue()+l2;
+			}
+		}
+		return line;
+	}
+
+	private void mkdir(File file) {
+		if( !file.exists() ) {
+	        io.out.println("Creating dir:@|bold "+file.getPath()+"|");
+			file.mkdirs();
+		}
+	}
+
+	public String getName() {
+		if( name ==  null ) {
+    		File base = new File(System.getProperty("servicemix.base"));
+    		name = base.getName();
+		}
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public String getDisplayName() {
+		if( displayName == null ) {
+			displayName = getName();
+		}
+		return displayName;
+	}
+
+	public void setDisplayName(String displayName) {
+		this.displayName = displayName;
+	}
+
+	public String getDescription() {
+		return description;
+	}
+
+	public void setDescription(String description) {
+		this.description = description;
+	}
+
+	public String getStartType() {
+		return startType;
+	}
+
+	public void setStartType(String startType) {
+		this.startType = startType;
+	}
+}

Propchange: servicemix/smx4/runtime/trunk/gshell/gshell-wrapper/src/main/java/org/apache/servicemix/runtime/gshell/wrapper/InstallCommand.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: servicemix/smx4/runtime/trunk/gshell/gshell-wrapper/src/main/java/org/apache/servicemix/runtime/gshell/wrapper/InstallCommand.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: servicemix/smx4/runtime/trunk/gshell/gshell-wrapper/src/main/resources/META-INF/spring/gshell-osgi.xml
URL: http://svn.apache.org/viewvc/servicemix/smx4/runtime/trunk/gshell/gshell-wrapper/src/main/resources/META-INF/spring/gshell-osgi.xml?rev=603356&view=auto
==============================================================================
--- servicemix/smx4/runtime/trunk/gshell/gshell-wrapper/src/main/resources/META-INF/spring/gshell-osgi.xml (added)
+++ servicemix/smx4/runtime/trunk/gshell/gshell-wrapper/src/main/resources/META-INF/spring/gshell-osgi.xml Tue Dec 11 13:06:17 2007
@@ -0,0 +1,42 @@
+<?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.
+
+-->
+<beans xmlns="http://www.springframework.org/schema/beans"
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xmlns:osgi="http://www.springframework.org/schema/osgi"
+       xmlns:util="http://www.springframework.org/schema/util"
+       xsi:schemaLocation="
+  http://www.springframework.org/schema/beans
+  http://www.springframework.org/schema/beans/spring-beans.xsd
+  http://www.springframework.org/schema/util
+  http://www.springframework.org/schema/util/spring-util.xsd
+  http://www.springframework.org/schema/osgi
+  http://www.springframework.org/schema/osgi/spring-osgi.xsd">
+
+    <!-- wrapper commands -->
+    <bean id="install" class="org.apache.servicemix.runtime.gshell.wrapper.InstallCommand" />
+    
+    <osgi:service ref="install" interface="org.apache.geronimo.gshell.command.Command">
+      <osgi:service-properties>
+        <entry key="shell" value="wrapper"/>
+      	<entry key="name" value="install"/>
+      </osgi:service-properties>
+    </osgi:service>
+
+</beans>
\ No newline at end of file

Propchange: servicemix/smx4/runtime/trunk/gshell/gshell-wrapper/src/main/resources/META-INF/spring/gshell-osgi.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: servicemix/smx4/runtime/trunk/gshell/gshell-wrapper/src/main/resources/META-INF/spring/gshell-osgi.xml
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Propchange: servicemix/smx4/runtime/trunk/gshell/gshell-wrapper/src/main/resources/META-INF/spring/gshell-osgi.xml
------------------------------------------------------------------------------
    svn:mime-type = text/xml

Added: servicemix/smx4/runtime/trunk/gshell/gshell-wrapper/src/main/resources/org/apache/servicemix/runtime/gshell/wrapper/all/wrapper.conf
URL: http://svn.apache.org/viewvc/servicemix/smx4/runtime/trunk/gshell/gshell-wrapper/src/main/resources/org/apache/servicemix/runtime/gshell/wrapper/all/wrapper.conf?rev=603356&view=auto
==============================================================================
--- servicemix/smx4/runtime/trunk/gshell/gshell-wrapper/src/main/resources/org/apache/servicemix/runtime/gshell/wrapper/all/wrapper.conf (added)
+++ servicemix/smx4/runtime/trunk/gshell/gshell-wrapper/src/main/resources/org/apache/servicemix/runtime/gshell/wrapper/all/wrapper.conf Tue Dec 11 13:06:17 2007
@@ -0,0 +1,134 @@
+# ------------------------------------------------------------------------
+# 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.
+# ------------------------------------------------------------------------
+
+#********************************************************************
+# Wrapper Properties
+#********************************************************************
+
+#wrapper.debug=TRUE
+set.default.SERVICEMIX_HOME=${servicemix.home}
+set.default.SERVICEMIX_BASE=${servicemix.base}
+wrapper.working.dir=
+
+# Java Application
+wrapper.java.command=java
+
+# Java Main class.  This class must implement the WrapperListener interface
+#  or guarantee that the WrapperManager class is initialized.  Helper
+#  classes are provided to do this for you.  See the Integration section
+#  of the documentation for details.
+wrapper.java.mainclass=org.tanukisoftware.wrapper.WrapperSimpleApp
+
+# Java Classpath (include wrapper.jar)  Add class path elements as
+#  needed starting from 1
+wrapper.java.classpath.1=%SERVICEMIX_BASE%/lib/wrapper.jar
+wrapper.java.classpath.2=%SERVICEMIX_HOME%/bin/servicemix.jar
+
+# Java Library Path (location of Wrapper.DLL or libwrapper.so)
+wrapper.java.library.path.1=%SERVICEMIX_BASE%/lib/
+
+# Java Additional Parameters
+# note that n is the parameter number starting from 1.
+wrapper.java.additional.1=-Dservicemix.home=%SERVICEMIX_HOME%
+wrapper.java.additional.2=-Dservicemix.base=%SERVICEMIX_BASE%
+wrapper.java.additional.3=-Dcom.sun.management.jmxremote
+wrapper.java.additional.4=-Dservicemix.startLocalConsole=false
+wrapper.java.additional.5=-Dservicemix.startRemoteShell=true
+
+# Uncomment to enable jmx
+#wrapper.java.additional.n=-Dcom.sun.management.jmxremote.port=1616
+#wrapper.java.additional.n=-Dcom.sun.management.jmxremote.authenticate=false
+#wrapper.java.additional.n=-Dcom.sun.management.jmxremote.ssl=false
+
+# Uncomment to enable YourKit profiling
+#wrapper.java.additional.n=-Xrunyjpagent
+
+# Uncomment to enable remote debugging
+#wrapper.java.additional.n=-Xdebug -Xnoagent -Djava.compiler=NONE
+#wrapper.java.additional.n=-Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005
+
+# Initial Java Heap Size (in MB)
+#wrapper.java.initmemory=3
+
+# Maximum Java Heap Size (in MB)
+wrapper.java.maxmemory=512
+
+# Application parameters.  Add parameters as needed starting from 1
+wrapper.app.parameter.1=org.apache.servicemix.runtime.main.Main
+
+#********************************************************************
+# Wrapper Logging Properties
+#********************************************************************
+# Format of output for the console.  (See docs for formats)
+wrapper.console.format=PM
+
+# Log Level for console output.  (See docs for log levels)
+wrapper.console.loglevel=INFO
+
+# Log file to use for wrapper output logging.
+wrapper.logfile=%SERVICEMIX_BASE%/data/log/wrapper.log
+
+# Format of output for the log file.  (See docs for formats)
+wrapper.logfile.format=LPTM
+
+# Log Level for log file output.  (See docs for log levels)
+wrapper.logfile.loglevel=INFO
+
+# Maximum size that the log file will be allowed to grow to before
+#  the log is rolled. Size is specified in bytes.  The default value
+#  of 0, disables log rolling.  May abbreviate with the 'k' (kb) or
+#  'm' (mb) suffix.  For example: 10m = 10 megabytes.
+wrapper.logfile.maxsize=0
+
+# Maximum number of rolled log files which will be allowed before old
+#  files are deleted.  The default value of 0 implies no limit.
+wrapper.logfile.maxfiles=0
+
+# Log Level for sys/event log output.  (See docs for log levels)
+wrapper.syslog.loglevel=NONE
+
+#********************************************************************
+# Wrapper Windows Properties
+#********************************************************************
+# Title to use when running as a console
+wrapper.console.title=${name}
+
+#********************************************************************
+# Wrapper Windows NT/2000/XP Service Properties
+#********************************************************************
+# WARNING - Do not modify any of these properties when an application
+#  using this configuration file has been installed as a service.
+#  Please uninstall the service before modifying this section.  The
+#  service can then be reinstalled.
+
+# Name of the service
+wrapper.ntservice.name=${name}
+
+# Display name of the service
+wrapper.ntservice.displayname=${displayName}
+
+# Description of the service
+wrapper.ntservice.description=${description}
+
+# Service dependencies.  Add dependencies as needed starting from 1
+wrapper.ntservice.dependency.1=
+
+# Mode in which the service is installed.  AUTO_START or DEMAND_START
+wrapper.ntservice.starttype=${startType}
+
+# Allow the service to interact with the desktop.
+wrapper.ntservice.interactive=false

Added: servicemix/smx4/runtime/trunk/gshell/gshell-wrapper/src/main/resources/org/apache/servicemix/runtime/gshell/wrapper/all/wrapper.jar
URL: http://svn.apache.org/viewvc/servicemix/smx4/runtime/trunk/gshell/gshell-wrapper/src/main/resources/org/apache/servicemix/runtime/gshell/wrapper/all/wrapper.jar?rev=603356&view=auto
==============================================================================
Binary file - no diff available.

Propchange: servicemix/smx4/runtime/trunk/gshell/gshell-wrapper/src/main/resources/org/apache/servicemix/runtime/gshell/wrapper/all/wrapper.jar
------------------------------------------------------------------------------
    svn:executable = *

Propchange: servicemix/smx4/runtime/trunk/gshell/gshell-wrapper/src/main/resources/org/apache/servicemix/runtime/gshell/wrapper/all/wrapper.jar
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: servicemix/smx4/runtime/trunk/gshell/gshell-wrapper/src/main/resources/org/apache/servicemix/runtime/gshell/wrapper/linux/libwrapper.so
URL: http://svn.apache.org/viewvc/servicemix/smx4/runtime/trunk/gshell/gshell-wrapper/src/main/resources/org/apache/servicemix/runtime/gshell/wrapper/linux/libwrapper.so?rev=603356&view=auto
==============================================================================
Binary file - no diff available.

Propchange: servicemix/smx4/runtime/trunk/gshell/gshell-wrapper/src/main/resources/org/apache/servicemix/runtime/gshell/wrapper/linux/libwrapper.so
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: servicemix/smx4/runtime/trunk/gshell/gshell-wrapper/src/main/resources/org/apache/servicemix/runtime/gshell/wrapper/linux/wrapper
URL: http://svn.apache.org/viewvc/servicemix/smx4/runtime/trunk/gshell/gshell-wrapper/src/main/resources/org/apache/servicemix/runtime/gshell/wrapper/linux/wrapper?rev=603356&view=auto
==============================================================================
Binary file - no diff available.

Propchange: servicemix/smx4/runtime/trunk/gshell/gshell-wrapper/src/main/resources/org/apache/servicemix/runtime/gshell/wrapper/linux/wrapper
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: servicemix/smx4/runtime/trunk/gshell/gshell-wrapper/src/main/resources/org/apache/servicemix/runtime/gshell/wrapper/macosx/libwrapper.jnilib
URL: http://svn.apache.org/viewvc/servicemix/smx4/runtime/trunk/gshell/gshell-wrapper/src/main/resources/org/apache/servicemix/runtime/gshell/wrapper/macosx/libwrapper.jnilib?rev=603356&view=auto
==============================================================================
Binary file - no diff available.

Propchange: servicemix/smx4/runtime/trunk/gshell/gshell-wrapper/src/main/resources/org/apache/servicemix/runtime/gshell/wrapper/macosx/libwrapper.jnilib
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: servicemix/smx4/runtime/trunk/gshell/gshell-wrapper/src/main/resources/org/apache/servicemix/runtime/gshell/wrapper/macosx/wrapper
URL: http://svn.apache.org/viewvc/servicemix/smx4/runtime/trunk/gshell/gshell-wrapper/src/main/resources/org/apache/servicemix/runtime/gshell/wrapper/macosx/wrapper?rev=603356&view=auto
==============================================================================
Binary file - no diff available.

Propchange: servicemix/smx4/runtime/trunk/gshell/gshell-wrapper/src/main/resources/org/apache/servicemix/runtime/gshell/wrapper/macosx/wrapper
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: servicemix/smx4/runtime/trunk/gshell/gshell-wrapper/src/main/resources/org/apache/servicemix/runtime/gshell/wrapper/unix/servicemix-service
URL: http://svn.apache.org/viewvc/servicemix/smx4/runtime/trunk/gshell/gshell-wrapper/src/main/resources/org/apache/servicemix/runtime/gshell/wrapper/unix/servicemix-service?rev=603356&view=auto
==============================================================================
--- servicemix/smx4/runtime/trunk/gshell/gshell-wrapper/src/main/resources/org/apache/servicemix/runtime/gshell/wrapper/unix/servicemix-service (added)
+++ servicemix/smx4/runtime/trunk/gshell/gshell-wrapper/src/main/resources/org/apache/servicemix/runtime/gshell/wrapper/unix/servicemix-service Tue Dec 11 13:06:17 2007
@@ -0,0 +1,543 @@
+#! /bin/sh
+
+# ------------------------------------------------------------------------
+# 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.
+# ------------------------------------------------------------------------
+
+# Application
+APP_NAME="${name}"
+APP_LONG_NAME="${displayName}"
+
+# Wrapper
+WRAPPER_CMD="${servicemix.base}/bin/wrapper"
+WRAPPER_CONF="${servicemix.base}/etc/wrapper.conf"
+
+# Priority at which to run the wrapper.  See "man nice" for valid priorities.
+#  nice is only used if a priority is specified.
+PRIORITY=
+
+# Location of the pid file.
+PIDDIR="${servicemix.base}/data"
+
+# If uncommented, causes the Wrapper to be shutdown using an anchor file.
+#  When launched with the 'start' command, it will also ignore all INT and
+#  TERM signals.
+#IGNORE_SIGNALS=true
+
+# If specified, the Wrapper will be run as the specified user.
+# IMPORTANT - Make sure that the user has the required privileges to write
+#  the PID file and wrapper.log files.  Failure to be able to write the log
+#  file will cause the Wrapper to exit without any way to write out an error
+#  message.
+# NOTE - This will set the user which is used to run the Wrapper as well as
+#  the JVM and is not useful in situations where a privileged resource or
+#  port needs to be allocated prior to the user being changed.
+#RUN_AS_USER=
+
+# The following two lines are used by the chkconfig command. Change as is
+#  appropriate for your application.  They should remain commented.
+# chkconfig: 2345 20 80
+# description: @app.long.name@
+
+# Do not modify anything beyond this point
+#-----------------------------------------------------------------------------
+
+# Get the fully qualified path to the script
+case $0 in
+    /*)
+        SCRIPT="$0"
+        ;;
+    *)
+        PWD=`pwd`
+        SCRIPT="$PWD/$0"
+        ;;
+esac
+
+# Resolve the true real path without any sym links.
+CHANGED=true
+while [ "X$CHANGED" != "X" ]
+do
+    # Change spaces to ":" so the tokens can be parsed.
+    SCRIPT=`echo $SCRIPT | sed -e 's; ;:;g'`
+    # Get the real path to this script, resolving any symbolic links
+    TOKENS=`echo $SCRIPT | sed -e 's;/; ;g'`
+    REALPATH=
+    for C in $TOKENS; do
+        REALPATH="$REALPATH/$C"
+        while [ -h "$REALPATH" ] ; do
+            LS="`ls -ld "$REALPATH"`"
+            LINK="`expr "$LS" : '.*-> \(.*\)$'`"
+            if expr "$LINK" : '/.*' > /dev/null; then
+                REALPATH="$LINK"
+            else
+                REALPATH="`dirname "$REALPATH"`""/$LINK"
+            fi
+        done
+    done
+    # Change ":" chars back to spaces.
+    REALPATH=`echo $REALPATH | sed -e 's;:; ;g'`
+
+    if [ "$REALPATH" = "$SCRIPT" ]
+    then
+        CHANGED=""
+    else
+        SCRIPT="$REALPATH"
+    fi
+done
+
+# Change the current directory to the location of the script
+cd "`dirname "$REALPATH"`"
+REALDIR=`pwd`
+
+# If the PIDDIR is relative, set its value relative to the full REALPATH to avoid problems if
+#  the working directory is later changed.
+FIRST_CHAR=`echo $PIDDIR | cut -c1,1`
+if [ "$FIRST_CHAR" != "/" ]
+then
+    PIDDIR=$REALDIR/$PIDDIR
+fi
+# Same test for WRAPPER_CMD
+FIRST_CHAR=`echo $WRAPPER_CMD | cut -c1,1`
+if [ "$FIRST_CHAR" != "/" ]
+then
+    WRAPPER_CMD=$REALDIR/$WRAPPER_CMD
+fi
+# Same test for WRAPPER_CONF
+FIRST_CHAR=`echo $WRAPPER_CONF | cut -c1,1`
+if [ "$FIRST_CHAR" != "/" ]
+then
+    WRAPPER_CONF=$REALDIR/$WRAPPER_CONF
+fi
+
+# Process ID
+ANCHORFILE="$PIDDIR/$APP_NAME.anchor"
+PIDFILE="$PIDDIR/$APP_NAME.pid"
+LOCKDIR="/var/lock/subsys"
+LOCKFILE="$LOCKDIR/$APP_NAME"
+pid=""
+
+# Resolve the location of the 'ps' command
+PSEXE="/usr/bin/ps"
+if [ ! -x $PSEXE ]
+then
+    PSEXE="/bin/ps"
+    if [ ! -x $PSEXE ]
+    then
+        echo "Unable to locate 'ps'."
+        echo "Please report this message along with the location of the command on your system."
+        exit 1
+    fi
+fi
+
+# Resolve the os
+DIST_OS=`uname -s | tr [:upper:] [:lower:] | tr -d [:blank:]`
+case "$DIST_OS" in
+    'sunos')
+        DIST_OS="solaris"
+        ;;
+    'hp-ux' | 'hp-ux64')
+        DIST_OS="hpux"
+        ;;
+    'darwin')
+        DIST_OS="macosx"
+        ;;
+    'unix_sv')
+        DIST_OS="unixware"
+        ;;
+esac
+
+# Resolve the architecture
+DIST_ARCH=`uname -p | tr [:upper:] [:lower:] | tr -d [:blank:]`
+if [ "$DIST_ARCH" = "unknown" ]
+then
+    DIST_ARCH=`uname -m | tr [:upper:] [:lower:] | tr -d [:blank:]`
+fi
+case "$DIST_ARCH" in
+    'amd64' | 'ia32' | 'ia64' | 'i386' | 'i486' | 'i586' | 'i686' | 'x86_64')
+        DIST_ARCH="x86"
+        ;;
+    'ip27')
+        DIST_ARCH="mips"
+        ;;
+    'power' | 'powerpc' | 'power_pc' | 'ppc64')
+        DIST_ARCH="ppc"
+        ;;
+    'pa_risc' | 'pa-risc')
+        DIST_ARCH="parisc"
+        ;;
+    'sun4u' | 'sparcv9')
+        DIST_ARCH="sparc"
+        ;;
+    '9000/800')
+        DIST_ARCH="parisc"
+        ;;
+esac
+
+# Decide on the wrapper binary to use.
+# If a 32-bit wrapper binary exists then it will work on 32 or 64 bit
+#  platforms, if the 64-bit binary exists then the distribution most
+#  likely wants to use long names.  Otherwise, look for the default.
+# For macosx, we also want to look for universal binaries.
+WRAPPER_TEST_CMD="$WRAPPER_CMD-$DIST_OS-$DIST_ARCH-32"
+if [ -x $WRAPPER_TEST_CMD ]
+then
+    WRAPPER_CMD="$WRAPPER_TEST_CMD"
+else
+    if [ "$DIST_OS" = "macosx" ]
+    then
+        WRAPPER_TEST_CMD="$WRAPPER_CMD-$DIST_OS-universal-32"
+        if [ -x $WRAPPER_TEST_CMD ]
+        then
+            WRAPPER_CMD="$WRAPPER_TEST_CMD"
+        else
+            WRAPPER_TEST_CMD="$WRAPPER_CMD-$DIST_OS-$DIST_ARCH-64"
+            if [ -x $WRAPPER_TEST_CMD ]
+            then
+                WRAPPER_CMD="$WRAPPER_TEST_CMD"
+            else
+                WRAPPER_TEST_CMD="$WRAPPER_CMD-$DIST_OS-universal-64"
+                if [ -x $WRAPPER_TEST_CMD ]
+                then
+                    WRAPPER_CMD="$WRAPPER_TEST_CMD"
+                else
+                    if [ ! -x $WRAPPER_CMD ]
+                    then
+                        echo "Unable to locate any of the following binaries:"
+                        echo "  $WRAPPER_CMD-$DIST_OS-$DIST_ARCH-32"
+                        echo "  $WRAPPER_CMD-$DIST_OS-universal-32"
+                        echo "  $WRAPPER_CMD-$DIST_OS-$DIST_ARCH-64"
+                        echo "  $WRAPPER_CMD-$DIST_OS-universal-64"
+                        echo "  $WRAPPER_CMD"
+                        exit 1
+                    fi
+                fi
+            fi
+        fi
+    else
+        WRAPPER_TEST_CMD="$WRAPPER_CMD-$DIST_OS-$DIST_ARCH-64"
+        if [ -x $WRAPPER_TEST_CMD ]
+        then
+            WRAPPER_CMD="$WRAPPER_TEST_CMD"
+        else
+            if [ ! -x $WRAPPER_CMD ]
+            then
+                echo "Unable to locate any of the following binaries:"
+                echo "  $WRAPPER_CMD-$DIST_OS-$DIST_ARCH-32"
+                echo "  $WRAPPER_CMD-$DIST_OS-$DIST_ARCH-64"
+                echo "  $WRAPPER_CMD"
+                exit 1
+            fi
+        fi
+    fi
+fi
+
+# Build the nice clause
+if [ "X$PRIORITY" = "X" ]
+then
+    CMDNICE=""
+else
+    CMDNICE="nice -$PRIORITY"
+fi
+
+# Build the anchor file clause.
+if [ "X$IGNORE_SIGNALS" = "X" ]
+then
+   ANCHORPROP=
+   IGNOREPROP=
+else
+   ANCHORPROP=wrapper.anchorfile=$ANCHORFILE
+   IGNOREPROP=wrapper.ignore_signals=TRUE
+fi
+
+# Build the lock file clause.  Only create a lock file if the lock directory exists on this platform.
+if [ -d $LOCKDIR ]
+then
+    LOCKPROP=wrapper.lockfile=$LOCKFILE
+else
+    LOCKPROP=
+fi
+
+checkUser() {
+    # Check the configured user.  If necessary rerun this script as the desired user.
+    if [ "X$RUN_AS_USER" != "X" ]
+    then
+        # Resolve the location of the 'id' command
+        IDEXE="/usr/xpg4/bin/id"
+        if [ ! -x $IDEXE ]
+        then
+            IDEXE="/usr/bin/id"
+            if [ ! -x $IDEXE ]
+            then
+                echo "Unable to locate 'id'."
+                echo "Please report this message along with the location of the command on your system."
+                exit 1
+            fi
+        fi
+
+        if [ "`$IDEXE -u -n`" = "$RUN_AS_USER" ]
+        then
+            # Already running as the configured user.  Avoid password prompts by not calling su.
+            RUN_AS_USER=""
+        fi
+    fi
+    if [ "X$RUN_AS_USER" != "X" ]
+    then
+        # If LOCKPROP and $RUN_AS_USER are defined then the new user will most likely not be
+        # able to create the lock file.  The Wrapper will be able to update this file once it
+        # is created but will not be able to delete it on shutdown.  If $2 is defined then
+        # the lock file should be created for the current command
+        if [ "X$LOCKPROP" != "X" ]
+        then
+            if [ "X$2" != "X" ]
+            then
+                # Resolve the primary group
+                RUN_AS_GROUP=`groups $RUN_AS_USER | awk '{print $3}' | tail -1`
+                if [ "X$RUN_AS_GROUP" = "X" ]
+                then
+                    RUN_AS_GROUP=RUN_AS_USER
+                fi
+                touch $LOCKFILE
+                chown $RUN_AS_USER:$RUN_AS_GROUP $LOCKFILE
+            fi
+        fi
+
+        # Still want to change users, recurse.  This means that the user will only be
+        #  prompted for a password once.
+        su -m $RUN_AS_USER -c "$REALPATH $1"
+
+        # Now that we are the original user again, we may need to clean up the lock file.
+        if [ "X$LOCKPROP" != "X" ]
+        then
+            getpid
+            if [ "X$pid" = "X" ]
+            then
+                # Wrapper is not running so make sure the lock file is deleted.
+                if [ -f $LOCKFILE ]
+                then
+                    rm $LOCKFILE
+                fi
+            fi
+        fi
+
+        exit 0
+    fi
+}
+
+getpid() {
+    if [ -f $PIDFILE ]
+    then
+        if [ -r $PIDFILE ]
+        then
+            pid=`cat $PIDFILE`
+            if [ "X$pid" != "X" ]
+            then
+                # It is possible that 'a' process with the pid exists but that it is not the
+                #  correct process.  This can happen in a number of cases, but the most
+                #  common is during system startup after an unclean shutdown.
+                # The ps statement below looks for the specific wrapper command running as
+                #  the pid.  If it is not found then the pid file is considered to be stale.
+                pidtest=`$PSEXE -p $pid -o command | grep $WRAPPER_CMD | tail -1`
+                if [ "X$pidtest" = "X" ]
+                then
+                    # This is a stale pid file.
+                    rm -f $PIDFILE
+                    echo "Removed stale pid file: $PIDFILE"
+                    pid=""
+                fi
+            fi
+        else
+            echo "Cannot read $PIDFILE."
+            exit 1
+        fi
+    fi
+}
+
+testpid() {
+    pid=`$PSEXE -p $pid | grep $pid | grep -v grep | awk '{print $1}' | tail -1`
+    if [ "X$pid" = "X" ]
+    then
+        # Process is gone so remove the pid file.
+        rm -f $PIDFILE
+        pid=""
+    fi
+}
+
+console() {
+    echo "Running $APP_LONG_NAME..."
+    getpid
+    if [ "X$pid" = "X" ]
+    then
+        COMMAND_LINE="$CMDNICE $WRAPPER_CMD $WRAPPER_CONF wrapper.syslog.ident=$APP_NAME wrapper.pidfile=$PIDFILE $ANCHORPROP $LOCKPROP"
+        exec $COMMAND_LINE
+    else
+        echo "$APP_LONG_NAME is already running."
+        exit 1
+    fi
+}
+
+start() {
+    echo "Starting $APP_LONG_NAME..."
+    getpid
+    if [ "X$pid" = "X" ]
+    then
+        if [ ! -d ../../data ]; then
+            mkdir ../../data
+        fi
+        if [ ! -d ../../data/log ]; then
+            mkdir ../../data/log
+        fi
+        COMMAND_LINE="$CMDNICE $WRAPPER_CMD $WRAPPER_CONF wrapper.syslog.ident=$APP_NAME wrapper.pidfile=$PIDFILE wrapper.daemonize=TRUE $ANCHORPROP $IGNOREPROP $LOCKPROP"
+        exec $COMMAND_LINE
+    else
+        echo "$APP_LONG_NAME is already running."
+        exit 1
+    fi
+}
+
+stopit() {
+    echo "Stopping $APP_LONG_NAME..."
+    getpid
+    if [ "X$pid" = "X" ]
+    then
+        echo "$APP_LONG_NAME was not running."
+    else
+        if [ "X$IGNORE_SIGNALS" = "X" ]
+        then
+            # Running so try to stop it.
+            kill $pid
+            if [ $? -ne 0 ]
+            then
+                # An explanation for the failure should have been given
+                echo "Unable to stop $APP_LONG_NAME."
+                exit 1
+            fi
+        else
+            rm -f $ANCHORFILE
+            if [ -f $ANCHORFILE ]
+            then
+                # An explanation for the failure should have been given
+                echo "Unable to stop $APP_LONG_NAME."
+                exit 1
+            fi
+        fi
+
+        # We can not predict how long it will take for the wrapper to
+        #  actually stop as it depends on settings in wrapper.conf.
+        #  Loop until it does.
+        savepid=$pid
+        CNT=0
+        TOTCNT=0
+        while [ "X$pid" != "X" ]
+        do
+            # Show a waiting message every 5 seconds.
+            if [ "$CNT" -lt "5" ]
+            then
+                CNT=`expr $CNT + 1`
+            else
+                echo "Waiting for $APP_LONG_NAME to exit..."
+                CNT=0
+            fi
+            TOTCNT=`expr $TOTCNT + 1`
+
+            sleep 1
+
+            testpid
+        done
+
+        pid=$savepid
+        testpid
+        if [ "X$pid" != "X" ]
+        then
+            echo "Failed to stop $APP_LONG_NAME."
+            exit 1
+        else
+            echo "Stopped $APP_LONG_NAME."
+        fi
+    fi
+}
+
+status() {
+    getpid
+    if [ "X$pid" = "X" ]
+    then
+        echo "$APP_LONG_NAME is not running."
+        exit 1
+    else
+        echo "$APP_LONG_NAME is running ($pid)."
+        exit 0
+    fi
+}
+
+dump() {
+    echo "Dumping $APP_LONG_NAME..."
+    getpid
+    if [ "X$pid" = "X" ]
+    then
+        echo "$APP_LONG_NAME was not running."
+
+    else
+        kill -3 $pid
+
+        if [ $? -ne 0 ]
+        then
+            echo "Failed to dump $APP_LONG_NAME."
+            exit 1
+        else
+            echo "Dumped $APP_LONG_NAME."
+        fi
+    fi
+}
+
+case "$1" in
+
+    'console')
+        checkUser $1 touchlock
+        console
+        ;;
+
+    'start')
+        checkUser $1 touchlock
+        start
+        ;;
+
+    'stop')
+        checkUser $1
+        stopit
+        ;;
+
+    'restart')
+        checkUser $1 touchlock
+        stopit
+        start
+        ;;
+
+    'status')
+        checkUser $1
+        status
+        ;;
+
+    'dump')
+        checkUser $1
+        dump
+        ;;
+
+    *)
+        echo "Usage: $0 { console | start | stop | restart | status | dump }"
+        exit 1
+        ;;
+esac
+
+exit 0

Propchange: servicemix/smx4/runtime/trunk/gshell/gshell-wrapper/src/main/resources/org/apache/servicemix/runtime/gshell/wrapper/unix/servicemix-service
------------------------------------------------------------------------------
    svn:executable = *

Added: servicemix/smx4/runtime/trunk/gshell/gshell-wrapper/src/main/resources/org/apache/servicemix/runtime/gshell/wrapper/windows/servicemix-service.bat
URL: http://svn.apache.org/viewvc/servicemix/smx4/runtime/trunk/gshell/gshell-wrapper/src/main/resources/org/apache/servicemix/runtime/gshell/wrapper/windows/servicemix-service.bat?rev=603356&view=auto
==============================================================================
--- servicemix/smx4/runtime/trunk/gshell/gshell-wrapper/src/main/resources/org/apache/servicemix/runtime/gshell/wrapper/windows/servicemix-service.bat (added)
+++ servicemix/smx4/runtime/trunk/gshell/gshell-wrapper/src/main/resources/org/apache/servicemix/runtime/gshell/wrapper/windows/servicemix-service.bat Tue Dec 11 13:06:17 2007
@@ -0,0 +1,50 @@
+@echo off
+
+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 ------------------------------------------------------------------------
+
+setlocal
+
+set APP_NAME=${name}
+set APP_LONG_NAME=${displayName}
+set APP_BASE=${servicemix.base}
+
+if ""%1"" == ""run"" goto doRun
+if ""%1"" == ""install"" goto doInstall
+if ""%1"" == ""remove"" goto doRemove
+
+echo Usage:  catalina ( commands ... )
+echo commands:
+echo   run               Start %APP_NAME% in the current console
+echo   install           Install %APP_NAME% as a Windows service
+echo   remove            Remove the %APP_NAME% Windows service
+goto end
+
+:doRun
+"%APP_BASE%\bin\wrapper.exe" -c "%APP_BASE%\etc\wrapper.conf"
+goto end
+
+:doInstall
+"%APP_BASE%\bin\wrapper.exe" -i "%APP_BASE%\etc\wrapper.conf"
+goto end
+
+:doRemove
+"%APP_BASE%\bin\wrapper.exe" -r "%APP_BASE%\etc\wrapper.conf"
+goto end
+
+:end
+if not "%PAUSE%" == "" pause

Propchange: servicemix/smx4/runtime/trunk/gshell/gshell-wrapper/src/main/resources/org/apache/servicemix/runtime/gshell/wrapper/windows/servicemix-service.bat
------------------------------------------------------------------------------
    svn:eol-style = native

Added: servicemix/smx4/runtime/trunk/gshell/gshell-wrapper/src/main/resources/org/apache/servicemix/runtime/gshell/wrapper/windows/wrapper.dll
URL: http://svn.apache.org/viewvc/servicemix/smx4/runtime/trunk/gshell/gshell-wrapper/src/main/resources/org/apache/servicemix/runtime/gshell/wrapper/windows/wrapper.dll?rev=603356&view=auto
==============================================================================
Binary file - no diff available.

Propchange: servicemix/smx4/runtime/trunk/gshell/gshell-wrapper/src/main/resources/org/apache/servicemix/runtime/gshell/wrapper/windows/wrapper.dll
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: servicemix/smx4/runtime/trunk/gshell/gshell-wrapper/src/main/resources/org/apache/servicemix/runtime/gshell/wrapper/windows/wrapper.exe
URL: http://svn.apache.org/viewvc/servicemix/smx4/runtime/trunk/gshell/gshell-wrapper/src/main/resources/org/apache/servicemix/runtime/gshell/wrapper/windows/wrapper.exe?rev=603356&view=auto
==============================================================================
Binary file - no diff available.

Propchange: servicemix/smx4/runtime/trunk/gshell/gshell-wrapper/src/main/resources/org/apache/servicemix/runtime/gshell/wrapper/windows/wrapper.exe
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Modified: servicemix/smx4/runtime/trunk/gshell/pom.xml
URL: http://svn.apache.org/viewvc/servicemix/smx4/runtime/trunk/gshell/pom.xml?rev=603356&r1=603355&r2=603356&view=diff
==============================================================================
--- servicemix/smx4/runtime/trunk/gshell/pom.xml (original)
+++ servicemix/smx4/runtime/trunk/gshell/pom.xml Tue Dec 11 13:06:17 2007
@@ -37,6 +37,7 @@
         <module>gshell-core</module>
         <module>gshell-osgi</module>
         <module>gshell-obr</module>
+        <module>gshell-wrapper</module>
     </modules>
 
 </project>