[prev in list] [next in list] [prev in thread] [next in thread] 

List:       openjdk-jigsaw-dev
Subject:    Extents of extensibility ("is this thing on?")
From:       paul.sandoz () oracle ! com (Paul Sandoz)
Date:       2012-07-31 4:14:30
Message-ID: 990BB533-9EBB-456F-A2AF-B5EFAEC04D44 () oracle ! com
[Download RAW message or body]

Hi,

Sorry for the late reply.

On Jul 20, 2012, at 9:39 AM, David M. Lloyd <david.lloyd at redhat.com> wrote:

> Thanks for replying, responses inline.
> 
> On 07/20/2012 09:29 AM, Paul Sandoz wrote:
> > Hi David,
> > 
> > Thanks for sending a link to the JavaDoc.
> > 
> > If i could make some loose analogies:
> > 
> > - org.jboss.modules.ModuleLoader is similar to
> > org.openjdk.jigsaw.Configuration<T extends BaseContext>  + Catalog
> > 
> > - Module is similar to T extends BaseContext; and
> > 
> > - ModuleClassLoader is similar to Loader.
> 
> Thanks, it's helpful to see where you see these equivalencies.
> 
> > There are two instantiations of Configuration, Configuration<Context>
> > and Configuration<PathContext>. The former is an install-time
> > configuration (and serialized in a library and used for execution of
> > a main class) and the latter is a compile-time configuration. A
> > configuration is the result of resolving and linking, and linking
> > differs depending on whether one is installing or compiling.
> > 
> > Catalog abstracts the layout of modules.
> > 
> > Can these Jigsaw abstractions be improved? almost certainly since
> > this is currently prototype code.
> 
> I do disagree with the way the abstractions are structured and expressed.  Many \
> (most?) of these abstractions belong in the module API, not in the Jigsaw \
> implementation classes.  The module API has to be constrained enough to define a \
> specific behavior; as it stands it is very general.  But I don't want to tangent \
> off into specific implementation details: I have many ideas and opinions about how \
> things *should* be structured but that's a different discussion. 

I would not read too much into what classes are in what packages at the moment, it is \
highly likely this will all change.


> > There are at least two areas that may impact the
> > implementations/abstractions:
> > 
> > - compiling and running with a path of jmod, modular jars, and/or
> > exploded compiled modules in addition to modules installed into
> > libraries; and
> > 
> > - container support, which would enable that one-way delegation you
> > refer to.
> 
> This matches my understanding, though it's not just a path when it comes to \
> compilation: allowing a pluggable loader repository even in this case is important \
> to (for example) OS distributions who don't necessarily *want* to coordinate a \
> binary database of installed Java modules with their installation tools, or special \
> build or CI tools which want to set up mock environments for integration testing. 
> > FWIW the tests for the resolver create a mock Library (an
> > implementation of Catalog) and build ModuleInfo instances using a
> > ModuleInfoBuilder i.e. not from a module-info.java/class, shocking!
> > > -)
> 
> I am curious: how does this behave in terms of java.lang.reflect.Module?  

Annotations are not currently supported in module-info.java and the corresponding \
ModuleInfo. It's still an open question if that should be the case or not. 

For those tests i referred to the runtime does not kick in, thus a Module is not \
instantiated (which is when a module is defined by the ModuleClassLoader). 

The module CL, Loader, has a Context. It's not the other way around since that \
association is only relevant at runtime, not at install time or compile time.


> Opting to make this a language construct means you need to "feed in" annotations \
> among other things and I don't see where that could happen.  This is one place \
> where the fit is wrong IMO: you don't gain anything by having a module be a new \
> reflective construct that you don't already have by drawing a 1:1 correspondence \
> between a Module and a ClassLoader, which you *would* be able to do if not for the \
> erroneous requirement that the individual core JDK pieces be separate modules with \
> the same class loader.

I would not go so far as to say erroneous, there are pros/cons. However, i think the \
cons outweigh the pros, it would simplify the Module system and it's usage if \
"requires local" did not exist, and IIRC it is likely that the JDK modules will not \
require it with a careful sprinkling of optional dependencies, services and some VM \
tweaks.

Note that not all modules in the JDK are in the same context and therefore have the \
same CL, only those for which there remains the issue that they cannot currently be \
separated. You can see the association between a module and a context by dumping a \
configuration, for example:

$ ./build/macosx-x86_64/bin/jmod dump-config jdk.tools | grep context
  context +jdk.tools.jaxws
  context +jdk.management+jdk.management.iiop
  context +jdk.corba
  context +jdk.jaxws
  context +jdk.rmi
  context +jdk.scripting
  context +jdk.jta
  context +jdk.compiler
  context +jdk.jx.annotations
  context +jdk.zipfs
  context +jdk.httpserver
  context +jdk.tools.jre
  context +jdk.logging
  context +jdk.tools.base
  context +jdk.auth+jdk.base+jdk.desktop+jdk.jndi+jdk.prefs+jdk.tls+sun.charsets+sun.localedata+sun.resources
  context +jdk.devtools
  context +jdk.tools
  context +jdk.jaxp

The code which groups modules to a context is in ContextBuilder. It's an easy feature \
to remove from the resolving and linking process.

Paul.

> That requirement is better written something like: "The core JDK must be \
> distributable in separate components that correspond to X, Y, Z (justification: \
> distro size, ME growth, etc.).  The core JDK classes must all present the same \
> class loader (or, a null class loader depending on how that analysis pans out) \
> (justification: compatibility with system class loader based schemes, etc.)". 
> -- 
> - DML


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic