> On 11 Mar 2016, at 21:56, Alex Buckley <alex.buck...@oracle.com> wrote:
> 
> On 3/11/2016 2:04 AM, Neil Bartlett wrote:
>>> On 11 Mar 2016, at 08:50, Alan Bateman <alan.bate...@oracle.com>
>>> wrote:
>>> The transaction API is one of a small number of APIs shared between
>>> Java SE and EE. The complete set is non-aggregator modules that
>>> java.se.ee requires. In the case of the transaction API then Java
>>> SE defines the minimum subset of javax.transaction required to
>>> support the mapping of CORBA system exceptions to RMI exceptions.
>>> The Java Language to IDL Mapping spec has the details. Java SE
>>> defines all the types in javax.transacation.xa, important because
>>> JDBC supports XA.
>> 
>> 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.
>> 
>> A properly constructed set of OSGi bundles *should* never throw
>> NoClassDefFoundError or ClassNotFoundException, and I would hope this
>> will also be the case in Jigsaw.
> 
> For a set of consistently compiled modules with no unchecked warnings, the 
> JPMS guarantees the JVM will never throw NoClassDefFoundError, nor 
> ClassCastException due to heap pollution ("no unchecked warnings") or split 
> packages (as 'requires' != Require-Bundle).
> 
> Per Alan's comment, guaranteeing no ClassNotFoundException is impossible 
> because consistently compiled code can use Class::forName with random strings.

Yes I agree this case cannot be prevented — it remains a problem in OSGi also, 
so I should have been more specific.

It’s my experience that a CNFE can arise when Class.forName is used to load a 
known class that references (directly or indirectly) an unknown/nonexistent 
class. This is the kind of error that can be prevented at build time, similarly 
to NCDFE.

> 
> Alex

Reply via email to