Unnamed module and duplicate package
David M. Lloyd
david.lloyd at redhat.com
Fri Mar 11 14:52:05 UTC 2016
On 03/11/2016 04:42 AM, Alan Bateman wrote:
>
> On 11/03/2016 10:04, Neil Bartlett wrote:
>> :
>>
>> Whatever the motivation, I referred to this package as “broken”
>> because it has caused a great many problems for OSGi users.
>> Applications that import the javax.transaction package may encounter
>> NoClassDefFoundError due to the missing types if they wire to the
>> platform export. The most commonly employed practical solution is to
>> add back those types with the application ClassLoader.
> Deploying the classes on the class path (application class loader) meant
> some types in javax.transaction defined to the boot loader (because of
> delegation) and some to the application class loader. A sad state of
> affairs that would not have worked if there had been any reliance on
> anything package private.
>
> Going forward then it requires deploying the EE version of the
> java.transaction module on the upgrade module path.
What about javax.transaction.xa? Ideally we won't just throw that into
some unnamed module right?
With it being a part of java.sql though, it's going to be pretty tough
to separate out. Can it not at least be its own module which can be
upgraded in a consistent way with java.transaction? I guess it's just
not clear to me how this is going to work. From my perspective, it
would be at the least more organizationally convenient to treat all the
SE+EE modules in the same way.
> Yes, except the types in the javax.sql.rowset package as that is a
> different module.
>
> The definition for both the java.sql and java.sql.rowset modules can be
> found here:
> http://cr.openjdk.java.net/~mr/jigsaw/ea/module-summary.html#java.sql
>
> or if you have the EA builds then `java
> -listmods:java.sql,java.sql.rowset` will describe these modules.
>
> In terms of visibility then both modules are currently defined to the
> boot loader and hence their types are visible via any of the built-in
> class loaders. We are on a mission to move non-core modules out of the
> boot loader so that they don't have all permissions by default. Easier
> said that done of course but we have already moved all the modules
> shared with EE so that they can be upgraded by app servers.
That would definitely be ideal from a security standpoint, especially if
in this context "non-core" means "all except for 'java.base'"... or as
close as possible to it.
> I hope we can move java.sql.rowset module, I don't know about java.sql
> yet. There is a small spec change needed to do the latter because
> currently only the boot loader can defined java.* types (one of the
> comments in your mail suggests you are aware of this detail).
--
- DML
More information about the jigsaw-dev
mailing list