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.