001: package org.tanukisoftware.wrapper.test;
002:
003: /*
004: * Copyright (c) 1999, 2006 Tanuki Software Inc.
005: *
006: * Permission is hereby granted, free of charge, to any person
007: * obtaining a copy of the Java Service Wrapper and associated
008: * documentation files (the "Software"), to deal in the Software
009: * without restriction, including without limitation the rights
010: * to use, copy, modify, merge, publish, distribute, sub-license,
011: * and/or sell copies of the Software, and to permit persons to
012: * whom the Software is furnished to do so, subject to the
013: * following conditions:
014: *
015: * The above copyright notice and this permission notice shall be
016: * included in all copies or substantial portions of the Software.
017: *
018: * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
019: * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
020: * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
021: * NON-INFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
022: * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
023: * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
024: * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
025: * OTHER DEALINGS IN THE SOFTWARE.
026: *
027: *
028: * Portions of the Software have been derived from source code
029: * developed by Silver Egg Technology under the following license:
030: *
031: * Copyright (c) 2001 Silver Egg Technology
032: *
033: * Permission is hereby granted, free of charge, to any person
034: * obtaining a copy of this software and associated documentation
035: * files (the "Software"), to deal in the Software without
036: * restriction, including without limitation the rights to use,
037: * copy, modify, merge, publish, distribute, sub-license, and/or
038: * sell copies of the Software, and to permit persons to whom the
039: * Software is furnished to do so, subject to the following
040: * conditions:
041: *
042: * The above copyright notice and this permission notice shall be
043: * included in all copies or substantial portions of the Software.
044: */
045:
046: import java.lang.reflect.InvocationTargetException;
047: import java.lang.reflect.Method;
048:
049: /**
050: *
051: *
052: * @author Leif Mortenson <leif@tanukisoftware.com>
053: */
054: public class ShutdownHook {
055: /*---------------------------------------------------------------
056: * Main Method
057: *-------------------------------------------------------------*/
058: public static void main(String[] args) {
059: // Locate the add and remove shutdown hook methods using reflection so
060: // that this class can be compiled on 1.2.x versions of java.
061: Method addShutdownHookMethod;
062: try {
063: addShutdownHookMethod = Runtime.class.getMethod(
064: "addShutdownHook", new Class[] { Thread.class });
065: } catch (NoSuchMethodException e) {
066: System.out
067: .println("Shutdown hooks not supported by current JVM.");
068: return;
069: }
070:
071: System.out
072: .println("This application registers a shutdown hook which");
073: System.out
074: .println("should be executed after the JVM has told the Wrapper");
075: System.out.println("it is exiting.");
076: System.out
077: .println("This is to test the wrapper.jvm_exit.timeout property");
078:
079: Runtime runtime = Runtime.getRuntime();
080: Thread hook = new Thread() {
081: public void run() {
082: System.out
083: .println("Starting shutdown hook. Loop for 20 seconds.");
084: System.out
085: .println("Should timeout unless this property is set: wrapper.jvm_exit.timeout=25");
086:
087: long start = System.currentTimeMillis();
088: while (System.currentTimeMillis() - start < 20000) {
089: try {
090: Thread.sleep(250);
091: } catch (InterruptedException e) {
092: // Ignore
093: }
094: }
095: System.out
096: .println("Shutdown look complete. Should exit now.");
097: }
098: };
099: try {
100: addShutdownHookMethod
101: .invoke(runtime, new Object[] { hook });
102: } catch (IllegalAccessException e) {
103: System.out.println("Unable to register shutdown hook: "
104: + e.getMessage());
105: } catch (InvocationTargetException e) {
106: System.out.println("Unable to register shutdown hook: "
107: + e.getMessage());
108: }
109:
110: System.out
111: .println("Application complete. Wrapper should stop, invoking the shutdown hooks.");
112: System.out.println();
113: }
114: }
|