1 /* 2 * $Id: MuleServerWrapper.java 9984 2007-12-04 16:26:56Z aguenther $ 3 * -------------------------------------------------------------------------------------- 4 * Copyright (c) MuleSource, Inc. All rights reserved. http://www.mulesource.com 5 * 6 * The software in this package is published under the terms of the CPAL v1.0 7 * license, a copy of which has been included with this distribution in the 8 * LICENSE.txt file. 9 */ 10 11 package org.mule.modules.boot; 12 13 import org.mule.MuleServer; 14 15 import org.tanukisoftware.wrapper.WrapperListener; 16 import org.tanukisoftware.wrapper.WrapperManager; 17 18 public class MuleServerWrapper implements WrapperListener 19 { 20 /*--------------------------------------------------------------- 21 * Constructors 22 *-------------------------------------------------------------*/ 23 public MuleServerWrapper() 24 { 25 super(); 26 } 27 28 /*--------------------------------------------------------------- 29 * WrapperListener Methods 30 *-------------------------------------------------------------*/ 31 /** 32 * The start method is called when the WrapperManager is signaled by the native 33 * wrapper code that it can start its application. This method call is expected 34 * to return, so a new thread should be launched if necessary. 35 * 36 * @param args List of arguments used to initialize the application. 37 * @return Any error code if the application should exit on completion of the 38 * start method. If there were no problems then this method should return 39 * null. 40 */ 41 public Integer start(String[] args) 42 { 43 try 44 { 45 MuleServer.main(args); 46 return null; 47 } 48 catch (Exception e) 49 { 50 e.printStackTrace(); 51 return new Integer(1); 52 } 53 } 54 55 /** 56 * Called when the application is shutting down. The Wrapper assumes that this 57 * method will return fairly quickly. If the shutdown code code could potentially 58 * take a long time, then WrapperManager.signalStopping() should be called to 59 * extend the timeout period. If for some reason, the stop method can not return, 60 * then it must call WrapperManager.stopped() to avoid warning messages from the 61 * Wrapper. 62 * 63 * @param exitCode The suggested exit code that will be returned to the OS when 64 * the JVM exits. 65 * @return The exit code to actually return to the OS. In most cases, this should 66 * just be the value of exitCode, however the user code has the option of 67 * changing the exit code if there are any problems during shutdown. 68 */ 69 public int stop(int exitCode) 70 { 71 return exitCode; 72 } 73 74 /** 75 * Called whenever the native wrapper code traps a system control signal against 76 * the Java process. It is up to the callback to take any actions necessary. 77 * Possible values are: WrapperManager.WRAPPER_CTRL_C_EVENT, 78 * WRAPPER_CTRL_CLOSE_EVENT, WRAPPER_CTRL_LOGOFF_EVENT, or 79 * WRAPPER_CTRL_SHUTDOWN_EVENT 80 * 81 * @param event The system control signal. 82 */ 83 public void controlEvent(int event) 84 { 85 if (WrapperManager.isControlledByNativeWrapper()) 86 { 87 // The Wrapper will take care of this event 88 } 89 else 90 { 91 // We are not being controlled by the Wrapper, so 92 // handle the event ourselves. 93 if ((event == WrapperManager.WRAPPER_CTRL_C_EVENT) 94 || (event == WrapperManager.WRAPPER_CTRL_CLOSE_EVENT) 95 || (event == WrapperManager.WRAPPER_CTRL_SHUTDOWN_EVENT)) 96 { 97 WrapperManager.stop(0); 98 } 99 } 100 } 101 }