Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/openjdk-multiarch-jdk8u
Path: blob/aarch64-shenandoah-jdk8u272-b10/jdk/src/share/demo/management/JTop/JTopPlugin.java
38829 views
1
/*
2
* Copyright (c) 2006, 2011, Oracle and/or its affiliates. All rights reserved.
3
*
4
* Redistribution and use in source and binary forms, with or without
5
* modification, are permitted provided that the following conditions
6
* are met:
7
*
8
* - Redistributions of source code must retain the above copyright
9
* notice, this list of conditions and the following disclaimer.
10
*
11
* - Redistributions in binary form must reproduce the above copyright
12
* notice, this list of conditions and the following disclaimer in the
13
* documentation and/or other materials provided with the distribution.
14
*
15
* - Neither the name of Oracle nor the names of its
16
* contributors may be used to endorse or promote products derived
17
* from this software without specific prior written permission.
18
*
19
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
20
* IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
21
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
22
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
23
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
24
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
25
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
26
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
27
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
28
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
29
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30
*/
31
32
/*
33
* This source code is provided to illustrate the usage of a given feature
34
* or technique and has been deliberately simplified. Additional steps
35
* required for a production-quality application, such as security checks,
36
* input validation and proper error handling, might not be present in
37
* this sample code.
38
*/
39
40
41
/*
42
*
43
* Example of a JConsole Plugin. This loads JTop as a JConsole tab.
44
*
45
* @author Mandy Chung
46
*/
47
48
import java.beans.PropertyChangeEvent;
49
import java.beans.PropertyChangeListener;
50
import java.util.LinkedHashMap;
51
import java.util.Map;
52
53
import javax.swing.JPanel;
54
import javax.swing.SwingWorker;
55
56
import com.sun.tools.jconsole.JConsoleContext;
57
import com.sun.tools.jconsole.JConsoleContext.ConnectionState;
58
import com.sun.tools.jconsole.JConsolePlugin;
59
60
/**
61
* JTopPlugin is a subclass to com.sun.tools.jconsole.JConsolePlugin
62
*
63
* JTopPlugin is loaded and instantiated by JConsole. One instance
64
* is created for each window that JConsole creates. It listens to
65
* the connected property change so that it will update JTop with
66
* the valid MBeanServerConnection object. JTop is a JPanel object
67
* displaying the thread and its CPU usage information.
68
*/
69
public class JTopPlugin extends JConsolePlugin implements PropertyChangeListener
70
{
71
private JTop jtop = null;
72
private Map<String, JPanel> tabs = null;
73
74
public JTopPlugin() {
75
// register itself as a listener
76
addContextPropertyChangeListener(this);
77
}
78
79
/*
80
* Returns a JTop tab to be added in JConsole.
81
*/
82
@Override
83
public synchronized Map<String, JPanel> getTabs() {
84
if (tabs == null) {
85
jtop = new JTop();
86
jtop.setMBeanServerConnection(
87
getContext().getMBeanServerConnection());
88
// use LinkedHashMap if you want a predictable order
89
// of the tabs to be added in JConsole
90
tabs = new LinkedHashMap<String, JPanel>();
91
tabs.put("JTop", jtop);
92
}
93
return tabs;
94
}
95
96
/*
97
* Returns a SwingWorker which is responsible for updating the JTop tab.
98
*/
99
@Override
100
public SwingWorker<?,?> newSwingWorker() {
101
return jtop.newSwingWorker();
102
}
103
104
// You can implement the dispose() method if you need to release
105
// any resource when the plugin instance is disposed when the JConsole
106
// window is closed.
107
//
108
// public void dispose() {
109
// }
110
111
/*
112
* Property listener to reset the MBeanServerConnection
113
* at reconnection time.
114
*/
115
@Override
116
public void propertyChange(PropertyChangeEvent ev) {
117
String prop = ev.getPropertyName();
118
if (prop == JConsoleContext.CONNECTION_STATE_PROPERTY) {
119
ConnectionState newState = (ConnectionState)ev.getNewValue();
120
// JConsole supports disconnection and reconnection
121
// The MBeanServerConnection will become invalid when
122
// disconnected. Need to use the new MBeanServerConnection object
123
// created at reconnection time.
124
if (newState == ConnectionState.CONNECTED && jtop != null) {
125
jtop.setMBeanServerConnection(
126
getContext().getMBeanServerConnection());
127
}
128
}
129
}
130
}
131
132