Has LocateRegistry.createRegistry(int port) changed in java 1.7?-Collection of common programming errors

  • The bigger question is, while this runs fine on java 1.6 (each subsequent server on a host uses the next available port, since LocateRegistry.createRegistry(i) throws an exception if the port is unavailable), not so on 1.7. As a result, we get the following exception when the second server attempts to JMXConnectorServer.start(). Does anyone know if the behavior changed for createRegistry? If so, is there something else we should do?

    2013-02-07 15:34:28,451 INFO  [main] Using JMX port: 9500
    2013-02-07 15:34:28,929 ERROR [main] Unable to register MBean with JMX
    java.io.IOException: Cannot bind to URL [rmi://:9500/jmxrmi]: javax.naming.NameAlreadyBoundException: jmxrmi [Root exception is java.rmi.AlreadyBoundException: jmxrmi]
            at javax.management.remote.rmi.RMIConnectorServer.newIOException(RMIConnectorServe.java:826)
    at javax.management.remote.rmi.RMIConnectorServer.start(RMIConnectorServer.java:431)
    at com.theatre.services.framework.AbstractService.run(AbstractService.java:306)
    at com.theatre.services.reporttree.TreeServerImpl.run(TreeServerImpl.java:690)
    at com.theatre.services.framework.Launcher.main(Launcher.java:99)
    Caused by: javax.naming.NameAlreadyBoundException: jmxrmi [Root exception is java.rmi.AlreadyBoundException: jmxrmi]
    at com.sun.jndi.rmi.registry.RegistryContext.bind(RegistryContext.java:139)
    at com.sun.jndi.toolkit.url.GenericURLContext.bind(GenericURLContext.java:226)
    at javax.naming.InitialContext.bind(InitialContext.java:419)
    at javax.management.remote.rmi.RMIConnectorServer.bind(RMIConnectorServer.java:643)
    at javax.management.remote.rmi.RMIConnectorServer.start(RMIConnectorServer.java:426)
    ... 3 more
    Caused by: java.rmi.AlreadyBoundException: jmxrmi
    at sun.rmi.registry.RegistryImpl.bind(RegistryImpl.java:131)
    at sun.rmi.registry.RegistryImpl_Skel.dispatch(Unknown Source)
    at sun.rmi.server.UnicastServerRef.oldDispatch(UnicastServerRef.java:390)
    at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:248)
    at sun.rmi.transport.Transport$1.run(Transport.java:159)
    at java.security.AccessController.doPrivileged(Native Method)
    at sun.rmi.transport.Transport.serviceCall(Transport.java:155)
    at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:535)
    at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:790)
    at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:649)
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
    at java.lang.Thread.run(Thread.java:662)
    at sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(StreamRemoteCall.java:273)
    at sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:251)
    at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:377)
    at sun.rmi.registry.RegistryImpl_Stub.bind(Unknown Source)
    at com.sun.jndi.rmi.registry.RegistryContext.bind(RegistryContext.java:137)
    ... 7 more