Code Review Request 7142596: RMI JPRT tests are failing (original) (raw)

Darryl Mocek darryl.mocek at oracle.com
Mon Jul 16 22:56:00 UTC 2012


Hi Alan. The reason we didn't go this route is that we want to be able to create the RMI Registry on a random port which is not one of the reserved ports (see TestLibrary.FIXED_PORT_MIN/MAX). To do this, we use 'new ServerSocket(0)', which creates a socket on a random port, then close the port, check if it's a 'reserved' port, and return the port number if it's not. Since we have to go through this process anyway, the current implementation (see webrev05: http://cr.openjdk.java.net/~dmocek/7142596/webrev.05) already works and has broader applicability (e.g. this also supports getting a random port for tests which require a socket rather then hard-coding port numbers into tests, although this change isn't in this webrev).

Darryl

On 07/14/2012 03:31 AM, Alan Bateman wrote:

On 14/07/2012 00:09, Stuart Marks wrote:

There is at least one test case that wants to create two registries within the same JVM. The first call to createRegistry(0) will usually succeed. The second call from the same JVM will throw an ExportException. So, we catch this and retry using a random port instead to create the second registry. If that fails we give up at that point instead of retrying repeatedly. Okay, so it's the export of the object that is the issue because the objID is based on the argument rather than the actual port. In that case would it make sense to switch to the factory method that takes the RMIServerSocketFactory as argument, something like: static class ServerSocketFactory implements RMIServerSocketFactory { public ServerSocket createServerSocket(int port) throws IOException { return new ServerSocket(0); } } static class ClientSocketFactory implements RMIClientSocketFactory { public Socket createSocket(String host, int port) throws IOException { return new Socket(host, port); } } Registry registry = LocateRegistry.createRegistry(0, new ClientSocketFactory(), new ServerSocketFactory()); -Alan.



More information about the core-libs-dev mailing list