RFR 8078812, Test RMI with client and servers as modules

Stuart Marks stuart.marks at oracle.com
Wed Mar 2 02:28:16 UTC 2016


Hi Felix, sorry for the delay.

Several comments below.

--------------------------------------------------

  119         // wait for rmiregistry to be fully ready
  120         Thread.sleep(3000);

There are some RMI test utilities that will handle starting up and waiting for 
the registry to be ready. Unfortunately they're in the unnamed package (still 
haven't cleaned that up) so you can't use them from this test.

For now I'd recommend scaling the timeout by the test.timeout.factor, so that 
this won't fail on slow systems. There's a test utility for that; see 
Utils.adjustTimeout().

--------------------------------------------------

The directory "unamed" is misspelled; it has classes in the unnamed module. This 
misspelling is reflected in variable names and values, e.g.,

   59     private static final Path UNAMED_SRC_DIR = Paths.get(TEST_SRC, "unamed");
   60     private static final Path MODS_OUTPUT_DIR = Paths.get("mods");
   61     private static final Path UNAMED_OUTPUT_DIR = Paths.get("unamed");

While spelling errors aren't that big a deal, since this involves file and 
directory names, I'd recommend fixing this now. It'll just be harder to fix it 
later.

Also, "SeperateModuleClient" => "SeparateModuleClient"

--------------------------------------------------

Overall the structure of the test seems reasonable to test various clients and 
servers in combinations of the same, different, and unnamed modules.

I'm not entirely sure what p2.SeperateModuleClient is testing. It extends 
p1.Client and its constructor and testStub() method simply call the 
corresponding methods on super, so it doesn't seem to be testing anything 
different from p1.Client running against p3.Server.

Also, p4.UnamedModuleClient seems to want to run the client from the unnamed 
module, but it too extends p1.Client and simply defers all of its execution to 
its superclass. So I don't think this actually testing an RMI client call 
originating from an unnamed module.

There is an uncomfortable amount of duplication between mtest/test/DummyApp.java 
and p4/UnamedModuleDummyApp. I see what this is trying to do, which is to test a 
RMI server from an unnamed module. It instantiates p3.Server, which resides in a 
named module, but exports it from an unnamed module.

So I think there's some tension here. There's subclassing among the clients that 
attempts to avoid duplication, which is good, but it doesn't truly seem to be 
testing clients in different modules and in an unnamed module. The server, on 
the other hand, does seem to be testing things properly in different modules, at 
the cost of duplicating all the code into another class that resides in a 
different (unnamed) module.

I'm not entirely sure what the best approach is here. Ideally you'd want to have 
a single implementation of client, server + remote interface, and application, 
and compile each of them once. Then since you're invoking a new JVM for each 
test, invoke it with different options to put the client, or the server, or the 
app, into modules, or onto the classpath (to get into an unnamed module). You 
might have to copy compiled class files to different locations so that different 
classes can be either on the classpath or in a named module without causing any 
conflicts.

I'm willing to entertain some simplifications here as well. It might be 
sufficient to deal with just clients and servers in different/unnamed modules, 
and not worry about putting the application into different modules. That should 
reduce the number of cases to cover.

s'marks

On 2/29/16 10:05 PM, Felix Yang wrote:
> Ping...
>
> -Felix
> On 2016/2/24 14:06, Felix Yang wrote:
>> Hi all,
>>       please review the new tests to use RMI in module world.
>>
>> Webrev:
>> http://cr.openjdk.java.net/~xiaofeya/8078812/webrev.00/
>> Bug:
>> https://bugs.openjdk.java.net/browse/JDK-8078812
>>
>> Thanks,
>> Felix
>


More information about the jigsaw-dev mailing list