blob: 9f79f21887af1fae952ef8ef2af3b5d1487a7cc5 [file] [log] [blame]
J. Duke319a3b92007-12-01 00:00:00 +00001/*
2 * Copyright 2004 Sun Microsystems, Inc. All Rights Reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation. Sun designates this
8 * particular file as subject to the "Classpath" exception as provided
9 * by Sun in the LICENSE file that accompanied this code.
10 *
11 * This code is distributed in the hope that it will be useful, but WITHOUT
12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14 * version 2 for more details (a copy is included in the LICENSE file that
15 * accompanied this code).
16 *
17 * You should have received a copy of the GNU General Public License version
18 * 2 along with this work; if not, write to the Free Software Foundation,
19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20 *
21 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
22 * CA 95054 USA or visit www.sun.com if you need additional information or
23 * have any questions.
24 */
25
26package sun.jvmstat.monitor;
27
28import java.util.List;
29
30import sun.jvmstat.monitor.event.VmListener;
31
32/**
33 * Interface for interacting with a monitorable Java Virtual Machine.
34 * The MonitoredVm interface provides methods for discovery of exported
35 * instrumentation, for attaching event listeners, and for overall
36 * maintenance of the connection to the target.
37 *
38 * @author Brian Doherty
39 * @since 1.5
40 */
41public interface MonitoredVm {
42
43 /**
44 * Get the VmIdentifier associated with this MonitoredVm
45 *
46 * @return VmIdentifier - the fully resolved Vm identifier associated
47 * with this MonitoredVm.
48 */
49 VmIdentifier getVmIdentifier();
50
51 /**
52 * Find a named Instrumentation object.
53 *
54 * This method will look for the named instrumentation object in the
55 * instrumentation exported by this Java Virtual Machine. If an
56 * instrumentation object with the given name exists, a Monitor interface
57 * to that object will be return. Otherwise, the method returns
58 * <tt>null</tt>.
59 *
60 * @param name the name of the Instrumentation object to find.
61 * @return Monitor - the {@link Monitor} object that can be used to
62 * monitor the the named instrumentation object, or
63 * <tt>null</tt> if the named object doesn't exist.
64 * @throws MonitorException Thrown if an error occurs while communicating
65 * with the target Java Virtual Machine.
66 */
67 Monitor findByName(String name) throws MonitorException;
68
69 /**
70 * Find all Instrumentation objects with names matching the given pattern.
71 *
72 * This method returns a {@link List} of Monitor objects such that
73 * the name of each object matches the given pattern.
74 *
75 * @param patternString a string containing a pattern as described in
76 * {@link java.util.regex.Pattern}.
77 * @return List<Monitor> - a List of {@link Monitor} objects that can be used to
78 * monitor the instrumentation objects whose names match
79 * the given pattern. If no instrumentation objects have`
80 * names matching the given pattern, then an empty List
81 * is returned.
82 * @throws MonitorException Thrown if an error occurs while communicating
83 * with the target Java Virtual Machine.
84 * @see java.util.regex.Pattern
85 */
86 List<Monitor> findByPattern(String patternString) throws MonitorException;
87
88 /**
89 * Detach from target Java Virtual Machine.
90 *
91 * After calling this method, updates of the instrumentation data values
92 * may be halted. All event notifications are halted. Further interactions
93 * with this object should be avoided.
94 */
95 void detach();
96
97
98 /* ---- Methods to support polled MonitoredVm Implementations ---- */
99
100 /**
101 * Set the polling interval to <code>interval</code> milliseconds.
102 *
103 * Polling based monitoring implementations need to refresh the
104 * instrumentation data on a periodic basis. This interface allows
105 * the interval to override the implementation specific default
106 * interval.
107 *
108 * @param interval the polling interval in milliseconds
109 */
110 void setInterval(int interval);
111
112 /**
113 * Get the polling interval.
114 *
115 * @return int - the current polling interval in milliseconds.
116 * @see #setInterval
117 */
118 int getInterval();
119
120 /**
121 * Set the last exception encountered while polling this MonitoredVm.
122 *
123 * Polling implementations may choose to poll asynchronously. This
124 * method allows an asynchronous task to communicate any polling related
125 * exceptions with the application. When an a non-null exception is reported
126 * through this interface, the MonitoredVm instance is considered to
127 * be in the <em>errored</em> state.
128 *
129 * @param cause the exception to record.
130 * @see #isErrored
131 */
132 void setLastException(Exception cause);
133
134 /**
135 * Get the last exception encountered while polling this MonitoredVm.
136 *
137 * Returns the last exception observed by the implementation dependent
138 * polling task or <tt>null</tt> if no such error has occurred.
139 *
140 * @return Exception - the last exception that occurred during polling
141 * or <tt>null</tt> if no error condition exists.
142 * @see #isErrored
143 * @see #setLastException
144 */
145 Exception getLastException();
146
147 /**
148 * Clear the last exception.
149 *
150 * Calling this method will clear the <em>errored</em> state of this
151 * MonitoredVm. However, there is no guarantee that clearing the
152 * the errored state return the asynchronous polling task to an
153 * operational state.
154 *
155 */
156 void clearLastException();
157
158 /**
159 * Test if this MonitoredVm is in the errored state.
160 * The errored state exists only if an error was reported with
161 * call to {@link #setLastException} and only if the parameter to
162 * that call was non-null and no subsequent calls are made to
163 * {@link #clearLastException}.
164 *
165 * @return boolean - true if the instance has a non-null error condition
166 * set, false otherwise.
167 *
168 * @see #setLastException
169 * @see #getLastException
170 */
171 boolean isErrored();
172
173 /**
174 * Add a VmListener. The given listener is added to the list of
175 * VmListener objects to be notified of MonitoredVm related events.
176 *
177 * @param listener the VmListener to add.
178 * @throws MonitorException Thrown if any problems occur while attempting
179 * to add this listener.
180 */
181 void addVmListener(VmListener listener) throws MonitorException;
182
183 /**
184 * Remove a VmListener. The given listener is removed from the list of
185 * VmListener objects to be notified of MonitoredVm related events.
186 *
187 * @param listener the VmListener to be removed.
188 * @throws MonitorException Thrown if any problems occur while attempting
189 * to remove this listener.
190 */
191 void removeVmListener(VmListener listener) throws MonitorException;
192}