-
Bug
-
Resolution: Done
-
Major
-
None
-
None
-
None
I'm using the "jboss-client.jar" provided in the "bin/client" directory of the 7.1.1.Final distribution.
I'm using the code shown below to connect to various JBoss 7.1.1 instances.
This works when the machines are reachable.
However, when they are not, the underlying "xnio" libraries do not clean up properly.
Observed results: client JVM running my JMX code does not exit, since the background threads from xnio are non-deamon.
I've attached stackdumps from both Windows and Linux x64 demonstrating the problem.
Here's a link to a report from Red Hat engineer Rob Stryker on the "jboss-as7-dev" mailing list, essentially confirming the problems I report with such a trivial, minimal JMX client.
http://lists.jboss.org/pipermail/jboss-as7-dev/2012-March/005679.html
----------------------------------------------
import java.io.IOException; import java.net.MalformedURLException; import java.util.HashMap; import javax.management.MBeanServerConnection; import javax.management.remote.JMXConnector; import javax.management.remote.JMXConnectorFactory; import javax.management.remote.JMXServiceURL; public class Demo { public static void main(String[] args) throws IOException { JMXConnector jmxConnector = null; String host = "some.unreachable.host"; String port = "9999"; String urlString = "service:jmx:remoting-jmx://" + host + ":" + port; try { JMXServiceURL serviceURL = new JMXServiceURL(urlString); HashMap<String, String[]> env = new HashMap<String, String[]>(); String[] creds = new String[2]; creds[0] = "username"; creds[1] = "password"; env.put(JMXConnector.CREDENTIALS, creds); jmxConnector = JMXConnectorFactory.connect(serviceURL, env); MBeanServerConnection connection = jmxConnector.getMBeanServerConnection(); System.out.println("Successfully Got Connection " + connection.getMBeanCount()); jmxConnector.close(); } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { if (jmxConnector != null) { jmxConnector.close(); } } System.exit(0); } }