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();
}
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);
}
}
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();
}
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();
}
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);
}
}
Aggregations