Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/mobile
Path: blob/master/test/jdk/javax/management/mxbean/RandomMXBeanTest.java
41149 views
1
/*
2
* Copyright (c) 2006, 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
/* This test essentially duplicates the functionality of MXBeanTest.java.
25
* See LeakTest.java for an explanation.
26
*/
27
28
import java.lang.reflect.Field;
29
import java.lang.reflect.InvocationHandler;
30
import java.lang.reflect.InvocationTargetException;
31
import java.lang.reflect.Method;
32
import java.lang.reflect.Proxy;
33
import java.util.HashMap;
34
import java.util.Map;
35
import javax.management.InstanceAlreadyExistsException;
36
import javax.management.JMX;
37
import javax.management.MBeanRegistrationException;
38
import javax.management.MBeanServer;
39
import javax.management.MBeanServerFactory;
40
import javax.management.MalformedObjectNameException;
41
import javax.management.NotCompliantMBeanException;
42
import javax.management.ObjectName;
43
44
public class RandomMXBeanTest {
45
public static interface StupidMXBean {
46
public int ZERO = Integer.parseInt("0");
47
public int getZero();
48
public int identity(int x);
49
}
50
51
public static class StupidImpl implements StupidMXBean {
52
public int getZero() {
53
return 0;
54
}
55
56
public int identity(int x) {
57
return x;
58
}
59
}
60
61
public static interface ReferMXBean {
62
public StupidMXBean getStupid();
63
}
64
65
public static class ReferImpl implements ReferMXBean {
66
private final StupidMXBean stupid;
67
68
ReferImpl(StupidMXBean stupid) {
69
this.stupid = stupid;
70
}
71
72
public StupidMXBean getStupid() {
73
return stupid;
74
}
75
}
76
77
private static class WrapInvocationHandler implements InvocationHandler {
78
private final Object wrapped;
79
80
WrapInvocationHandler(Object wrapped) {
81
this.wrapped = wrapped;
82
}
83
84
public Object invoke(Object proxy, Method method, Object[] args)
85
throws Throwable {
86
return method.invoke(wrapped, args);
87
}
88
}
89
90
private static class DullInvocationHandler implements InvocationHandler {
91
private static Map<Class<?>, Object> zeroMap =
92
new HashMap<Class<?>, Object>();
93
static {
94
zeroMap.put(byte.class, (byte) 0);
95
zeroMap.put(int.class, 0);
96
zeroMap.put(short.class, (short) 0);
97
zeroMap.put(long.class, 0L);
98
zeroMap.put(float.class, 0F);
99
zeroMap.put(double.class, 0.0);
100
zeroMap.put(boolean.class, false);
101
zeroMap.put(char.class, '\0');
102
}
103
104
public static Object zeroFor(Class<?> c) {
105
if (c.isPrimitive())
106
return zeroMap.get(c);
107
else
108
return null;
109
}
110
111
public Object invoke(Object proxy, Method method, Object[] args)
112
throws Throwable {
113
Class<?> retType = method.getReturnType();
114
if (!retType.isPrimitive())
115
return null;
116
return zeroMap.get(retType);
117
}
118
}
119
120
public static void main(String[] args) throws Exception {
121
MBeanServer mbs = MBeanServerFactory.newMBeanServer();
122
ObjectName name = new ObjectName("a:b=c");
123
StupidMXBean stupid = new StupidImpl();
124
mbs.registerMBean(stupid, name);
125
ObjectName referName = new ObjectName("a:c=d");
126
mbs.registerMBean(new ReferImpl(stupid), referName);
127
System.out.println(mbs.getMBeanInfo(name));
128
StupidMXBean stupid2 = (StupidMXBean)
129
Proxy.newProxyInstance(StupidMXBean.class.getClassLoader(),
130
new Class<?>[] {StupidMXBean.class},
131
new WrapInvocationHandler(stupid));
132
ObjectName stupidName2 = new ObjectName("a:d=e");
133
mbs.registerMBean(stupid2, stupidName2);
134
Field zero = StupidMXBean.class.getField("ZERO");
135
System.out.println("Zero field = " + zero.get(null));
136
test(mbs, MerlinMXBean.class);
137
test(mbs, TigerMXBean.class);
138
139
StupidMXBean proxy = JMX.newMXBeanProxy(mbs, name, StupidMXBean.class);
140
System.out.println("Zero = " + proxy.getZero());
141
System.out.println("One = " + proxy.identity(1));
142
ReferMXBean referProxy =
143
JMX.newMXBeanProxy(mbs, referName, ReferMXBean.class);
144
StupidMXBean stupidProxy2 = referProxy.getStupid();
145
System.out.println("Same proxy: " + (proxy == stupidProxy2));
146
Method[] methods = StupidMXBean.class.getMethods();
147
for (Method method : methods) {
148
if (method.getParameterTypes().length == 0)
149
method.invoke(proxy, new Object[0]);
150
}
151
}
152
153
private static <T> void test(MBeanServer mbs, Class<T> c) throws Exception {
154
System.out.println("Testing " + c.getName());
155
T merlin = c.cast(
156
Proxy.newProxyInstance(c.getClassLoader(),
157
new Class<?>[] {c},
158
new DullInvocationHandler()));
159
ObjectName merlinName = new ObjectName("a:type=" + c.getName());
160
mbs.registerMBean(merlin, merlinName);
161
System.out.println(mbs.getMBeanInfo(merlinName));
162
T merlinProxy = JMX.newMXBeanProxy(mbs, merlinName, c);
163
Method[] merlinMethods = c.getMethods();
164
for (Method m : merlinMethods) {
165
Class<?>[] types = m.getParameterTypes();
166
Object[] params = new Object[types.length];
167
for (int i = 0; i < types.length; i++)
168
params[i] = DullInvocationHandler.zeroFor(types[i]);
169
System.out.println("Invoking " + m.getName());
170
m.invoke(merlinProxy, (Object[]) params);
171
}
172
}
173
}
174
175