Ping - Re: RFR 8078812, Test RMI with client and servers as modules
Jonathan Gibbons
jonathan.gibbons at oracle.com
Fri May 20 23:59:28 UTC 2016
Stuart,
While I would agree on the use of one type, not two, for file paths, I
would question the choice to use String instead of Path. If something
is a file path, use the type system to say so, and use a Path.
-- Jon
On 05/20/2016 04:52 PM, Stuart Marks wrote:
> On 5/16/16 1:18 AM, Felix Yang wrote:
>> please review the updated webrev, which remove not-suggested
>> filesystem
>> modification and codebase stuff:
>>
>> http://cr.openjdk.java.net/~xiaofeya/8078812/webrev.02/
>
> Hi Felix,
>
> OK, this is looking much better and simpler. The big improvement is,
> as we had discussed, the creation of a common fixture for the tests.
> The tests then use the same fixture in different ways to exercise the
> different cases. This makes this more easily extensible to additional
> cases.
>
> First to be done are a few easy cleanups:
>
> * Since we're no longer using a registry, the starting and stopping of
> the registry process in the start- and shutdownRMIRegistry() methods
> is no longer necessary. They can be removed entirely, along with the
> rmiRegistry field.
>
> * The imports they required, along with some other unused import
> statements, can also be removed.
>
> * The fixture setup method, compileAll(), should be annotated
> @BeforeTest instead of @BeforeMethod. Compiling once at the beginning
> of the test should be sufficient.
>
> With these out of the way, my observation is that it's still really
> quite difficult to follow what the test is doing, particularly in
> setting up the text fixture.
>
> One reason for this is the repeated conversions between Path and
> String. Some places need Paths and some need Strings. Path elements
> are concatenated in some places with path.resolve(String) and string
> concatenation with File.separator or File.pathSeparator in others. In
> some cases, fields such as
>
> MODS_DIR = Paths.get("mods")
>
> are defined when in my opinion it'd just be better to use the string
> literal "mods" in a couple places.
>
> In any case I've taken the liberty of posting some cleanups to a
> branch in the sandbox. I've written a couple utilities to concatenate
> strings using File.separator and File.pathSeparator, and I've kept
> things mostly as strings, only converting to Paths when absolutely
> necessary. I've also renamed the directory of compiled classes as the
> "exploded" directory since that's sort-of the descriptive term in use
> for a hierarchy of individual class files.
>
> The sandbox branch is JDK-8078812-branch and the diff from your webrev
> can be viewed here:
>
> http://hg.openjdk.java.net/jdk9/sandbox/jdk/rev/befcc172e68e
>
> and the ModuleTest.java file (the only one I modified) can be viewed
> here:
>
>
> http://hg.openjdk.java.net/jdk9/sandbox/jdk/file/befcc172e68e/test/java/rmi/module/ModuleTest.java
>
>
> It's up to you whether you want to accept my changes and continue from
> this point, or go in a different direction, but to my eye this is
> cleaner and easier to follow.
>
> * * *
>
> Now, finally, on to more substantive review issues. :-)
>
> One thing that seemed to be missing was that the application itself
> wasn't wrapped up into a jar file. I've added another Jar command that
> does this.
>
> Now we have the client, server, and app as separate hierarchies under
> the "exploded" directory, and as modules under the "mods" directory.
>
> I think the idea of having the "exploded" class hierarchy as well as
> jar files useful as modules is a good one. This will let you add
> cases, where different components are on the classpath or are loaded
> as modules, in addition to the two already present here.
>
> One issue here is that there's a module-info class for the app. This
> makes the app an actual named module (I think) as opposed to an
> automatic module like the client and server jar files. It seems like
> it would be preferable to be consistent and have them all be automatic
> modules.
>
> Given this arrangement, it should be pretty easy to have tests for any
> of the combinations we want of classpath vs modules. I guess there are
> 8 combinations: three components, each of which can be on the
> classpath or as a module. It's not clear to me that we need all 8
> combinations. It's probably sufficient to have a reasonable subset.
>
> An idea for possible future expansion is to mix automatic modules with
> named modules. I'm not entirely sure how to do that. Perhaps one way
> is to have module-info files for all the components, and then create
> variant jar files with the module-info.class omitted. That way we'd
> have a modular jar, and then a "plain" jar (without module-info.class)
> that'd be suitable for use as an automatic module or to be put on the
> classpath. That'd be 3^3=27 combinations, which I certainly think is
> overkill.
>
> In any case, for this initial changeset, I think it's sufficient to
> test a few combinations of automatic modules vs. classpath. We can
> extend the cases to include named modules later. Please make a
> recommendation for some set of combinations and implement it, and then
> send it out for a final round of review.
>
> Thanks.
>
> s'marks
More information about the jigsaw-dev
mailing list