1/* 2 * Copyright (c) 2004, 2015, 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 5016705 27 * @summary Tests the use of the RMIExporter class. 28 * @author Luis-Miguel Alventosa 29 * @modules java.management.rmi/com.sun.jmx.remote.internal.rmi 30 * @run clean RMIExporterTest 31 * @run build RMIExporterTest 32 * @run main RMIExporterTest 33 */ 34 35import java.rmi.NoSuchObjectException; 36import java.rmi.Remote; 37import java.rmi.RemoteException; 38import java.rmi.server.RMIClientSocketFactory; 39import java.rmi.server.RMIServerSocketFactory; 40import java.rmi.server.UnicastRemoteObject; 41import java.util.HashMap; 42import javax.management.MBeanServer; 43import javax.management.MBeanServerFactory; 44import javax.management.remote.JMXConnector; 45import javax.management.remote.JMXConnectorFactory; 46import javax.management.remote.JMXConnectorServer; 47import javax.management.remote.JMXConnectorServerFactory; 48import javax.management.remote.JMXServiceURL; 49import com.sun.jmx.remote.internal.rmi.RMIExporter; 50 51public class RMIExporterTest { 52 53 public static class CustomRMIExporter implements RMIExporter { 54 55 public boolean rmiServerExported = false; 56 public boolean rmiServerUnexported = false; 57 public boolean rmiConnectionExported = false; 58 public boolean rmiConnectionUnexported = false; 59 60 public Remote exportObject(Remote obj, 61 int port, 62 RMIClientSocketFactory csf, 63 RMIServerSocketFactory ssf) 64 throws RemoteException { 65 System.out.println("CustomRMIExporter::exportObject():: " + 66 "Remote = " + obj); 67 if (obj.toString().startsWith( 68 "javax.management.remote.rmi.RMIJRMPServerImpl")) 69 rmiServerExported = true; 70 if (obj.toString().startsWith( 71 "javax.management.remote.rmi.RMIConnectionImpl")) 72 rmiConnectionExported = true; 73 return UnicastRemoteObject.exportObject(obj, port, csf, ssf); 74 } 75 76 public boolean unexportObject(Remote obj, boolean force) 77 throws NoSuchObjectException { 78 System.out.println("CustomRMIExporter::unexportObject():: " + 79 "Remote = " + obj); 80 if (obj.toString().startsWith( 81 "javax.management.remote.rmi.RMIJRMPServerImpl")) 82 rmiServerUnexported = true; 83 if (obj.toString().startsWith( 84 "javax.management.remote.rmi.RMIConnectionImpl")) 85 rmiConnectionUnexported = true; 86 return UnicastRemoteObject.unexportObject(obj, force); 87 } 88 } 89 90 public static void main(String[] args) { 91 92 try { 93 // Instantiate the MBean server 94 // 95 System.out.println("Create the MBean server"); 96 MBeanServer mbs = MBeanServerFactory.createMBeanServer(); 97 98 // Initialize environment map to be passed to the connector server 99 // 100 System.out.println("Initialize environment map"); 101 HashMap env = new HashMap(); 102 CustomRMIExporter exporter = new CustomRMIExporter(); 103 env.put(RMIExporter.EXPORTER_ATTRIBUTE, exporter); 104 105 // Create an RMI connector server 106 // 107 System.out.println("Create an RMI connector server"); 108 JMXServiceURL url = new JMXServiceURL("service:jmx:rmi://"); 109 JMXConnectorServer cs = 110 JMXConnectorServerFactory.newJMXConnectorServer(url, env, mbs); 111 cs.start(); 112 113 // Create an RMI connector client 114 // 115 System.out.println("Create an RMI connector client"); 116 JMXConnector cc = 117 JMXConnectorFactory.connect(cs.getAddress(), null); 118 119 // Close RMI connector client 120 // 121 System.out.println("Close the RMI connector client"); 122 cc.close(); 123 124 // Stop RMI connector server 125 // 126 System.out.println("Stop the RMI connector server"); 127 cs.stop(); 128 129 // Check if remote objects were exported/unexported successfully 130 // 131 int errorCount = 0; 132 133 if (exporter.rmiServerExported) { 134 System.out.println("RMIServer exported OK!"); 135 } else { 136 System.out.println("RMIServer exported KO!"); 137 errorCount++; 138 } 139 140 if (exporter.rmiServerUnexported) { 141 System.out.println("RMIServer unexported OK!"); 142 } else { 143 System.out.println("RMIServer unexported KO!"); 144 errorCount++; 145 } 146 147 if (exporter.rmiConnectionExported) { 148 System.out.println("RMIConnection exported OK!"); 149 } else { 150 System.out.println("RMIConnection exported KO!"); 151 errorCount++; 152 } 153 154 if (exporter.rmiConnectionUnexported) { 155 System.out.println("RMIConnection unexported OK!"); 156 } else { 157 System.out.println("RMIConnection unexported KO!"); 158 errorCount++; 159 } 160 161 System.out.println("Bye! Bye!"); 162 163 if (errorCount > 0) { 164 System.out.println("RMIExporterTest FAILED!"); 165 System.exit(1); 166 } else { 167 System.out.println("RMIExporterTest PASSED!"); 168 } 169 } catch (Exception e) { 170 System.out.println("Unexpected exception caught = " + e); 171 e.printStackTrace(); 172 System.exit(1); 173 } 174 } 175} 176