[BUILD-309] Java 9–10 runtime compatibility Created: 13/Jul/17  Updated: 23/May/19  Resolved: 10/Apr/18

Status: Closed
Project: Build
Component/s: None
Affects Version/s: None
Fix Version/s: BOM 5.7

Type: Task Priority: Neutral
Reporter: Antti Hietala Assignee: Ngoc Nguyenthanh
Resolution: Fixed Votes: 0
Labels: None
Remaining Estimate: 0d
Time Spent: 4d
Original Estimate: Not Specified

Issue Links:
Relates
relates to MAGNOLIA-7295 Update third-party libraries for Magn... Closed
supersession
is superseded by BUILD-303 Build on JDK11+ Selected
Template:
Acceptance criteria:
Empty
Task DoR:
Empty
Release notes required:
Yes
Date of First Response:
Epic Link: Java 10
Sprint: Saigon 136, Saigon 137, Saigon 138, Saigon 139, Saigon 140, Saigon 141, Saigon 142
Story Points: 8

 Description   
  • Test Java 9 and Java 10 runtime compatibility with Magnolia.
  • Try whatever latest Java version is currently available.
  • Java 9 GA: end of September 2017.
  • Java 10 GA: March 2018


 Comments   
Comment by Mikaël Geljić [ 14/Mar/18 ]

Java 10 is due next week, apparently commons-lang3 will need a boost as well

java.lang.NullPointerException: null
	at org.apache.commons.lang3.SystemUtils.isJavaVersionAtLeast(SystemUtils.java:1642) ~[commons-lang3-3.6.jar:3.6]

Upgrading to 3.7 brings Java 10 compliance, and solves this. See https://commons.apache.org/proper/commons-lang/changes-report.html

Comment by Mikaël Geljić [ 15/Mar/18 ]

Hmm, checking Tomcat versions, all versions seem to claim support for Java 8 or higher (only HTTP/2 support requires Java 9); anyway we will most likely do a Tomcat upgrade along with this.

See also:

Comment by Dai Ha [ 16/Mar/18 ]

Issue found on tomcat running webapp with JDK 10:

Can't load log handler "1catalina.org.apache.juli.AsyncFileHandler"Can't load log handler "1catalina.org.apache.juli.AsyncFileHandler"java.lang.ClassNotFoundException: 1catalina.org.apache.juli.AsyncFileHandlerjava.lang.ClassNotFoundException: 1catalina.org.apache.juli.AsyncFileHandler at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:582) at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:190) at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:499) at java.logging/java.util.logging.LogManager.createLoggerHandlers(LogManager.java:1005) at java.logging/java.util.logging.LogManager.access$1000(LogManager.java:155) at java.logging/java.util.logging.LogManager$2.run(LogManager.java:401) at java.base/java.security.AccessController.doPrivileged(Native Method) at java.logging/java.util.logging.LogManager.ensureLogManagerInitialized(LogManager.java:382) at java.logging/java.util.logging.LogManager.getLogManager(LogManager.java:436) at java.logging/java.util.logging.Logger.demandLogger(Logger.java:648) at java.logging/java.util.logging.Logger.getLogger(Logger.java:717) at java.logging/java.util.logging.Logger.getLogger(Logger.java:701) at org.apache.juli.logging.DirectJDKLog.<init>(DirectJDKLog.java:67) at org.apache.juli.logging.DirectJDKLog.getInstance(DirectJDKLog.java:187) at org.apache.juli.logging.LogFactory.getInstance(LogFactory.java:117) at org.apache.juli.logging.LogFactory.getInstance(LogFactory.java:141) at org.apache.juli.logging.LogFactory.getLog(LogFactory.java:196) at org.apache.catalina.startup.Bootstrap.<clinit>(Bootstrap.java:52)

Fixed on tomcat 8.5.28: https://tomcat.apache.org/tomcat-8.5-doc/changelog.html#Tomcat_8.5.29_(markt)

Prevent a stack trace being written to standard out when running on Java 10 due to changes in the LogManager implementation. 

Comment by Dai Ha [ 16/Mar/18 ]

Magnolia release: 5.6.4-SNAPSHOT

With those libraries replacement:

 

Old Libs New Libs
common-lang-3.1.0.jar commons-lang3-3.7.jar
guice-4.0.jar guice-4.2.0.jar
guice-multibindings-4.0.jar guice-multibindings-4.2.0.jar
jackrabbit-api-2.12.4.jar jackrabbit-api-2.16.1.jar
jackrabbit-core-2.12.4.jar  jackrabbit-core-2.16.1.jar
jackrabbit-data-2.12.4.jar jackrabbit-data-2.16.1.jar
jackrabbit-jcr-commons-2.12.4.jar jackrabbit-jcr-commons-2.16.1.jar
jackrabbit-spi-2.12.4.jar jackrabbit-spi-2.16.1.jar
jackrabbit-spi-commons-2.12.4.jar jackrabbit-spi-commons-2.16.1.jar
mycila-guice-jsr-250-3.6.ga mycila-guice-jsr-4.0.rc1
mycila-guice-injection-3.6.ga mycila-guice-injection-4.0.rc1
mycila-guice-closeable-3.6.ga mycila-guice-closeable-4.0.rc1

 

 

All of current ee ui tests have passed* for below setups on MacOS:
+ JDK 9 + Tomcat 8.5.5 + Magnolia 5.6.4

+ JDK 10 + Tomcat 8.5.29** + Magnolia 5.6.4

( * ) noted an issue with refresh indexes during 1st startup time, should be good after one restart

2018-03-15 14:44:01,601 WARN  rg.apache.jackrabbit.core.query.lucene.SearchIndex: Exception initializing indexing configuration from: /info/magnolia/jackrabbit/indexing_configuration_website.xml2018-03-15 14:44:01,601 WARN  rg.apache.jackrabbit.core.query.lucene.SearchIndex: Exception initializing indexing configuration from: /info/magnolia/jackrabbit/indexing_configuration_website.xmljavax.jcr.nodetype.NoSuchNodeTypeException: {http://www.magnolia.info/jcr/mgnl}page at org.apache.jackrabbit.core.nodetype.NodeTypeRegistry.getNodeTypeDef(NodeTypeRegistry.java:552) ~[jackrabbit-core-2.16.1.jar:2.16.1] at org.apache.jackrabbit.core.query.lucene.IndexingConfigurationImpl$IndexingRule.getNodeTypeDefinition(IndexingConfigurationImpl.java:853) ~[jackrabbit-core-2.16.1.jar:2.16.1] at org.apache.jackrabbit.core.query.lucene.IndexingConfigurationImpl$IndexingRule.<init>(IndexingConfigurationImpl.java:710) ~[jackrabbit-core-2.16.1.jar:2.16.1] at org.apache.jackrabbit.core.query.lucene.IndexingConfigurationImpl.refreshIndexRules(IndexingConfigurationImpl.java:348) ~[jackrabbit-core-2.16.1.jar:2.16.1] at org.apache.jackrabbit.core.query.lucene.IndexingConfigurationImpl.init(IndexingConfigurationImpl.java:152) ~[jackrabbit-core-2.16.1.jar:2.16.1] at org.apache.jackrabbit.core.query.lucene.SearchIndex.createIndexingConfiguration(SearchIndex.java:1288) [jackrabbit-core-2.16.1.jar:2.16.1] at org.apache.jackrabbit.core.query.lucene.SearchIndex.doInit(SearchIndex.java:567) [jackrabbit-core-2.16.1.jar:2.16.1] at org.apache.jackrabbit.core.query.AbstractQueryHandler.init(AbstractQueryHandler.java:78) [jackrabbit-core-2.16.1.jar:2.16.1] at org.apache.jackrabbit.core.config.RepositoryConfigurationParser$1.getQueryHandler(RepositoryConfigurationParser.java:683) [jackrabbit-core-2.16.1.jar:2.16.1] at org.apache.jackrabbit.core.config.WorkspaceConfig.getQueryHandler(WorkspaceConfig.java:251) [jackrabbit-core-2.16.1.jar:2.16.1] at org.apache.jackrabbit.core.SearchManager.<init>(SearchManager.java:171) [jackrabbit-core-2.16.1.jar:2.16.1] at org.apache.jackrabbit.core.RepositoryImpl$WorkspaceInfo.getSearchManager(RepositoryImpl.java:1902) [jackrabbit-core-2.16.1.jar:2.16.1] at org.apache.jackrabbit.core.RepositoryImpl$WorkspaceInfo.doPostInitialize(RepositoryImpl.java:2135) [jackrabbit-core-2.16.1.jar:2.16.1] at org.apache.jackrabbit.core.RepositoryImpl$WorkspaceInfo.initialize(RepositoryImpl.java:2038) [jackrabbit-core-2.16.1.jar:2.16.1] at org.apache.jackrabbit.core.RepositoryImpl.getWorkspaceInfo(RepositoryImpl.java:711) [jackrabbit-core-2.16.1.jar:2.16.1] at org.apache.jackrabbit.core.RepositoryImpl.login(RepositoryImpl.java:1483) [jackrabbit-core-2.16.1.jar:2.16.1] at org.apache.jackrabbit.core.jndi.BindableRepository.login(BindableRepository.java:162) [jackrabbit-core-2.16.1.jar:2.16.1] at info.magnolia.jackrabbit.ProviderImpl.getSystemSession(ProviderImpl.java:515) [magnolia-core-5.6.3-SNAPSHOT.jar:?] at info.magnolia.repository.DefaultRepositoryManager.registerNameSpacesAndNodeTypes(DefaultRepositoryManager.java:294) [magnolia-core-5.6.3-SNAPSHOT.jar:?] at info.magnolia.repository.DefaultRepositoryManager.loadRepository(DefaultRepositoryManager.java:266) [magnolia-core-5.6.3-SNAPSHOT.jar:?] at info.magnolia.repository.DefaultRepositoryManager.loadRepositories(DefaultRepositoryManager.java:222) [magnolia-core-5.6.3-SNAPSHOT.jar:?] at info.magnolia.repository.DefaultRepositoryManager.init(DefaultRepositoryManager.java:121) [magnolia-core-5.6.3-SNAPSHOT.jar:?] at info.magnolia.cms.beans.config.ConfigLoader.load(ConfigLoader.java:136) [magnolia-core-5.6.3-SNAPSHOT.jar:?] at info.magnolia.init.MagnoliaServletContextListener$1.doExec(MagnoliaServletContextListener.java:259) [magnolia-core-5.6.3-SNAPSHOT.jar:?] at info.magnolia.context.MgnlContext$VoidOp.exec(MgnlContext.java:407) [magnolia-core-5.6.3-SNAPSHOT.jar:?] at info.magnolia.context.MgnlContext$VoidOp.exec(MgnlContext.java:404) [magnolia-core-5.6.3-SNAPSHOT.jar:?] at info.magnolia.context.MgnlContext.doInSystemContext(MgnlContext.java:378) [magnolia-core-5.6.3-SNAPSHOT.jar:?] at info.magnolia.init.MagnoliaServletContextListener.startServer(MagnoliaServletContextListener.java:256) [magnolia-core-5.6.3-SNAPSHOT.jar:?] at info.magnolia.init.MagnoliaServletContextListener.contextInitialized(MagnoliaServletContextListener.java:182) [magnolia-core-5.6.3-SNAPSHOT.jar:?] at info.magnolia.init.MagnoliaServletContextListener.contextInitialized(MagnoliaServletContextListener.java:128) [magnolia-core-5.6.3-SNAPSHOT.jar:?] at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4727) [catalina.jar:8.5.5] at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5189) [catalina.jar:8.5.5] at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) [catalina.jar:8.5.5] at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:724) [catalina.jar:8.5.5] at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:700) [catalina.jar:8.5.5] at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:734) [catalina.jar:8.5.5] at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:1107) [catalina.jar:8.5.5] at org.apache.catalina.startup.HostConfig$DeployDirectory.run(HostConfig.java:1841) [catalina.jar:8.5.5] at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:514) [?:?] at java.util.concurrent.FutureTask.run(FutureTask.java:264) [?:?] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1135) [?:?] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) [?:?] at java.lang.Thread.run(Thread.java:844) [?:?]

( ** ) upgrade to fix issue with class not found during tomcat native logging initialized (prefer previous comment), refer:

https://bugs.openjdk.java.net/browse/JDK-8195096

https://tomcat.apache.org/tomcat-8.5-doc/changelog.html#Tomcat_8.5.29_(markt)

Java HotSpot(TM) 64-Bit Server VM warning: Ignoring option MaxPermSize; support was removed in 8.0Java HotSpot(TM) 64-Bit Server VM warning: Ignoring option MaxPermSize; support was removed in 8.0Can't load log handler "1catalina.org.apache.juli.AsyncFileHandler"java.lang.ClassNotFoundException: 1catalina.org.apache.juli.AsyncFileHandlerjava.lang.ClassNotFoundException: 1catalina.org.apache.juli.AsyncFileHandler at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:582) at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:190) at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:499) at java.logging/java.util.logging.LogManager.createLoggerHandlers(LogManager.java:1005) at java.logging/java.util.logging.LogManager.access$1000(LogManager.java:155) at java.logging/java.util.logging.LogManager$2.run(LogManager.java:401) at java.base/java.security.AccessController.doPrivileged(Native Method) at java.logging/java.util.logging.LogManager.ensureLogManagerInitialized(LogManager.java:382) at java.logging/java.util.logging.LogManager.getLogManager(LogManager.java:436) at java.logging/java.util.logging.Logger.demandLogger(Logger.java:648) at java.logging/java.util.logging.Logger.getLogger(Logger.java:717) at java.logging/java.util.logging.Logger.getLogger(Logger.java:701) at org.apache.juli.logging.DirectJDKLog.<init>(DirectJDKLog.java:67) at org.apache.juli.logging.DirectJDKLog.getInstance(DirectJDKLog.java:187) at org.apache.juli.logging.LogFactory.getInstance(LogFactory.java:117) at org.apache.juli.logging.LogFactory.getInstance(LogFactory.java:141) at org.apache.juli.logging.LogFactory.getLog(LogFactory.java:196) at org.apache.catalina.startup.Bootstrap.<clinit>(Bootstrap.java:52)
Comment by Mikaël Geljić [ 05/Apr/18 ]

sang.ngo As it goes along with the Guice upgrade, let's update mycila as well in this ticket/BOM PR (dai.ha can you then update the table above?)

It is fine to proceed and use 4.0-rc1, provided that:

  • we mark this ticket with release notes required
  • we re-evaluate when we produce 5.7 release notes whether a final version was released in the meantime
  • if not, we explicitly mention in release notes that we reserve ourselves the right to upgrade it to the final version whenever it is released—including in a minor Magnolia version.
Comment by Dai Ha [ 06/Apr/18 ]

mgeljic, sure I'll update the table with changes in mycila libs.

Comment by Dai Ha [ 09/Apr/18 ]

Added mycila libs updates to list.

Comment by Oanh Thai Hoang [ 12/Apr/18 ]

QA done. Has been tested with pro bundle version 5.7-SNAPSHOT and java version 

java version "9.0.4"
Java(TM) SE Runtime Environment (build 9.0.4+11)
Java HotSpot(TM) 64-Bit Server VM (build 9.0.4+11, mixed mode) 
java version "10" 2018-03-20
Java(TM) SE Runtime Environment 18.3 (build 10+46)
Java HotSpot(TM) 64-Bit Server VM 18.3 (build 10+46, mixed mode) 

Generated at Sun Feb 11 23:40:44 CET 2024 using Jira 9.4.2#940002-sha1:46d1a51de284217efdcb32434eab47a99af2938b.