You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@karaf.apache.org by gn...@apache.org on 2010/09/21 13:41:46 UTC

svn commit: r999335 - in /karaf/branches/karaf-2.0.x: ./ shell/wrapper/ shell/wrapper/src/main/java/org/apache/karaf/shell/wrapper/ shell/wrapper/src/main/resources/org/apache/karaf/shell/wrapper/all/ shell/wrapper/src/main/resources/org/apache/karaf/s...

Author: gnodet
Date: Tue Sep 21 11:41:46 2010
New Revision: 999335

URL: http://svn.apache.org/viewvc?rev=999335&view=rev
Log:
KARAF-175, KARAF-176, KARAF-177: Improve Java Service Wrapper integration

Added:
    karaf/branches/karaf-2.0.x/shell/wrapper/src/main/java/org/apache/karaf/shell/wrapper/Main.java
Modified:
    karaf/branches/karaf-2.0.x/pom.xml
    karaf/branches/karaf-2.0.x/shell/wrapper/pom.xml
    karaf/branches/karaf-2.0.x/shell/wrapper/src/main/java/org/apache/karaf/shell/wrapper/InstallCommand.java
    karaf/branches/karaf-2.0.x/shell/wrapper/src/main/resources/org/apache/karaf/shell/wrapper/all/karaf-wrapper.jar
    karaf/branches/karaf-2.0.x/shell/wrapper/src/main/resources/org/apache/karaf/shell/wrapper/linux/karaf-wrapper
    karaf/branches/karaf-2.0.x/shell/wrapper/src/main/resources/org/apache/karaf/shell/wrapper/linux/libwrapper.so
    karaf/branches/karaf-2.0.x/shell/wrapper/src/main/resources/org/apache/karaf/shell/wrapper/macosx/karaf-wrapper
    karaf/branches/karaf-2.0.x/shell/wrapper/src/main/resources/org/apache/karaf/shell/wrapper/macosx/libwrapper.jnilib
    karaf/branches/karaf-2.0.x/shell/wrapper/src/main/resources/org/apache/karaf/shell/wrapper/unix/karaf-wrapper.conf
    karaf/branches/karaf-2.0.x/shell/wrapper/src/main/resources/org/apache/karaf/shell/wrapper/windows/karaf-wrapper.conf
    karaf/branches/karaf-2.0.x/shell/wrapper/src/main/resources/org/apache/karaf/shell/wrapper/windows/karaf-wrapper.exe
    karaf/branches/karaf-2.0.x/shell/wrapper/src/main/resources/org/apache/karaf/shell/wrapper/windows/wrapper.dll

Modified: karaf/branches/karaf-2.0.x/pom.xml
URL: http://svn.apache.org/viewvc/karaf/branches/karaf-2.0.x/pom.xml?rev=999335&r1=999334&r2=999335&view=diff
==============================================================================
--- karaf/branches/karaf-2.0.x/pom.xml (original)
+++ karaf/branches/karaf-2.0.x/pom.xml Tue Sep 21 11:41:46 2010
@@ -130,6 +130,7 @@
         <jetty.bundle.version>6.1.22_1</jetty.bundle.version>
         <junit.version>4.7_1</junit.version>
         <jline.version>0.9.95.20100209</jline.version>
+        <jsw.version>3.2.3</jsw.version>
         <log4j.version>1.2.16</log4j.version>
         <maven.version>2.0.9</maven.version>
         <mina.version>2.0.0-RC1</mina.version>
@@ -800,6 +801,11 @@
                 <artifactId>xbean-finder-shaded</artifactId>
                 <version>${xbean.version}</version>
             </dependency>
+            <dependency>
+                <groupId>tanukisoft</groupId>
+                <artifactId>wrapper</artifactId>
+                <version>${jsw.version}</version>
+            </dependency>
         </dependencies>
     </dependencyManagement>
 

Modified: karaf/branches/karaf-2.0.x/shell/wrapper/pom.xml
URL: http://svn.apache.org/viewvc/karaf/branches/karaf-2.0.x/shell/wrapper/pom.xml?rev=999335&r1=999334&r2=999335&view=diff
==============================================================================
--- karaf/branches/karaf-2.0.x/shell/wrapper/pom.xml (original)
+++ karaf/branches/karaf-2.0.x/shell/wrapper/pom.xml Tue Sep 21 11:41:46 2010
@@ -45,7 +45,14 @@
             <groupId>org.apache.karaf.shell</groupId>
             <artifactId>org.apache.karaf.shell.console</artifactId>
         </dependency>
-
+        <dependency>
+            <groupId>org.apache.karaf</groupId>
+            <artifactId>org.apache.karaf.main</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>tanukisoft</groupId>
+            <artifactId>wrapper</artifactId>
+        </dependency>
         <dependency>
             <groupId>org.apache.felix</groupId>
             <artifactId>org.osgi.core</artifactId>
@@ -86,6 +93,8 @@
                         <Export-Package>${project.artifactId}*;version=${project.version}</Export-Package>
                         <Import-Package>
                             !${project.artifactId}*,
+                            !org.apache.karaf.main,
+                            !org.tanukisoftware.wrapper,
                             org.osgi.service.command,
                             org.apache.felix.gogo.commands,
                             org.apache.karaf.shell.console,

Modified: karaf/branches/karaf-2.0.x/shell/wrapper/src/main/java/org/apache/karaf/shell/wrapper/InstallCommand.java
URL: http://svn.apache.org/viewvc/karaf/branches/karaf-2.0.x/shell/wrapper/src/main/java/org/apache/karaf/shell/wrapper/InstallCommand.java?rev=999335&r1=999334&r2=999335&view=diff
==============================================================================
--- karaf/branches/karaf-2.0.x/shell/wrapper/src/main/java/org/apache/karaf/shell/wrapper/InstallCommand.java (original)
+++ karaf/branches/karaf-2.0.x/shell/wrapper/src/main/java/org/apache/karaf/shell/wrapper/InstallCommand.java Tue Sep 21 11:41:46 2010
@@ -25,6 +25,8 @@ import java.io.PrintStream;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.Scanner;
+import java.util.jar.JarOutputStream;
+import java.util.zip.ZipEntry;
 
 import org.apache.karaf.shell.console.OsgiCommandSupport;
 import org.apache.felix.gogo.commands.Option;
@@ -62,7 +64,8 @@ public class InstallCommand extends Osgi
     		
 			HashMap<String, String> props = new HashMap<String, String>();
 			props.put("${karaf.home}", System.getProperty("karaf.home"));
-			props.put("${karaf.base}", base.getPath());
+            props.put("${karaf.base}", base.getPath());
+            props.put("${karaf.data}", System.getProperty("karaf.data"));
 			props.put("${name}", name);
 			props.put("${displayName}", getDisplayName());
 			props.put("${description}", getDescription());
@@ -133,6 +136,8 @@ public class InstallCommand extends Osgi
 			copyResourceTo(new File(lib, "karaf-wrapper.jar"), "all/karaf-wrapper.jar", false);
 			mkdir(etc);
 
+            createJar(new File(lib, "karaf-wrapper-main.jar"), "org/apache/karaf/shell/wrapper/Main.class");
+
 			System.out.println("");
 			System.out.println("Setup complete.  You may want to tweak the JVM properties in the wrapper configuration file:");
             System.out.println("\t" + wrapperConf.getPath());
@@ -236,6 +241,35 @@ public class InstallCommand extends Osgi
         return status;
 	}
 
+    private void createJar(File outFile, String resource) throws Exception {
+        if( !outFile.exists() ) {
+            System.out.println(Ansi.ansi().a("Creating file: ")
+                                          .a(Ansi.Attribute.INTENSITY_BOLD).a(outFile.getPath()).a(Ansi.Attribute.RESET).toString());
+            InputStream is = getClass().getClassLoader().getResourceAsStream(resource);
+            if (is == null) {
+                throw new IllegalStateException("Resource " + resource + " not found!");
+            }
+            try {
+                JarOutputStream jar = new JarOutputStream(new FileOutputStream( outFile ));
+                int idx = resource.indexOf('/');
+                while (idx > 0) {
+                    jar.putNextEntry(new ZipEntry(resource.substring(0, idx)));
+                    jar.closeEntry();
+                    idx = resource.indexOf('/', idx + 1);
+                }
+                jar.putNextEntry(new ZipEntry(resource));
+                int c;
+                while ( (c = is.read()) >= 0 ) {
+                    jar.write(c);
+                }
+                jar.closeEntry();
+                jar.close();
+            } finally {
+                safeClose(is);
+            }
+        }
+    }
+
 	private void copyResourceTo(File outFile, String resource, boolean text) throws Exception {
 		if( !outFile.exists() ) {
             System.out.println(Ansi.ansi().a("Creating file: ")

Added: karaf/branches/karaf-2.0.x/shell/wrapper/src/main/java/org/apache/karaf/shell/wrapper/Main.java
URL: http://svn.apache.org/viewvc/karaf/branches/karaf-2.0.x/shell/wrapper/src/main/java/org/apache/karaf/shell/wrapper/Main.java?rev=999335&view=auto
==============================================================================
--- karaf/branches/karaf-2.0.x/shell/wrapper/src/main/java/org/apache/karaf/shell/wrapper/Main.java (added)
+++ karaf/branches/karaf-2.0.x/shell/wrapper/src/main/java/org/apache/karaf/shell/wrapper/Main.java Tue Sep 21 11:41:46 2010
@@ -0,0 +1,135 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.karaf.shell.wrapper;
+
+import org.tanukisoftware.wrapper.WrapperListener;
+import org.tanukisoftware.wrapper.WrapperManager;
+
+/**
+ * Java Service Wrapper Main class
+ */
+public class Main implements WrapperListener {
+
+    private org.apache.karaf.main.Main main;
+
+    /*---------------------------------------------------------------
+     * Constructors
+     *-------------------------------------------------------------*/
+    private Main()
+    {
+    }
+
+    /*---------------------------------------------------------------
+     * WrapperListener Methods
+     *-------------------------------------------------------------*/
+    /**
+     * The start method is called when the WrapperManager is signaled by the
+     *    native Wrapper code that it can start its application.  This
+     *    method call is expected to return, so a new thread should be launched
+     *    if necessary.
+     *
+     * @param args List of arguments used to initialize the application.
+     *
+     * @return Any error code if the application should exit on completion
+     *         of the start method.  If there were no problems then this
+     *         method should return null.
+     */
+    public Integer start( String[] args )
+    {
+        main = new org.apache.karaf.main.Main( args );
+        try
+        {
+            main.launch();
+            return null;
+        }
+        catch (Throwable ex)
+        {
+            System.err.println("Could not create framework: " + ex);
+            ex.printStackTrace();
+            return -1;
+        }
+
+    }
+
+    /**
+     * Called when the application is shutting down.  The Wrapper assumes that
+     *  this method will return fairly quickly.  If the shutdown code code
+     *  could potentially take a long time, then WrapperManager.signalStopping()
+     *  should be called to extend the timeout period.  If for some reason,
+     *  the stop method can not return, then it must call
+     *  WrapperManager.stopped() to avoid warning messages from the Wrapper.
+     *
+     * @param exitCode The suggested exit code that will be returned to the OS
+     *                 when the JVM exits.
+     *
+     * @return The exit code to actually return to the OS.  In most cases, this
+     *         should just be the value of exitCode, however the user code has
+     *         the option of changing the exit code if there are any problems
+     *         during shutdown.
+     */
+    public int stop( int exitCode )
+    {
+        try
+        {
+            main.destroy(false);
+        }
+        catch (Throwable ex)
+        {
+            System.err.println("Error occured shutting down framework: " + ex);
+            ex.printStackTrace();
+            return -2;
+        }
+
+        return exitCode;
+    }
+
+    /**
+     * Called whenever the native Wrapper code traps a system control signal
+     *  against the Java process.  It is up to the callback to take any actions
+     *  necessary.  Possible values are: WrapperManager.WRAPPER_CTRL_C_EVENT,
+     *    WRAPPER_CTRL_CLOSE_EVENT, WRAPPER_CTRL_LOGOFF_EVENT, or
+     *    WRAPPER_CTRL_SHUTDOWN_EVENT
+     *
+     * @param event The system control signal.
+     */
+    public void controlEvent( int event )
+    {
+        if ( ( event == WrapperManager.WRAPPER_CTRL_LOGOFF_EVENT )
+            && ( WrapperManager.isLaunchedAsService() ) )
+        {
+            // Ignore
+        }
+        else
+        {
+            WrapperManager.stop( 0 );
+            // Will not get here.
+        }
+    }
+
+    /*---------------------------------------------------------------
+     * Main Method
+     *-------------------------------------------------------------*/
+    public static void main( String[] args )
+    {
+        // Start the application.  If the JVM was launched from the native
+        //  Wrapper then the application will wait for the native Wrapper to
+        //  call the application's start method.  Otherwise the start method
+        //  will be called immediately.
+        WrapperManager.start( new Main(), args );
+    }
+
+ }

Modified: karaf/branches/karaf-2.0.x/shell/wrapper/src/main/resources/org/apache/karaf/shell/wrapper/all/karaf-wrapper.jar
URL: http://svn.apache.org/viewvc/karaf/branches/karaf-2.0.x/shell/wrapper/src/main/resources/org/apache/karaf/shell/wrapper/all/karaf-wrapper.jar?rev=999335&r1=999334&r2=999335&view=diff
==============================================================================
Binary files - no diff available.

Modified: karaf/branches/karaf-2.0.x/shell/wrapper/src/main/resources/org/apache/karaf/shell/wrapper/linux/karaf-wrapper
URL: http://svn.apache.org/viewvc/karaf/branches/karaf-2.0.x/shell/wrapper/src/main/resources/org/apache/karaf/shell/wrapper/linux/karaf-wrapper?rev=999335&r1=999334&r2=999335&view=diff
==============================================================================
Binary files - no diff available.

Modified: karaf/branches/karaf-2.0.x/shell/wrapper/src/main/resources/org/apache/karaf/shell/wrapper/linux/libwrapper.so
URL: http://svn.apache.org/viewvc/karaf/branches/karaf-2.0.x/shell/wrapper/src/main/resources/org/apache/karaf/shell/wrapper/linux/libwrapper.so?rev=999335&r1=999334&r2=999335&view=diff
==============================================================================
Binary files - no diff available.

Modified: karaf/branches/karaf-2.0.x/shell/wrapper/src/main/resources/org/apache/karaf/shell/wrapper/macosx/karaf-wrapper
URL: http://svn.apache.org/viewvc/karaf/branches/karaf-2.0.x/shell/wrapper/src/main/resources/org/apache/karaf/shell/wrapper/macosx/karaf-wrapper?rev=999335&r1=999334&r2=999335&view=diff
==============================================================================
Binary files - no diff available.

Modified: karaf/branches/karaf-2.0.x/shell/wrapper/src/main/resources/org/apache/karaf/shell/wrapper/macosx/libwrapper.jnilib
URL: http://svn.apache.org/viewvc/karaf/branches/karaf-2.0.x/shell/wrapper/src/main/resources/org/apache/karaf/shell/wrapper/macosx/libwrapper.jnilib?rev=999335&r1=999334&r2=999335&view=diff
==============================================================================
Binary files - no diff available.

Modified: karaf/branches/karaf-2.0.x/shell/wrapper/src/main/resources/org/apache/karaf/shell/wrapper/unix/karaf-wrapper.conf
URL: http://svn.apache.org/viewvc/karaf/branches/karaf-2.0.x/shell/wrapper/src/main/resources/org/apache/karaf/shell/wrapper/unix/karaf-wrapper.conf?rev=999335&r1=999334&r2=999335&view=diff
==============================================================================
--- karaf/branches/karaf-2.0.x/shell/wrapper/src/main/resources/org/apache/karaf/shell/wrapper/unix/karaf-wrapper.conf (original)
+++ karaf/branches/karaf-2.0.x/shell/wrapper/src/main/resources/org/apache/karaf/shell/wrapper/unix/karaf-wrapper.conf Tue Sep 21 11:41:46 2010
@@ -25,16 +25,17 @@ set.default.KARAF_DATA=${karaf.data}
 # Java Application
 wrapper.working.dir=%KARAF_BASE%
 wrapper.java.command=java
-wrapper.java.mainclass=org.tanukisoftware.wrapper.WrapperSimpleApp
+wrapper.java.mainclass=org.apache.karaf.shell.wrapper.Main
 wrapper.java.classpath.1=%KARAF_BASE%/lib/karaf-wrapper.jar
 wrapper.java.classpath.2=%KARAF_HOME%/lib/karaf.jar
 wrapper.java.classpath.3=%KARAF_HOME%/lib/karaf-jaas-boot.jar
+wrapper.java.classpath.4=%KARAF_BASE%/lib/karaf-wrapper-main.jar
 wrapper.java.library.path.1=%KARAF_BASE%/lib/
 
 # Application Parameters.  Add parameters as needed starting from 1
-wrapper.app.parameter.1=org.apache.karaf.main.Bootstrap
+#wrapper.app.parameter.1=
 
-# JVM Parameters
+# JVM Parameters            
 # note that n is the parameter number starting from 1.
 wrapper.java.additional.1=-Dkaraf.home=%KARAF_HOME%
 wrapper.java.additional.2=-Dkaraf.base=%KARAF_BASE%

Modified: karaf/branches/karaf-2.0.x/shell/wrapper/src/main/resources/org/apache/karaf/shell/wrapper/windows/karaf-wrapper.conf
URL: http://svn.apache.org/viewvc/karaf/branches/karaf-2.0.x/shell/wrapper/src/main/resources/org/apache/karaf/shell/wrapper/windows/karaf-wrapper.conf?rev=999335&r1=999334&r2=999335&view=diff
==============================================================================
--- karaf/branches/karaf-2.0.x/shell/wrapper/src/main/resources/org/apache/karaf/shell/wrapper/windows/karaf-wrapper.conf (original)
+++ karaf/branches/karaf-2.0.x/shell/wrapper/src/main/resources/org/apache/karaf/shell/wrapper/windows/karaf-wrapper.conf Tue Sep 21 11:41:46 2010
@@ -25,14 +25,15 @@ set.default.KARAF_DATA=${karaf.data}
 # Java Application
 wrapper.working.dir=%KARAF_BASE%
 wrapper.java.command=java
-wrapper.java.mainclass=org.tanukisoftware.wrapper.WrapperSimpleApp
+wrapper.java.mainclass=org.apache.karaf.shell.wrapper.Main
 wrapper.java.classpath.1=%KARAF_BASE%/lib/karaf-wrapper.jar
 wrapper.java.classpath.2=%KARAF_HOME%/lib/karaf.jar
 wrapper.java.classpath.3=%KARAF_HOME%/lib/karaf-jaas-boot.jar
+wrapper.java.classpath.4=%KARAF_BASE%/lib/karaf-wrapper-main.jar
 wrapper.java.library.path.1=%KARAF_BASE%/lib/
 
 # Application Parameters.  Add parameters as needed starting from 1
-wrapper.app.parameter.1=org.apache.karaf.main.Bootstrap
+#wrapper.app.parameter.1=
 
 # JVM Parameters
 # note that n is the parameter number starting from 1.

Modified: karaf/branches/karaf-2.0.x/shell/wrapper/src/main/resources/org/apache/karaf/shell/wrapper/windows/karaf-wrapper.exe
URL: http://svn.apache.org/viewvc/karaf/branches/karaf-2.0.x/shell/wrapper/src/main/resources/org/apache/karaf/shell/wrapper/windows/karaf-wrapper.exe?rev=999335&r1=999334&r2=999335&view=diff
==============================================================================
Binary files - no diff available.

Modified: karaf/branches/karaf-2.0.x/shell/wrapper/src/main/resources/org/apache/karaf/shell/wrapper/windows/wrapper.dll
URL: http://svn.apache.org/viewvc/karaf/branches/karaf-2.0.x/shell/wrapper/src/main/resources/org/apache/karaf/shell/wrapper/windows/wrapper.dll?rev=999335&r1=999334&r2=999335&view=diff
==============================================================================
Binary files - no diff available.