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