84 MBeanServer mbs = MBeanServerFactory.newMBeanServer(); |
84 MBeanServer mbs = MBeanServerFactory.newMBeanServer(); |
85 cs = new RMIConnectorServer(url, null, mbs); |
85 cs = new RMIConnectorServer(url, null, mbs); |
86 test(cs, mbs); |
86 test(cs, mbs); |
87 |
87 |
88 System.out.println("===Remove any leftover forwarders==="); |
88 System.out.println("===Remove any leftover forwarders==="); |
89 while (cs.getSystemMBeanServer() instanceof MBeanServerForwarder) { |
89 MBeanServerForwarder systemMBSF = cs.getSystemMBeanServerForwarder(); |
90 MBeanServerForwarder mbsf = |
90 // Real code would just do systemMBSF.setMBeanServer(mbs). |
91 (MBeanServerForwarder) cs.getSystemMBeanServer(); |
91 while (true) { |
92 cs.removeMBeanServerForwarder(mbsf); |
92 MBeanServer xmbs = systemMBSF.getMBeanServer(); |
|
93 if (!(xmbs instanceof MBeanServerForwarder)) |
|
94 break; |
|
95 cs.removeMBeanServerForwarder((MBeanServerForwarder) xmbs); |
93 } |
96 } |
94 expectChain(cs, "U", mbs); |
97 expectChain(cs, "U", mbs); |
95 |
98 |
96 System.out.println("===Ensure forwarders are called==="); |
99 System.out.println("===Ensure forwarders are called==="); |
97 cs.setMBeanServerForwarder(forwarders[0]); |
100 cs.setMBeanServerForwarder(forwarders[0]); |
98 cs.setSystemMBeanServerForwarder(forwarders[1]); |
101 systemMBSF.setMBeanServer(forwarders[1]); |
|
102 forwarders[1].setMBeanServer(forwarders[0]); |
99 expectChain(cs, "1U0", mbs); |
103 expectChain(cs, "1U0", mbs); |
100 cs.start(); |
104 cs.start(); |
101 if (forwarders[0].defaultDomainCount != 0 || |
105 if (forwarders[0].defaultDomainCount != 0 || |
102 forwarders[1].defaultDomainCount != 0) { |
106 forwarders[1].defaultDomainCount != 0) { |
103 fail("defaultDomainCount not zero"); |
107 fail("defaultDomainCount not zero"); |
123 } |
127 } |
124 |
128 |
125 private static void test(JMXConnectorServer cs, MBeanServer end) { |
129 private static void test(JMXConnectorServer cs, MBeanServer end) { |
126 // A newly-created connector server might have system forwarders, |
130 // A newly-created connector server might have system forwarders, |
127 // so get rid of those. |
131 // so get rid of those. |
128 while (cs.getSystemMBeanServer() != cs.getMBeanServer()) |
132 MBeanServerForwarder systemMBSF = cs.getSystemMBeanServerForwarder(); |
129 cs.removeMBeanServerForwarder((MBeanServerForwarder) cs.getSystemMBeanServer()); |
133 systemMBSF.setMBeanServer(cs.getMBeanServer()); |
130 |
134 |
131 expectChain(cs, "U", end); |
135 expectChain(cs, "U", end); |
132 |
136 |
133 System.out.println("Add a user forwarder"); |
137 System.out.println("Add a user forwarder"); |
134 cs.setMBeanServerForwarder(forwarders[0]); |
138 cs.setMBeanServerForwarder(forwarders[0]); |
137 System.out.println("Add another user forwarder"); |
141 System.out.println("Add another user forwarder"); |
138 cs.setMBeanServerForwarder(forwarders[1]); |
142 cs.setMBeanServerForwarder(forwarders[1]); |
139 expectChain(cs, "U10", end); |
143 expectChain(cs, "U10", end); |
140 |
144 |
141 System.out.println("Add a system forwarder"); |
145 System.out.println("Add a system forwarder"); |
142 cs.setSystemMBeanServerForwarder(forwarders[2]); |
146 forwarders[2].setMBeanServer(systemMBSF.getMBeanServer()); |
|
147 systemMBSF.setMBeanServer(forwarders[2]); |
143 expectChain(cs, "2U10", end); |
148 expectChain(cs, "2U10", end); |
144 |
149 |
145 System.out.println("Add another user forwarder"); |
150 System.out.println("Add another user forwarder"); |
146 cs.setMBeanServerForwarder(forwarders[3]); |
151 cs.setMBeanServerForwarder(forwarders[3]); |
147 expectChain(cs, "2U310", end); |
152 expectChain(cs, "2U310", end); |
148 |
153 |
149 System.out.println("Add another system forwarder"); |
154 System.out.println("Add another system forwarder"); |
150 cs.setSystemMBeanServerForwarder(forwarders[4]); |
155 forwarders[4].setMBeanServer(systemMBSF.getMBeanServer()); |
|
156 systemMBSF.setMBeanServer(forwarders[4]); |
151 expectChain(cs, "42U310", end); |
157 expectChain(cs, "42U310", end); |
152 |
158 |
153 System.out.println("Remove the first user forwarder"); |
159 System.out.println("Remove the first user forwarder"); |
154 cs.removeMBeanServerForwarder(forwarders[3]); |
160 cs.removeMBeanServerForwarder(forwarders[3]); |
155 expectChain(cs, "42U10", end); |
161 expectChain(cs, "42U10", end); |
213 chain.substring(postu); |
219 chain.substring(postu); |
214 break; |
220 break; |
215 } |
221 } |
216 case 2: { // add it to the system chain |
222 case 2: { // add it to the system chain |
217 System.out.println("Add " + c + " to system chain"); |
223 System.out.println("Add " + c + " to system chain"); |
218 if (cs.getSystemMBeanServer() == null) |
224 mbsf.setMBeanServer(systemMBSF.getMBeanServer()); |
219 mbsf.setMBeanServer(null); |
225 systemMBSF.setMBeanServer(mbsf); |
220 cs.setSystemMBeanServerForwarder(mbsf); |
|
221 chain = c + chain; |
226 chain = c + chain; |
222 break; |
227 break; |
223 } |
228 } |
224 } |
229 } |
225 } |
230 } |
238 * After traversing the chains, we should be pointing at "end". |
243 * After traversing the chains, we should be pointing at "end". |
239 */ |
244 */ |
240 private static void expectChain( |
245 private static void expectChain( |
241 JMXConnectorServer cs, String chain, MBeanServer end) { |
246 JMXConnectorServer cs, String chain, MBeanServer end) { |
242 System.out.println("...expected chain: " + chain); |
247 System.out.println("...expected chain: " + chain); |
243 MBeanServer curr = cs.getSystemMBeanServer(); |
248 MBeanServer curr = cs.getSystemMBeanServerForwarder().getMBeanServer(); |
244 int i = 0; |
249 int i = 0; |
245 while (i < chain.length()) { |
250 while (i < chain.length()) { |
246 char c = chain.charAt(i); |
251 char c = chain.charAt(i); |
247 if (c == 'U') { |
252 if (c == 'U') { |
248 if (cs.getMBeanServer() != curr) { |
253 if (cs.getMBeanServer() != curr) { |