[jboss-jira] [JBoss JIRA] (WFLY-11353) Classes for newer versions are not loaded from Multi-Release-JARs in WARs

David Lloyd (Jira) issues at jboss.org
Mon Jan 7 15:34:00 EST 2019


    [ https://issues.jboss.org/browse/WFLY-11353?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13679154#comment-13679154 ] 

David Lloyd commented on WFLY-11353:
------------------------------------

bq. Another potential workaround probably would be to rely on the JRE's system properties.

Unfortunately not; the trouble is that VFS is loading class resources in a different way than JarFile does (internally exploding the classes into a filesystem location (yes there's a good reason for this)), and thus it's VFS that needs to be fixed.

bq. But it may work, if the modules are loaded via the standard JRE classloader.

It will work, but not because of this.  MR JAR handling is not actually directly related to the class loader at all; rather, it is a characteristic of JarFile.  If I were to explode a WAR onto the file system, and use the same standard JDK URLClassLoader to load it, it would not behave in an MR JAR compliant fashion.

"Normal" non-WAR deployments do use JarFile (if I recall correctly; it would bear testing though); and, JBoss Modules' default resource loaders definitely use JarFile in the correct way to support MR JARs (this is thoroughly tested).

> Classes for newer versions are not loaded from Multi-Release-JARs in WARs
> -------------------------------------------------------------------------
>
>                 Key: WFLY-11353
>                 URL: https://issues.jboss.org/browse/WFLY-11353
>             Project: WildFly
>          Issue Type: Bug
>          Components: Class Loading
>    Affects Versions: 14.0.0.Final, 15.0.0.Final
>         Environment: Java 9+
>            Reporter: Daniel Schwering
>            Priority: Major
>         Attachments: buggywar.src.zip, buggywar.war, multireleaselib-0.0.1-SNAPSHOT.jar, multireleaselib-0.0.1-SNAPSHOT.jar, multireleaselib.src.zip, multireleaselib.src.zip
>
>
>  1
> down vote
> favorite
> Since Java 9 there are Multi-Release JARs ([MRJARS|https://openjdk.java.net/jeps/238]) that allow different classes for different Java versions to be included in one JAR file. I was surprised when a Wildfly 14 running on Java 11 executed Java-8-code in a JAR included in a WAR although the JAR was a MRJAR with code for Java 11. That JAR included as a dependency for a regular Java SE project is running different code depending on the running JRE, but when included in a WAR, the Java-11-code seems to be ignored.
> Is that expected behavior for a webserver, as Java EE 8 does not explicitly require Java 9 (which introduced MRJARs) but only Java 8?



--
This message was sent by Atlassian Jira
(v7.12.1#712002)


More information about the jboss-jira mailing list