01: package org.tanukisoftware.wrapper.jmx;
02:
03: /*
04: * Copyright (c) 1999, 2006 Tanuki Software Inc.
05: *
06: * Permission is hereby granted, free of charge, to any person
07: * obtaining a copy of the Java Service Wrapper and associated
08: * documentation files (the "Software"), to deal in the Software
09: * without restriction, including without limitation the rights
10: * to use, copy, modify, merge, publish, distribute, sub-license,
11: * and/or sell copies of the Software, and to permit persons to
12: * whom the Software is furnished to do so, subject to the
13: * following conditions:
14: *
15: * The above copyright notice and this permission notice shall be
16: * included in all copies or substantial portions of the Software.
17: *
18: * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
19: * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
20: * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
21: * NON-INFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
22: * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
23: * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
24: * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
25: * OTHER DEALINGS IN THE SOFTWARE.
26: */
27:
28: /**
29: * @author Leif Mortenson <leif@tanukisoftware.com>
30: */
31: public class WrapperManagerTesting implements
32: WrapperManagerTestingMBean {
33: /*---------------------------------------------------------------
34: * WrapperManagerTestingMBean Methods
35: *-------------------------------------------------------------*/
36: /**
37: * Causes the WrapperManager to go into a state which makes the JVM appear
38: * to be hung when viewed from the native Wrapper code. Does not have
39: * any effect when the JVM is not being controlled from the native
40: * Wrapper.
41: */
42: public void appearHung() {
43: org.tanukisoftware.wrapper.WrapperManager.appearHung();
44: }
45:
46: /**
47: * Cause an access violation within native JNI code. This currently causes
48: * the access violation by attempting to write to a null pointer.
49: */
50: public void accessViolationNative() {
51: // This action normally will not return, so launch it in a background
52: // thread giving JMX a chance to return a response to its client.
53: new Thread() {
54: public void run() {
55: try {
56: Thread.sleep(1000);
57: } catch (InterruptedException e) {
58: }
59:
60: org.tanukisoftware.wrapper.WrapperManager
61: .accessViolationNative();
62: }
63: }.start();
64: }
65:
66: /**
67: * Tells the native wrapper that the JVM wants to shut down and then
68: * promptly halts. Be careful when using this method as an application
69: * will not be given a chance to shutdown cleanly.
70: *
71: * @param exitCode The exit code that the Wrapper will return when it exits.
72: */
73: public void stopImmediate(final int exitCode) {
74: // This action normally will not return, so launch it in a background
75: // thread giving JMX a chance to return a response to its client.
76: new Thread() {
77: public void run() {
78: try {
79: Thread.sleep(1000);
80: } catch (InterruptedException e) {
81: }
82:
83: org.tanukisoftware.wrapper.WrapperManager
84: .stopImmediate(exitCode);
85: }
86: }.start();
87: }
88: }
|