You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@commons.apache.org by Apache Wiki <wi...@apache.org> on 2011/09/01 06:32:32 UTC

[Commons Wiki] Update of "Daemon" by ChrisMcKay

Dear Wiki user,

You have subscribed to a wiki page or wiki category on "Commons Wiki" for change notification.

The "Daemon" page has been changed by ChrisMcKay:
http://wiki.apache.org/commons/Daemon?action=diff&rev1=9&rev2=10

  
  ...
  
+ == Examples ==
+ 
+ === Combined java class for Windows and Linux ===
+ 
+ The following Java code works when called from both a Windows service (using prunsrv) and Linux (using jsvc). The Windows start and stop taken from Christopher Pierce's blog at http://blog.platinumsolutions.com/node/234
+ 
+ {{{
+ /**
+  * Launch the Engine from a variety of sources, either through a main() or invoked through
+  * Apache Daemon.
+  */
+ public class EngineLauncher implements Daemon {
+     private static final Log4J log = Log4J.getLog();
+     private static Engine engine = null;
+ 
+     private static EngineLauncher engineLauncherInstance = new EngineLauncher();
+ 
+     /**
+      * The Java entry point.
+      * @param args Command line arguments, all ignored.
+      */
+     public static void main(String[] args) {
+         // the main routine is only here so I can also run the app from the command line
+         engineLauncherInstance.initialize();
+ 
+         Scanner sc = new Scanner(System.in);
+         // wait until receive stop command from keyboard
+         System.out.printf("Enter 'stop' to halt: ");
+         while(!sc.nextLine().toLowerCase().equals("stop"));
+ 
+         if (!engine.isStopped()) {
+             engineLauncherInstance.terminate();
+         }
+ 
+     }
+ 
+     /**
+      * Static methods called by prunsrv to start/stop
+      * the Windows service.  Pass the argument "start"
+      * to start the service, and pass "stop" to
+      * stop the service.
+      *
+      * Taken lock, stock and barrel from Christopher Pierce's blog at http://blog.platinumsolutions.com/node/234
+      *
+      * @param args Arguments from prunsrv command line
+      **/
+     public static void windowsService(String args[]) {
+         String cmd = "start";
+         if (args.length > 0) {
+             cmd = args[0];
+         }
+ 
+         if ("start".equals(cmd)) {
+             engineLauncherInstance.windowsStart();
+         }
+         else {
+             engineLauncherInstance.windowsStop();
+         }
+     }
+ 
+     public void windowsStart() {
+         log.debug("windowsStart called");
+         initialize();
+         while (!engine.isStopped()) {
+             // don't return until stopped
+             synchronized(this) {
+                 try {
+                     this.wait(60000);  // wait 1 minute and check if stopped
+                 }
+                 catch(InterruptedException ie){}
+             }
+         }
+     }
+ 
+     public void windowsStop() {
+         log.debug("windowsStop called");
+         terminate();
+         synchronized(this) {
+             // stop the start loop
+             this.notify();
+         }
+     }
+ 
+     // Implementing the Daemon interface is not required for Windows but is for Linux
+     @Override
+     public void init(DaemonContext arg0) throws Exception {
+         log.debug("Daemon init");
+ 	}
+ 
+     @Override
+     public void start() {
+         log.debug("Daemon start");
+         initialize();
+     }
+ 
+     @Override
+     public void stop() {
+         log.debug("Daemon stop");
+         terminate();
+     }
+ 
+     @Override
+     public void destroy() {
+         log.debug("Daemon destroy");
+     }
+ 
+     /**
+      * Do the work of starting the engine
+      */
+     private void initialize() {
+         if (engine == null) {
+             log.info("Starting the Engine");
+  ... spawn threads etc
+         }
+     }
+ 
+     /**
+      * Cleanly stop the engine.
+      */
+     public void terminate() {
+         if (engine != null) {
+             log.info("Stopping the Engine");
+             engine.stop();
+             log.info("Engine stopped");
+         }
+     }
+ }
+ 
+ 
+ }}}
+ 

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@commons.apache.org
For additional commands, e-mail: dev-help@commons.apache.org