Search in sources :

Example 86 with JMXConnector

use of javax.management.remote.JMXConnector in project jdk8u_jdk by JetBrains.

the class NotifReconnectDeadlockTest method main.

public static void main(String[] args) throws Exception {
    System.out.println(">>> Tests reconnection done by a fetching notif thread.");
    ObjectName oname = new ObjectName("Default:name=NotificationEmitter");
    JMXServiceURL url = new JMXServiceURL("rmi", null, 0);
    Map env = new HashMap(2);
    env.put("jmx.remote.x.server.connection.timeout", new Long(serverTimeout));
    env.put("jmx.remote.x.client.connection.check.period", new Long(Long.MAX_VALUE));
    final MBeanServer mbs = MBeanServerFactory.newMBeanServer();
    mbs.registerMBean(new NotificationEmitter(), oname);
    JMXConnectorServer server = JMXConnectorServerFactory.newJMXConnectorServer(url, env, mbs);
    server.start();
    JMXServiceURL addr = server.getAddress();
    JMXConnector client = JMXConnectorFactory.connect(addr, env);
    // let pass the first client open notif if there is
    Thread.sleep(100);
    client.getMBeanServerConnection().addNotificationListener(oname, listener, null, null);
    client.addConnectionNotificationListener(listener, null, null);
    // max test time: 2 minutes
    final long end = System.currentTimeMillis() + 120000;
    synchronized (lock) {
        while (clientState == null && System.currentTimeMillis() < end) {
            mbs.invoke(oname, "sendNotifications", new Object[] { new Notification("MyType", "", 0) }, new String[] { "javax.management.Notification" });
            try {
                lock.wait(10);
            } catch (Exception e) {
            }
        }
    }
    if (clientState == null) {
        throw new RuntimeException("No reconnection happened, need to reconfigure the test.");
    } else if (JMXConnectionNotification.FAILED.equals(clientState) || JMXConnectionNotification.CLOSED.equals(clientState)) {
        throw new RuntimeException("Failed to reconnect.");
    }
    System.out.println(">>> Passed!");
    client.removeConnectionNotificationListener(listener);
    client.close();
    server.stop();
}
Also used : JMXServiceURL(javax.management.remote.JMXServiceURL) HashMap(java.util.HashMap) Notification(javax.management.Notification) JMXConnectionNotification(javax.management.remote.JMXConnectionNotification) ObjectName(javax.management.ObjectName) JMXConnectorServer(javax.management.remote.JMXConnectorServer) JMXConnector(javax.management.remote.JMXConnector) HashMap(java.util.HashMap) Map(java.util.Map) MBeanServer(javax.management.MBeanServer)

Example 87 with JMXConnector

use of javax.management.remote.JMXConnector in project jdk8u_jdk by JetBrains.

the class RMINotifTest method main.

public static void main(String[] args) {
    try {
        // create a rmi registry
        Registry reg = null;
        int port = 6666;
        final Random r = new Random();
        while (port++ < 7000) {
            try {
                reg = LocateRegistry.createRegistry(++port);
                System.out.println("Creation of rmi registry succeeded. Running on port " + port);
                break;
            } catch (RemoteException re) {
            // no problem
            }
        }
        if (reg == null) {
            System.out.println("Failed to create a RMI registry, " + "the ports from 6666 to 6999 are all occupied.");
            System.exit(1);
        }
        // create a MBeanServer
        MBeanServer server = MBeanServerFactory.createMBeanServer();
        // create a notif emitter mbean
        ObjectName mbean = new ObjectName("Default:name=NotificationEmitter");
        server.registerMBean(new NotificationEmitter(), mbean);
        // create a rmi server
        JMXServiceURL url = new JMXServiceURL("rmi", null, port, "/jndi/rmi://:" + port + "/server" + port);
        System.out.println("RMIConnectorServer address " + url);
        JMXConnectorServer sServer = JMXConnectorServerFactory.newJMXConnectorServer(url, null, null);
        ObjectInstance ss = server.registerMBean(sServer, new ObjectName("Default:name=RmiConnectorServer"));
        sServer.start();
        // create a rmi client
        JMXConnector rmiConnection = JMXConnectorFactory.newJMXConnector(url, null);
        rmiConnection.connect(null);
        MBeanServerConnection client = rmiConnection.getMBeanServerConnection();
        // add listener at the client side
        client.addNotificationListener(mbean, listener, null, null);
        //ask to send notifs
        Object[] params = new Object[1];
        String[] signatures = new String[1];
        params[0] = new Integer(nb);
        signatures[0] = "java.lang.Integer";
        client.invoke(mbean, "sendNotifications", params, signatures);
        // waiting ...
        synchronized (lock) {
            if (receivedNotifs != nb) {
                lock.wait(10000);
                System.out.println(">>> Received notifications..." + receivedNotifs);
            }
        }
        // check
        if (receivedNotifs != nb) {
            System.exit(1);
        } else {
            System.out.println("The client received all notifications.");
        }
        // remove listener
        client.removeNotificationListener(mbean, listener);
        // more test
        NotificationFilterSupport filter = new NotificationFilterSupport();
        Object o = new Object();
        client.addNotificationListener(mbean, listener, filter, o);
        client.removeNotificationListener(mbean, listener, filter, o);
        sServer.stop();
    //          // clean
    //          client.unregisterMBean(mbean);
    //          rmiConnection.close();
    //          Thread.sleep(2000);
    } catch (Exception e) {
        e.printStackTrace();
        System.exit(1);
    }
}
Also used : JMXServiceURL(javax.management.remote.JMXServiceURL) ObjectInstance(javax.management.ObjectInstance) Registry(java.rmi.registry.Registry) LocateRegistry(java.rmi.registry.LocateRegistry) RemoteException(java.rmi.RemoteException) ObjectName(javax.management.ObjectName) JMXConnectorServer(javax.management.remote.JMXConnectorServer) Random(java.util.Random) JMXConnector(javax.management.remote.JMXConnector) NotificationFilterSupport(javax.management.NotificationFilterSupport) RemoteException(java.rmi.RemoteException) MBeanServerConnection(javax.management.MBeanServerConnection) MBeanServer(javax.management.MBeanServer)

Example 88 with JMXConnector

use of javax.management.remote.JMXConnector in project jdk8u_jdk by JetBrains.

the class UnexpectedNotifTest method test.

private static void test() throws Exception {
    // Create client
    //
    JMXConnector connector = JMXConnectorFactory.connect(url);
    MBeanServerConnection client = connector.getMBeanServerConnection();
    // Add listener at the client side
    //
    client.addNotificationListener(mbean, listener, null, null);
    // Cleanup
    //
    receivedNotifs = 0;
    // Ask to send notifs
    //
    Object[] params = new Object[] { new Integer(nb) };
    String[] signatures = new String[] { "java.lang.Integer" };
    client.invoke(mbean, "sendNotifications", params, signatures);
    //
    synchronized (lock) {
        for (int i = 0; i < 10; i++) {
            if (receivedNotifs < nb) {
                lock.wait(1000);
            }
        }
    }
    // Waiting again to ensure no more notifs
    //
    Thread.sleep(3000);
    synchronized (lock) {
        if (receivedNotifs != nb) {
            throw new Exception("The client expected to receive " + nb + " notifs, but got " + receivedNotifs);
        }
    }
    // Remove listener
    //
    client.removeNotificationListener(mbean, listener);
    connector.close();
}
Also used : JMXConnector(javax.management.remote.JMXConnector) MBeanServerConnection(javax.management.MBeanServerConnection)

Example 89 with JMXConnector

use of javax.management.remote.JMXConnector in project jdk8u_jdk by JetBrains.

the class NonJMXPrincipalsTest method runTest.

public static void runTest(JMXAuthenticator authenticator) throws Exception {
    //------------------------------------------------------------------
    // SERVER
    //------------------------------------------------------------------
    // Instantiate the MBean server
    //
    System.out.println("Create the MBean server");
    MBeanServer mbs = MBeanServerFactory.createMBeanServer();
    // Create SimpleStandard MBean
    //
    ObjectName mbeanName = new ObjectName("MBeans:type=SimpleStandard");
    System.out.println("Create SimpleStandard MBean...");
    mbs.createMBean("SimpleStandard", mbeanName, null, null);
    // Server's environment map
    //
    System.out.println(">>> Initialize the server's environment map");
    HashMap sEnv = new HashMap();
    // Provide a JMX Authenticator
    //
    sEnv.put("jmx.remote.authenticator", authenticator);
    // Provide the access level file used by the connector server to
    // perform user authorization. The access level file is a properties
    // based text file specifying username/access level pairs where
    // access level is either "readonly" or "readwrite" access to the
    // MBeanServer operations. This properties based access control
    // checker has been implemented using the MBeanServerForwarder
    // interface which wraps the real MBean server inside an access
    // controller MBean server which performs the access control checks
    // before forwarding the requests to the real MBean server.
    //
    // This property is implementation-dependent and might not be
    // supported by all implementations of the JMX Remote API.
    //
    sEnv.put("jmx.remote.x.access.file", System.getProperty("test.src") + File.separator + "access.properties");
    // Create an RMI connector server
    //
    System.out.println("Create an RMI connector server");
    JMXServiceURL url = new JMXServiceURL("service:jmx:rmi://");
    JMXConnectorServer cs = JMXConnectorServerFactory.newJMXConnectorServer(url, sEnv, mbs);
    // Start the RMI connector server
    //
    System.out.println("Start the RMI connector server");
    cs.start();
    System.out.println("RMI connector server successfully started");
    System.out.println("Waiting for incoming connections...");
    //------------------------------------------------------------------
    // CLIENT (admin)
    //------------------------------------------------------------------
    // Admin client environment map
    //
    String[] adminCreds = new String[] { "admin", "adminPassword" };
    System.out.println(">>> Initialize the client environment map for" + " user [" + adminCreds[0] + "] with " + "password [" + adminCreds[1] + "]");
    HashMap adminEnv = new HashMap();
    adminEnv.put("jmx.remote.credentials", adminCreds);
    // Create an RMI connector client and
    // connect it to the RMI connector server
    //
    System.out.println("Create an RMI connector client and " + "connect it to the RMI connector server");
    JMXConnector adminConnector = JMXConnectorFactory.connect(cs.getAddress(), adminEnv);
    // Get an MBeanServerConnection
    //
    System.out.println("Get an MBeanServerConnection");
    MBeanServerConnection adminConnection = adminConnector.getMBeanServerConnection();
    // Get the proxy for the Simple MBean
    //
    SimpleStandardMBean adminProxy = (SimpleStandardMBean) MBeanServerInvocationHandler.newProxyInstance(adminConnection, mbeanName, SimpleStandardMBean.class, false);
    // Get State attribute
    //
    System.out.println("State = " + adminProxy.getState());
    // Set State attribute
    //
    adminProxy.setState("changed state");
    // Get State attribute
    //
    System.out.println("State = " + adminProxy.getState());
    // Invoke "reset" in SimpleStandard MBean
    //
    System.out.println("Invoke reset() in SimpleStandard MBean...");
    adminProxy.reset();
    // Close MBeanServer connection
    //
    System.out.println("Close the admin connection to the server");
    adminConnector.close();
    //------------------------------------------------------------------
    // CLIENT (user)
    //------------------------------------------------------------------
    // User client environment map
    //
    String[] userCreds = new String[] { "user", "userPassword" };
    System.out.println(">>> Initialize the client environment map for" + " user [" + userCreds[0] + "] with " + "password [" + userCreds[1] + "]");
    HashMap userEnv = new HashMap();
    userEnv.put("jmx.remote.credentials", userCreds);
    // Create an RMI connector client and
    // connect it to the RMI connector server
    //
    System.out.println("Create an RMI connector client and " + "connect it to the RMI connector server");
    JMXConnector userConnector = JMXConnectorFactory.connect(cs.getAddress(), userEnv);
    // Get an MBeanServerConnection
    //
    System.out.println("Get an MBeanServerConnection");
    MBeanServerConnection userConnection = userConnector.getMBeanServerConnection();
    // Get the proxy for the Simple MBean
    //
    SimpleStandardMBean userProxy = (SimpleStandardMBean) MBeanServerInvocationHandler.newProxyInstance(userConnection, mbeanName, SimpleStandardMBean.class, false);
    // Get State attribute
    //
    System.out.println("State = " + userProxy.getState());
    //
    try {
        userProxy.setState("changed state");
    } catch (SecurityException e) {
        System.out.println("Got expected security exception: " + e);
    } catch (Exception e) {
        System.out.println("Got unexpected exception: " + e);
        e.printStackTrace(System.out);
    }
    // Get State attribute
    //
    System.out.println("State = " + userProxy.getState());
    //
    try {
        System.out.println("Invoke reset() in SimpleStandard MBean...");
        userProxy.reset();
    } catch (SecurityException e) {
        System.out.println("Got expected security exception: " + e);
    } catch (Exception e) {
        System.out.println("Got unexpected exception: " + e);
        e.printStackTrace(System.out);
    }
    // Close MBeanServer connection
    //
    System.out.println("Close the user connection to the server");
    userConnector.close();
    //------------------------------------------------------------------
    // SERVER
    //------------------------------------------------------------------
    // Stop the connector server
    //
    System.out.println(">>> Stop the connector server");
    cs.stop();
}
Also used : JMXServiceURL(javax.management.remote.JMXServiceURL) HashMap(java.util.HashMap) JMXConnector(javax.management.remote.JMXConnector) MBeanServerConnection(javax.management.MBeanServerConnection) MBeanServer(javax.management.MBeanServer) ObjectName(javax.management.ObjectName) JMXConnectorServer(javax.management.remote.JMXConnectorServer)

Example 90 with JMXConnector

use of javax.management.remote.JMXConnector in project jdk8u_jdk by JetBrains.

the class PasswordAccessFileTest method main.

public static void main(String[] args) {
    try {
        //------------------------------------------------------------------
        // SERVER
        //------------------------------------------------------------------
        // Instantiate the MBean server
        //
        System.out.println("Create the MBean server");
        MBeanServer mbs = MBeanServerFactory.createMBeanServer();
        // Create SimpleStandard MBean
        //
        ObjectName mbeanName = new ObjectName("MBeans:type=SimpleStandard");
        System.out.println("Create SimpleStandard MBean...");
        mbs.createMBean("SimpleStandard", mbeanName, null, null);
        // Server's environment map
        //
        System.out.println(">>> Initialize the server's environment map");
        HashMap sEnv = new HashMap();
        // Provide the password file used by the connector server to
        // perform user authentication. The password file is a properties
        // based text file specifying username/password pairs. This
        // properties based password authenticator has been implemented
        // using the JMXAuthenticator interface and is passed to the
        // connector through the "jmx.remote.authenticator" property
        // in the map.
        //
        // This property is implementation-dependent and might not be
        // supported by all implementations of the JMX Remote API.
        //
        sEnv.put("jmx.remote.x.password.file", System.getProperty("test.src") + File.separator + "password.properties");
        // Provide the access level file used by the connector server to
        // perform user authorization. The access level file is a properties
        // based text file specifying username/access level pairs where
        // access level is either "readonly" or "readwrite" access to the
        // MBeanServer operations. This properties based access control
        // checker has been implemented using the MBeanServerForwarder
        // interface which wraps the real MBean server inside an access
        // controller MBean server which performs the access control checks
        // before forwarding the requests to the real MBean server.
        //
        // This property is implementation-dependent and might not be
        // supported by all implementations of the JMX Remote API.
        //
        sEnv.put("jmx.remote.x.access.file", System.getProperty("test.src") + File.separator + "access.properties");
        // Create an RMI connector server
        //
        System.out.println("Create an RMI connector server");
        JMXServiceURL url = new JMXServiceURL("service:jmx:rmi://");
        JMXConnectorServer cs = JMXConnectorServerFactory.newJMXConnectorServer(url, sEnv, mbs);
        // Start the RMI connector server
        //
        System.out.println("Start the RMI connector server");
        cs.start();
        System.out.println("RMI connector server successfully started");
        System.out.println("Waiting for incoming connections...");
        //------------------------------------------------------------------
        // CLIENT : Invalid authentication credentials
        //------------------------------------------------------------------
        final String[][] invalidCreds = { { "admin1", "adminPassword" }, { "admin", "adminPassword1" }, { "user1", "userPassword" }, { "user", "userPassword1" } };
        //
        for (int i = 0; i < invalidCreds.length; i++) {
            // Client environment map
            //
            System.out.println(">>> Initialize the client environment map" + " for user [" + invalidCreds[i][0] + "] with password [" + invalidCreds[i][1] + "]");
            HashMap cEnv = new HashMap();
            cEnv.put("jmx.remote.credentials", invalidCreds[i]);
            // Create an RMI connector client and
            // connect it to the RMI connector server
            //
            System.out.println("Create an RMI connector client and " + "connect it to the RMI connector server");
            try {
                JMXConnector jmxc = JMXConnectorFactory.connect(cs.getAddress(), cEnv);
            } catch (SecurityException e) {
                System.out.println("Got expected security exception: " + e);
            } catch (Exception e) {
                System.out.println("Got unexpected exception: " + e);
                e.printStackTrace();
                System.exit(1);
            }
        }
        //------------------------------------------------------------------
        // CLIENT (admin)
        //------------------------------------------------------------------
        // Admin client environment map
        //
        String[] adminCreds = new String[] { "admin", "adminPassword" };
        System.out.println(">>> Initialize the client environment map for" + " user [" + adminCreds[0] + "] with " + "password [" + adminCreds[1] + "]");
        HashMap adminEnv = new HashMap();
        adminEnv.put("jmx.remote.credentials", adminCreds);
        // Create an RMI connector client and
        // connect it to the RMI connector server
        //
        System.out.println("Create an RMI connector client and " + "connect it to the RMI connector server");
        JMXConnector adminConnector = JMXConnectorFactory.connect(cs.getAddress(), adminEnv);
        // Get an MBeanServerConnection
        //
        System.out.println("Get an MBeanServerConnection");
        MBeanServerConnection adminConnection = adminConnector.getMBeanServerConnection();
        // Get the proxy for the Simple MBean
        //
        SimpleStandardMBean adminProxy = (SimpleStandardMBean) MBeanServerInvocationHandler.newProxyInstance(adminConnection, mbeanName, SimpleStandardMBean.class, false);
        // Get State attribute
        //
        System.out.println("State = " + adminProxy.getState());
        // Set State attribute
        //
        adminProxy.setState("changed state");
        // Get State attribute
        //
        System.out.println("State = " + adminProxy.getState());
        // Invoke "reset" in SimpleStandard MBean
        //
        System.out.println("Invoke reset() in SimpleStandard MBean...");
        adminProxy.reset();
        // Close MBeanServer connection
        //
        System.out.println("Close the admin connection to the server");
        adminConnector.close();
        //------------------------------------------------------------------
        // CLIENT (user)
        //------------------------------------------------------------------
        // User client environment map
        //
        String[] userCreds = new String[] { "user", "userPassword" };
        System.out.println(">>> Initialize the client environment map for" + " user [" + userCreds[0] + "] with " + "password [" + userCreds[1] + "]");
        HashMap userEnv = new HashMap();
        userEnv.put("jmx.remote.credentials", userCreds);
        // Create an RMI connector client and
        // connect it to the RMI connector server
        //
        System.out.println("Create an RMI connector client and " + "connect it to the RMI connector server");
        JMXConnector userConnector = JMXConnectorFactory.connect(cs.getAddress(), userEnv);
        // Get an MBeanServerConnection
        //
        System.out.println("Get an MBeanServerConnection");
        MBeanServerConnection userConnection = userConnector.getMBeanServerConnection();
        // Get the proxy for the Simple MBean
        //
        SimpleStandardMBean userProxy = (SimpleStandardMBean) MBeanServerInvocationHandler.newProxyInstance(userConnection, mbeanName, SimpleStandardMBean.class, false);
        // Get State attribute
        //
        System.out.println("State = " + userProxy.getState());
        //
        try {
            userProxy.setState("changed state");
        } catch (SecurityException e) {
            System.out.println("Got expected security exception: " + e);
        } catch (Exception e) {
            System.out.println("Got unexpected exception: " + e);
            e.printStackTrace();
            System.exit(1);
        }
        // Get State attribute
        //
        System.out.println("State = " + userProxy.getState());
        //
        try {
            System.out.println("Invoke reset() in SimpleStandard MBean...");
            userProxy.reset();
        } catch (SecurityException e) {
            System.out.println("Got expected security exception: " + e);
        } catch (Exception e) {
            System.out.println("Got unexpected exception: " + e);
            e.printStackTrace();
            System.exit(1);
        }
        // Close MBeanServer connection
        //
        System.out.println("Close the user connection to the server");
        userConnector.close();
        //------------------------------------------------------------------
        // SERVER
        //------------------------------------------------------------------
        // Stop the connector server
        //
        System.out.println(">>> Stop the connector server");
        cs.stop();
        System.out.println("Bye! Bye!");
    } catch (Exception e) {
        System.out.println("Got unexpected exception: " + e);
        e.printStackTrace();
        System.exit(1);
    }
}
Also used : JMXServiceURL(javax.management.remote.JMXServiceURL) HashMap(java.util.HashMap) ObjectName(javax.management.ObjectName) JMXConnectorServer(javax.management.remote.JMXConnectorServer) JMXConnector(javax.management.remote.JMXConnector) MBeanServerConnection(javax.management.MBeanServerConnection) MBeanServer(javax.management.MBeanServer)

Aggregations

JMXConnector (javax.management.remote.JMXConnector)118 MBeanServerConnection (javax.management.MBeanServerConnection)85 JMXServiceURL (javax.management.remote.JMXServiceURL)78 ObjectName (javax.management.ObjectName)54 JMXConnectorServer (javax.management.remote.JMXConnectorServer)47 MBeanServer (javax.management.MBeanServer)37 IOException (java.io.IOException)35 HashMap (java.util.HashMap)27 Test (org.junit.Test)22 Notification (javax.management.Notification)14 NotificationListener (javax.management.NotificationListener)14 Attribute (javax.management.Attribute)13 MalformedURLException (java.net.MalformedURLException)12 RemoteException (java.rmi.RemoteException)11 ArrayList (java.util.ArrayList)9 Map (java.util.Map)9 MalformedObjectNameException (javax.management.MalformedObjectNameException)9 LocateRegistry (java.rmi.registry.LocateRegistry)8 Registry (java.rmi.registry.Registry)8 Properties (java.util.Properties)7