Skip to content

Instantly share code, notes, and snippets.

@davidmc24
Last active December 10, 2015 15:28
Show Gist options
  • Save davidmc24/4455077 to your computer and use it in GitHub Desktop.
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.
build
.gradle
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"
}
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