Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/openjdk-multiarch-jdk8u
Path: blob/aarch64-shenandoah-jdk8u272-b10/jdk/test/javax/management/remote/mandatory/notif/ServerNotifs.java
38867 views
1
/*
2
* Copyright (c) 2003, Oracle and/or its affiliates. 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.
8
*
9
* This code is distributed in the hope that it will be useful, but WITHOUT
10
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
12
* version 2 for more details (a copy is included in the LICENSE file that
13
* accompanied this code).
14
*
15
* You should have received a copy of the GNU General Public License version
16
* 2 along with this work; if not, write to the Free Software Foundation,
17
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18
*
19
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20
* or visit www.oracle.com if you need additional information or have any
21
* questions.
22
*/
23
24
/*
25
* @test ServerNotifs.java
26
* @bug 7654321
27
* @summary Tests the reception of the notifications for opened and closed
28
* connections
29
* @author sjiang
30
* @run clean ServerNotifs
31
* @run build ServerNotifs
32
* @run main ServerNotifs
33
*/
34
35
// JAVA
36
import java.io.*;
37
import java.net.*;
38
import java.util.*;
39
40
// JMX
41
import javax.management.*;
42
43
// RJMX
44
import javax.management.remote.*;
45
46
public class ServerNotifs {
47
48
private static void echo(String msg) {
49
System.out.println(msg);
50
}
51
52
public static void main(String[] args) {
53
54
try {
55
// Create MBeanServer
56
//
57
echo("---Create the MBeanServer...");
58
MBeanServer mbs = MBeanServerFactory.createMBeanServer();
59
60
// Create RMIConnectorServer
61
//
62
echo("---Instantiate the RMIConnectorServer...");
63
JMXServiceURL url = new JMXServiceURL("service:jmx:rmi://");
64
JMXConnectorServer cs =
65
JMXConnectorServerFactory.newJMXConnectorServer(url,
66
null,
67
mbs);
68
69
echo("---Register the RMIConnectorServer in the MBeanServer...");
70
ObjectName on =
71
new ObjectName("JMXConnectors:name=RMIConnectorServer");
72
mbs.registerMBean(cs, on);
73
74
echo("---Start the RMIConnectorServer...");
75
cs.start();
76
url = cs.getAddress();
77
echo("---RMIConnectorServer address: " + url);
78
79
echo("---Add a local listener to the RMIConnectorServer...");
80
mbs.addNotificationListener(on, new MyListener(), null, null);
81
82
// Create RMI connector
83
//
84
echo("---Instantiate the RMIConnector...");
85
JMXConnector c = JMXConnectorFactory.newJMXConnector(url, null);
86
87
// Expect to get a "jmx.remote.connection.opened" notification
88
//
89
echo("---Open connection...");
90
c.connect(null);
91
Thread.sleep(100);
92
93
// Expect to get a "jmx.remote.connection.closed" notification
94
//
95
echo("---Close connection...");
96
c.close();
97
Thread.sleep(100);
98
99
// Waiting for all notifications
100
//
101
synchronized(waiting) {
102
if (!succeeded) {
103
final long waitingTime = 10000;
104
long remainingTime = waitingTime;
105
final long startTime = System.currentTimeMillis();
106
while (!succeeded && remainingTime > 0) {
107
waiting.wait(remainingTime);
108
remainingTime = waitingTime -
109
(System.currentTimeMillis() - startTime);
110
}
111
}
112
}
113
114
// Stop the RMIConnectorServer
115
//
116
echo("---Stop the RMIConnectorServer...");
117
cs.stop();
118
119
if (!succeeded) {
120
System.out.println("Timeout, did not get all notifications!");
121
System.exit(1);
122
}
123
} catch (MBeanException mbe) {
124
echo("---Test failed.");
125
echo("---Got exception: " + mbe);
126
mbe.getTargetException().printStackTrace();
127
System.exit(1);
128
} catch (RuntimeOperationsException roe) {
129
echo("---Test failed.");
130
echo("---Got exception: " + roe);
131
roe.getTargetException().printStackTrace();
132
System.exit(1);
133
} catch (Throwable t) {
134
echo("---Test failed.");
135
echo("---Got throwable: " + t);
136
t.printStackTrace();
137
System.exit(1);
138
}
139
}
140
141
private static class MyListener implements NotificationListener {
142
public void handleNotification(Notification n, Object o) {
143
if (index == types.length) {
144
return;
145
}
146
echo("---Got a notification: " + n.getType());
147
echo(n.getMessage());
148
if (n instanceof JMXConnectionNotification) {
149
if (!n.getType().equals(types[index++])) {
150
System.out.println("Waiting to get a notification with " +
151
"type: " + types[index-1] + ", but " +
152
"got one with type: " + n.getType());
153
System.exit(1);
154
}
155
if (index == types.length) {
156
synchronized(waiting) {
157
succeeded = true;
158
waiting.notify();
159
}
160
}
161
}
162
}
163
}
164
165
private static final String[] types =
166
new String[] {JMXConnectionNotification.OPENED,
167
JMXConnectionNotification.CLOSED};
168
private static int index = 0;
169
private static int[] waiting = new int[0];
170
private static boolean succeeded = false;
171
}
172
173