Last active
December 10, 2015 15:28
-
-
Save davidmc24/4455077 to your computer and use it in GitHub Desktop.
Wrapper for HornetQBootstrapServer to allow running it as a Windows service using Java Service Wrapper. Conceptually based on a [forum post](https://community.jboss.org/thread/156466?start=15&tstart=0) by Syed Meerkasim Mustaffa.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| build | |
| .gradle |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| apply plugin: "java" | |
| repositories { | |
| mavenCentral() | |
| maven { | |
| url "http://repository.jboss.org/nexus/content/groups/public-jboss" | |
| } | |
| } | |
| dependencies { | |
| compile "tanukisoft:wrapper:3.2.3" | |
| compile "org.hornetq:hornetq-bootstrap:2.2.10.Final" | |
| compile "org.jboss.microcontainer:jboss-kernel:2.0.10.GA" | |
| } |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| package org.hornetq.wrapper; | |
| import org.tanukisoftware.wrapper.WrapperManager; | |
| import org.tanukisoftware.wrapper.WrapperListener; | |
| import org.hornetq.integration.bootstrap.HornetQBootstrapServer; | |
| import java.io.File; | |
| public class Main implements WrapperListener { | |
| /*--------------------------------------------------------------- | |
| * 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) { | |
| try { | |
| HornetQBootstrapServer.main(args); | |
| return null; | |
| } catch (Exception ex) { | |
| return Integer.valueOf(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 { | |
| String configDirPath = System.getProperty("hornetq.config.dir"); | |
| File localFile = new File(configDirPath, "STOP_ME"); | |
| localFile.createNewFile(); | |
| } catch (Exception localException) {} | |
| 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 ); | |
| } | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment