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/EmptyDomainNotificationTest.java
38867 views
1
/*
2
* Copyright (c) 2005, 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
26
* @bug 6238731
27
* @summary Check that the expected notification is received by the JMX
28
* client even when the domain in the ObjectName is not specified
29
* @author Shanliang JIANG
30
* @run clean EmptyDomainNotificationTest
31
* @run build EmptyDomainNotificationTest
32
* @run main EmptyDomainNotificationTest
33
*/
34
35
import java.util.ArrayList;
36
import java.util.List;
37
import javax.management.MBeanServer;
38
import javax.management.MBeanServerConnection;
39
import javax.management.MBeanServerFactory;
40
import javax.management.Notification;
41
import javax.management.NotificationBroadcasterSupport;
42
import javax.management.NotificationListener;
43
import javax.management.ObjectName;
44
import javax.management.remote.JMXConnector;
45
import javax.management.remote.JMXConnectorFactory;
46
import javax.management.remote.JMXConnectorServer;
47
import javax.management.remote.JMXConnectorServerFactory;
48
import javax.management.remote.JMXServiceURL;
49
50
public class EmptyDomainNotificationTest {
51
52
public static interface SimpleMBean {
53
public void emitNotification();
54
}
55
56
public static class Simple
57
extends NotificationBroadcasterSupport
58
implements SimpleMBean {
59
public void emitNotification() {
60
sendNotification(new Notification("simple", this, 0));
61
}
62
}
63
64
public static class Listener implements NotificationListener {
65
public void handleNotification(Notification n, Object h) {
66
System.out.println(
67
"EmptyDomainNotificationTest-Listener-handleNotification: receives:" + n);
68
69
if (n.getType().equals("simple")) {
70
synchronized(this) {
71
received++;
72
73
this.notifyAll();
74
}
75
}
76
}
77
78
public int received;
79
}
80
81
public static void main(String[] args) throws Exception {
82
83
final MBeanServer mbs = MBeanServerFactory.createMBeanServer();
84
85
final JMXServiceURL url = new JMXServiceURL("service:jmx:rmi://");
86
87
JMXConnectorServer server = JMXConnectorServerFactory.newJMXConnectorServer(url, null, mbs);
88
server.start();
89
90
JMXConnector client = JMXConnectorFactory.connect(server.getAddress(), null);
91
92
final MBeanServerConnection mbsc = client.getMBeanServerConnection();
93
94
final ObjectName mbean = ObjectName.getInstance(":type=Simple");
95
mbsc.createMBean(Simple.class.getName(), mbean);
96
97
System.out.println("EmptyDomainNotificationTest-main: add a listener ...");
98
final Listener li = new Listener();
99
mbsc.addNotificationListener(mbean, li, null, null);
100
101
System.out.println("EmptyDomainNotificationTest-main: ask to send a notif ...");
102
mbsc.invoke(mbean, "emitNotification", null, null);
103
104
System.out.println("EmptyDomainNotificationTest-main: waiting notif...");
105
final long stopTime = System.currentTimeMillis() + 2000;
106
synchronized(li) {
107
long toWait = stopTime - System.currentTimeMillis();
108
109
while (li.received < 1 && toWait > 0) {
110
li.wait(toWait);
111
112
toWait = stopTime - System.currentTimeMillis();
113
}
114
}
115
116
if (li.received < 1) {
117
throw new RuntimeException("No notif received!");
118
} else if (li.received > 1) {
119
throw new RuntimeException("Wait one notif but got: "+li.received);
120
}
121
122
System.out.println("EmptyDomainNotificationTest-main: Got the expected notif!");
123
124
System.out.println("EmptyDomainNotificationTest-main: remove the listener.");
125
mbsc.removeNotificationListener(mbean, li);
126
127
// clean
128
client.close();
129
server.stop();
130
131
System.out.println("EmptyDomainNotificationTest-main: Bye.");
132
}
133
}
134
135