public void disconnect() { // Reset remote stub stub = null; // Close MBeanServer connection if (jmxc != null) { try { jmxc.close(); } catch (IOException e) { // Ignore ??? } } // Reset platform MBean references classLoadingMBean = null; compilationMBean = null; memoryMBean = null; operatingSystemMBean = null; runtimeMBean = null; threadMBean = null; sunOperatingSystemMXBean = null; garbageCollectorMBeans = null; // Set connection state to DISCONNECTED if (!isDead) { isDead = true; setConnectionState(ConnectionState.DISCONNECTED); } }
private static boolean test(String proto, MBeanServer mbs) throws Exception { System.out.println("Testing for proto " + proto); JMXConnectorServer cs; JMXServiceURL url = new JMXServiceURL(proto, null, 0); try { cs = JMXConnectorServerFactory.newJMXConnectorServer(url, null, mbs); } catch (MalformedURLException e) { System.out.println("System does not recognize URL: " + url + "; ignoring"); return true; } cs.start(); JMXServiceURL addr = cs.getAddress(); JMXServiceURL rmiurl = new JMXServiceURL("rmi", null, 0); JMXConnector client = JMXConnectorFactory.connect(addr); MBeanServerConnection mbsc = client.getMBeanServerConnection(); ObjectName on = new ObjectName("x:proto=" + proto + ",ok=yes"); mbsc.createMBean( RMIConnectorServer.class.getName(), on, mletName, new Object[] {rmiurl, null}, new String[] {JMXServiceURL.class.getName(), Map.class.getName()}); System.out.println("Successfully deserialized with " + proto); mbsc.unregisterMBean(on); client.close(); cs.stop(); return true; }
private static void test(String proto) throws Exception { System.out.println(">>> Test for protocol " + proto); JMXServiceURL u = null; JMXConnectorServer server = null; HashMap env = new HashMap(2); // server will close a client connection after 1 second env.put("jmx.remote.x.server.connection.timeout", "1000"); // disable the client ping env.put("jmx.remote.x.client.connection.check.period", "0"); try { u = new JMXServiceURL(proto, null, 0); server = JMXConnectorServerFactory.newJMXConnectorServer(u, env, mbs); } catch (MalformedURLException e) { System.out.println(">>> Skipping unsupported URL " + proto); } server.start(); JMXServiceURL addr = server.getAddress(); long st = 2000; MyListener myListener; // a cycle to make sure that we test the blocking problem. do { JMXConnector client = JMXConnectorFactory.connect(addr, env); MBeanServerConnection conn = client.getMBeanServerConnection(); myListener = new MyListener(conn); client.addConnectionNotificationListener(myListener, null, null); // wait the server to close the client connection Thread.sleep(st); // makes the listener to do a remote request via the connection // which should be closed by the server. conn.getDefaultDomain(); // allow the listner to have time to work Thread.sleep(100); // get a closed notif, should no block. client.close(); Thread.sleep(100); st += 2000; } while (!myListener.isDone()); server.stop(); }
public void use() { JMXConnector jmxc = null; try { JMXServiceURL serviceURL = new JMXServiceURL(this.serviceUrl); jmxc = JMXConnectorFactory.connect(serviceURL, null); MBeanServerConnection mbsc = jmxc.getMBeanServerConnection(); ObjectName mbeanName = new ObjectName(MBeanName); StatusMBean mbeanProxy = JMX.newMBeanProxy(mbsc, mbeanName, StatusMBean.class, true); System.out.println(mbeanProxy.getName()); } catch (Exception e) { e.printStackTrace(); } finally { if (jmxc != null) { try { jmxc.close(); } catch (IOException e) { e.printStackTrace(); } } } }
/** * Program Main. * * <p>Lookup all JMX agents in the LDAP Directory and list their MBeans and attributes. * * <p>You may wish to use the following properties on the Java command line: * * <ul> * <li><code>-Dagent.name=<AgentName></code>: specifies an AgentName to lookup (default is * null, meaning any agent). * <li><code>-Dprotocol=<ProtocolType></code>: restrains the client to lookup for a * specific protocol type (default is null, meaning any type). * <li><code>-Djava.naming.factory.initial=<initial-context-factory> * </code>: The initial context factory to use for accessing the LDAP directory (see {@link * Context#INITIAL_CONTEXT_FACTORY Context.INITIAL_CONTEXT_FACTORY}) - default is <code> * "com.sun.jndi.ldap.LdapCtxFactory"</code>. * <li><code>-Djava.naming.provider.url=<provider-url></code>: The LDAP Provider URL (see * {@link Context#PROVIDER_URL Context.PROVIDER_URL}). * <li><code>-Djava.naming.security.principal=<ldap-principal> * </code>: The security principal (login) to use to connect with the LDAP directory (see * {@link Context#SECURITY_PRINCIPAL Context.SECURITY_PRINCIPAL} - default is <code> * "cn=Directory Manager"</code>. * <li><code>-Djava.naming.security.credentials=<ldap-credentials> * </code>: The security credentials (password) to use to connect with the LDAP directory (see * {@link Context#SECURITY_CREDENTIALS Context.SECURITY_CREDENTIALS}). * <li><code>-Ddebug="true|false"</code>: switch the Server debug flag on/off (default is * "false") * </ul> */ public static void main(String[] args) { try { // Get the value of the debug flag. // debug = (Boolean.valueOf(System.getProperty("debug", "false"))).booleanValue(); // Get a pointer to the LDAP Directory. // final DirContext root = getRootContext(); debug("root is: " + root.getNameInNamespace()); final String protocolType = System.getProperty("protocol"); final String agentName = System.getProperty("agent.name"); // Lookup all matching agents in the LDAP Directory. // List l = lookup(root, protocolType, agentName); // Attempt to connect to retrieved agents // System.out.println("Number of agents found : " + l.size()); int j = 1; for (Iterator i = l.iterator(); i.hasNext(); j++) { JMXConnector c1 = (JMXConnector) i.next(); if (c1 != null) { // Connect // System.out.println("----------------------------------------------------"); System.out.println("\tConnecting to agent number " + j); System.out.println("----------------------------------------------------"); debug("JMXConnector is: " + c1); // Prepare the environment Map // final HashMap env = new HashMap(); final String factory = System.getProperty(Context.INITIAL_CONTEXT_FACTORY); final String ldapServerUrl = System.getProperty(Context.PROVIDER_URL); final String ldapUser = System.getProperty(Context.SECURITY_PRINCIPAL); final String ldapPasswd = System.getProperty(Context.SECURITY_CREDENTIALS); // Transfer some system properties to the Map // if (factory != null) // this should not be needed env.put(Context.INITIAL_CONTEXT_FACTORY, factory); if (ldapServerUrl != null) // this should not be needed env.put(Context.PROVIDER_URL, ldapServerUrl); if (ldapUser != null) // this is needed when LDAP is used env.put(Context.SECURITY_PRINCIPAL, ldapUser); if (ldapPasswd != null) // this is needed when LDAP is used env.put(Context.SECURITY_CREDENTIALS, ldapPasswd); try { c1.connect(env); } catch (IOException x) { System.err.println("Connection failed: " + x); x.printStackTrace(System.err); continue; } // Get MBeanServerConnection // MBeanServerConnection conn = c1.getMBeanServerConnection(); debug("Connection is:" + conn); System.out.println("Server domain is: " + conn.getDefaultDomain()); // List all MBeans // try { listMBeans(conn); } catch (IOException x) { System.err.println("Failed to list MBeans: " + x); x.printStackTrace(System.err); } // Close connector // try { c1.close(); } catch (IOException x) { System.err.println("Failed to close connection: " + x); x.printStackTrace(System.err); } } } } catch (Exception x) { System.err.println("Unexpected exception caught in main: " + x); x.printStackTrace(System.err); } }
/** * Program Main * * <p>Lookup all JMX agents in the Jini Lookup Service and list their MBeans and attributes. * * <p>You may wish to use the following properties on the Java command line: * * <ul> * <li><code>-Dagent.name=<AgentName></code>: specifies an AgentName to lookup (default is * null, meaning any agent). * <li><code>-Djini.lookup.url=<jini-url></code>: the Jini Lookup Service URL (default is * "jini://localhost"), see {@link #getRegistrar()}. * <li><code>-Ddebug="true|false"</code>: switch the Client debug flag on/off (default is * "false"). * </ul> */ public static void main(String[] args) { try { // Jini requires a security manager. // if (System.getSecurityManager() == null) System.setSecurityManager(new RMISecurityManager()); // Get the value of the debug flag. // debug = (Boolean.valueOf(System.getProperty("debug", "false"))).booleanValue(); // Get AgentName to lookup. If not defined, all agents // are looked up. // final String agentName = System.getProperty("agent.name"); // Get a pointer to the Jini Lookup Service. // final ServiceRegistrar registrar = getRegistrar(); debug("registrar is: " + registrar); // Lookup all matching agents in the Jini Lookup Service. // List l = lookup(registrar, agentName); // Attempt to connect to retrieved agents // System.out.println("Number of agents found : " + l.size()); int j = 1; for (Iterator i = l.iterator(); i.hasNext(); j++) { JMXConnector c1 = (JMXConnector) i.next(); if (c1 != null) { // Connect // System.out.println("----------------------------------------------------"); System.out.println("\tConnecting to agent number " + j); System.out.println("----------------------------------------------------"); debug("JMXConnector is: " + c1); try { c1.connect(null); } catch (IOException x) { System.err.println("Connection failed: " + x); if (debug) x.printStackTrace(System.err); continue; } // Get MBeanServerConnection // MBeanServerConnection conn = c1.getMBeanServerConnection(); debug("Connection is:" + conn); System.out.println("Server domain is: " + conn.getDefaultDomain()); // List all MBeans // try { listMBeans(conn); } catch (IOException x) { System.err.println("Failed to list MBeans: " + x); if (debug) x.printStackTrace(System.err); } // Close connector // try { c1.close(); } catch (IOException x) { System.err.println("Failed to close connection: " + x); if (debug) x.printStackTrace(System.err); } } } } catch (Exception x) { System.err.println("Unexpected exception caught in main: " + x); x.printStackTrace(System.err); } }
private static boolean test(String proto, MBeanServer mbs, ObjectName on) throws Exception { System.out.println("Testing for protocol " + proto); JMXConnectorServer cs; JMXServiceURL url = new JMXServiceURL(proto, null, 0); try { cs = JMXConnectorServerFactory.newJMXConnectorServer(url, null, mbs); } catch (MalformedURLException e) { System.out.println("System does not recognize URL: " + url + "; ignoring"); return true; } cs.start(); JMXServiceURL addr = cs.getAddress(); JMXConnector client = JMXConnectorFactory.connect(addr); MBeanServerConnection mbsc = client.getMBeanServerConnection(); Object getAttributeExotic = mbsc.getAttribute(on, "Exotic"); AttributeList getAttrs = mbsc.getAttributes(on, new String[] {"Exotic"}); AttributeList setAttrs = new AttributeList(); setAttrs.add(new Attribute("Exotic", new Exotic())); setAttrs = mbsc.setAttributes(on, setAttrs); Object invokeExotic = mbsc.invoke(on, "anExotic", new Object[] {}, new String[] {}); MBeanInfo exoticMBI = mbsc.getMBeanInfo(on); mbsc.setAttribute(on, new Attribute("Exception", Boolean.TRUE)); Exception getAttributeException, setAttributeException, invokeException; try { try { mbsc.getAttribute(on, "Exotic"); throw noException("getAttribute"); } catch (Exception e) { getAttributeException = e; } try { mbsc.setAttribute(on, new Attribute("Exotic", new Exotic())); throw noException("setAttribute"); } catch (Exception e) { setAttributeException = e; } try { mbsc.invoke(on, "anExotic", new Object[] {}, new String[] {}); throw noException("invoke"); } catch (Exception e) { invokeException = e; } } finally { mbsc.setAttribute(on, new Attribute("Exception", Boolean.FALSE)); } client.close(); cs.stop(); boolean ok = true; ok &= checkAttrs("getAttributes", getAttrs); ok &= checkAttrs("setAttributes", setAttrs); ok &= checkType("getAttribute", getAttributeExotic, Exotic.class); ok &= checkType("getAttributes", attrValue(getAttrs), Exotic.class); ok &= checkType("setAttributes", attrValue(setAttrs), Exotic.class); ok &= checkType("invoke", invokeExotic, Exotic.class); ok &= checkType("getMBeanInfo", exoticMBI, ExoticMBeanInfo.class); ok &= checkExceptionType("getAttribute", getAttributeException, ExoticException.class); ok &= checkExceptionType("setAttribute", setAttributeException, ExoticException.class); ok &= checkExceptionType("invoke", invokeException, ExoticException.class); if (ok) System.out.println("Test passes for protocol " + proto); return ok; }