KEMBAR78
DevNexus 2019: Migrating to Java 11 | PDF
Migrating to Java 11
1DEVNEXUS 2019
Dalia Abo Sheasha
WebSphere Migration Tools Development Lead
Email: dalia@us.ibm.com
Twitter: @DaliaShea
Agenda
2DEVNEXUS 2019
• Background
• Java 9/10/11: New Features
• Java 8 -> Java 11: Migration Concerns
• Removed Packages/Classes/Methods
• Migration Tools
DEVNEXUS 2019
Java Timeline (Current)
2012 2014 2017 2018 2019
Sept2017
Java 9
March2018
Java 10
Java 12
March2019
July2011
Java 7 (LTS)
March2014
Java 8 (LTS)
Sept2018
Java 11 (LTS)
DEVNEXUS 2019
Java Timeline (Future )
2014 2017 2018
Sept2018
2019Sept2017
March2018
Java 11
Java 9
Java 10
Java 12
March2019
March2014
Java 8
2020 2021 2022
Java 13
Java 14
Java 15
Java 16
Java 17
(LTS)
(LTS)
(LTS)
5DEVNEXUS 2019
Java 9/10/11: New Features
Tons of Features!
• ( JDK 9, JDK 10, JDK 11 )
• var for local variables (JEP 286)
• Launch Single-File Source-Code Programs
(JEP 330)
• New methods in several classes (Optional,
Collection, etc)
• TLS 1.3
• …
Java 9/10/11: Modularity
6DEVNEXUS 2019
• Java Platform Module System (JPMS)
• Breaks code into modules containing packages
• Applications must declare dependency on modules for access
• Very disruptive
• “Kill switch” on by default (currently)
• --illegal-access=permit
7DEVNEXUS 2019
Java 8 -> Java 11
Java 8 -> Java 11: Migration Concerns
8DEVNEXUS 2019
• Removals
• Packages, classes and methods
• Previously deprecated
• General Migration Strategy: Replace
• Not previously deprecated
• General Migration Strategy: Depends…
• Behavior changes
• Information Source: Java 9/10/11 compatibility guides and release notes
Java 8 -> Java 11: Removed
Packages/Classes
9DEVNEXUS 2019
Removed Security classes:
• com.sun.security.auth.PolicyFile
• com.sun.security.auth.SolarisNumericGroupPrincipal
• com.sun.security.auth.SolarisNumericUserPrincipal
• com.sun.security.auth.SolarisPrincipal
• com.sun.security.auth.X500Principal
• com.sun.security.auth.callback.DialogCallbackHandler
• com.sun.security.auth.module.SolarisLoginModule
• com.sun.security.auth.module.SolarisSystem
• javax.security.auth.Policy
Java 8
Java 11
Java 8 -> Java 11: Removed
Packages/Classes
10DEVNEXUS 2019
Removed AWT APIs:
• java.awt.peer.*
• java.awt.dnd.peer.*
• com.sun.awt.AWTUtilities
Removed DOM APIs:
• com.sun.java.browser.plugin2.DOM
• sun.plugin.dom.DOMObject
Removed Misc:
• com.sun.image.codec.jpeg.*
• com.sun.xml.internal.bind.*
11DEVNEXUS 2019
Java 8 -> Java 11: Removed Java EE Modules
java.activation
javax.activation
java.corba
javax.rmi
javax.rmi.CORBA
org.omg.CORBA
org.omg.CORBA_2_3
org.omg.CORBA_2_3.portable
org.omg.CORBA.*
org.omg.CosNaming
...
org.omg.PortableInterceptor
org.omg.PortableInterceptor.*
org.omg.PortableServer
org.omg.PortableServer.*
org.omg.SendingContext
org.omg.stub.java.rmi
java.transaction
javax.transaction
java.xml.bind
javax.xml.bind
javax.xml.bind.annotation
javax.xml.bind.annotation.adapters
javax.xml.bind.attachment
javax.xml.bind.helpers
javax.xml.bind.util
java.xml.ws
javax.jws
javax.jws.soap
javax.xml.soap
javax.xml.ws
javax.xml.ws.handler
javax.xml.ws.handler.soap
javax.xml.ws.http
javax.xml.ws.soap
javax.xml.ws.spi
javax.xml.ws.spi.http
javax.xml.ws.wsaddressing
java.xml.ws.annotation
javax.annotation
Option 1: package your own dependencies
Option 2: rely on the app server to provide them (OpenLiberty with Java 11)
Java 8 -> Java 11: Removed
Methods
12DEVNEXUS 2019
Removed java.lang.SecurityManager
Methods:
• java.lang.SecurityManager.checkAwtEventQueueAccess
• java.lang.SecurityManager.checkSystemClipboardAccess
• java.lang.SecurityManager.checkMemberAccess
• java.lang.SecurityManager.checkTopLevelWindow
• java.lang.SecurityManager.classDepth
• java.lang.SecurityManager.classLoaderDepth
• java.lang.SecurityManager.currentClassLoader
• java.lang.SecurityManager.currentLoadedClass
• java.lang.SecurityManager.getInCheck
• java.lang.SecurityManager.inClass
• java.lang.SecurityManager.inClassLoader
Java 8
Java 11
Java 8 -> Java 11: Removed
Methods
13DEVNEXUS 2019
Removed java.lang.Thread
Methods:
• java.lang.Thread.destroy()
• java.lang.Thread.stop(java.lang.Throwable)
Removed java.lang.Runtime
Methods:
• java.lang.Runtime.getLocalizedInputStream
• java.lang.Runtime.getLocalizedOutputStream
• java.lang.Runtime.runFinalizersOnExit
Removed java.lang.System Method:
• java.lang.System.runFinalizersOnExit
Java 8 -> Java 11: Removed
Methods
14DEVNEXUS 2019
Removed java.util.logging.LogManager
Methods:
• java.util.logging.LogManager.addPropertyChangeListener
• java.util.logging.LogManager.removePropertyChangeListener
Removed
java.util.jar.Pack200.Packer/Unpacker
Methods:
• java.util.jar.Pack200.Packer.addPropertyChangeListener
• java.util.jar.Pack200.Packer.removePropertyChangeListener
• java.util.jar.Pack200.Unpacker.addPropertyChangeListener
• java.util.jar.Pack200.Unpacker.removePropertyChangeListener
Java 8 -> Java 11: Other
Changes
15DEVNEXUS 2019
Technology Removal:
• Java Web Start
• JavaFX (separate product)
Other Removals:
• @jdk.Exported
• netdoc protocol handler
Behavior changes
• java.lang.Class.getAnnotation()
• java.nio.channels.DatagramChannel.send()
And much more…
• Oracle JDK 11 Migration Guide
16DEVNEXUS 2019
Java 8 -> Java 11
Where do I start?
17DEVNEXUS 2019
Application Binary Scanner Tool
• Download: https://developer.ibm.com/wasdev/downloads/#asset/tools-
Migration_Toolkit_for_Application_Binaries
• Command Line tool (Runs with Java 7 and later)
• Scans application binaries
• Accepts .ear/.war files (and .jar files with --analyze option)
• No app server required
• Flags potential migration issues for a variety of scenarios
• Java SE versions
• On-premise -> Cloud
• Others…
18DEVNEXUS 2019
Demo: Application Binary Scanner Tool
19DEVNEXUS 2019
Application Source Scanner Tool
• Download: https://developer.ibm.com/wasdev/downloads/#asset/tools-
WebSphere_Application_Server_Migration_Toolkit
• Eclipse Plugin
• Scans application source code
• Flags potential migration issues for a variety of scenarios including Java SE versions
• Click-and-go to affected code line
• Documentation
• See Chapter 3-4 for installation details
20DEVNEXUS 2019
Demo: Application Source Scanner Tool
21DEVNEXUS 2019
Java class dependency analyzer (Jdeps)
• Command utility shipped with JDK
• Multiple Options
• Migration Relevant Option: -jdkinternals
• Accepts jars, class files, directories
• Binary scanner and source scanner will recommend if applicable
• Limitations
• Subset of removed APIs
• No method removal flagging
• Java version specific (i.e. running Jdeps shipped with Java 8 is different than Java 11)
• Documentation
22DEVNEXUS 2019
TL;DR
1. Download the Binary scanner:
https://developer.ibm.com/wasdev/downloads/#asset/tools-
Migration_Toolkit_for_Application_Binaries
2. Follow the prompts to install the jar.
3. Run the binary scanner against your application binaries. Here is my command:
java -jar binaryAppScanner.jar C:AppsMyApplication.war --sourceAppServer=liberty --
targetAppServer=liberty --sourceJava=ibm8 --targetJava=openjdk11
• Command help:
• java -jar binaryAppScanner.jar --help
• java -jar binaryAppScanner.jar --help --analyze
4. Review the report and read the help for each flagged issue to resolve them.
References/Resources
23DEVNEXUS 2019
• My Blog on adding the Java 11 feature to the migration tools (https://developer.ibm.com/tutorials/migration-to-java-11-
made-easy/)
• Binary Scanner – see the Additional information section (https://developer.ibm.com/wasdev/downloads/#asset/tools-
Migration_Toolkit_for_Application_Binaries)
• Source Scanner – see the Additional information section (https://developer.ibm.com/wasdev/downloads/#asset/tools-
WebSphere_Application_Server_Migration_Toolkit)
• Oracle Java SE Support Roadmap (https://www.oracle.com/technetwork/java/java-se-support-roadmap.html)
• Oracle JDK Migration Guide (https://docs.oracle.com/en/java/javase/11/migrate/index.html)
• AdoptOpenJDK (https://adoptopenjdk.net)
• Migrating from Oracle Java to AdoptOpenJDK (https://adoptopenjdk.net/MigratingtoAdoptOpenJDKfromOracleJava.pdf)
• AWT peer removals (http://mail.openjdk.java.net/pipermail/awt-dev/2015-February/008924.html)
• Andy Guibert’s blog on OpenLiberty Java 11 support (https://openliberty.io/blog/2019/02/06/java-11.html)
24DEVNEXUS 2019
Questions?
Email: dalia@us.ibm.com
Twitter: @DaliaShea

DevNexus 2019: Migrating to Java 11

  • 1.
    Migrating to Java11 1DEVNEXUS 2019 Dalia Abo Sheasha WebSphere Migration Tools Development Lead Email: dalia@us.ibm.com Twitter: @DaliaShea
  • 2.
    Agenda 2DEVNEXUS 2019 • Background •Java 9/10/11: New Features • Java 8 -> Java 11: Migration Concerns • Removed Packages/Classes/Methods • Migration Tools
  • 3.
    DEVNEXUS 2019 Java Timeline(Current) 2012 2014 2017 2018 2019 Sept2017 Java 9 March2018 Java 10 Java 12 March2019 July2011 Java 7 (LTS) March2014 Java 8 (LTS) Sept2018 Java 11 (LTS)
  • 4.
    DEVNEXUS 2019 Java Timeline(Future ) 2014 2017 2018 Sept2018 2019Sept2017 March2018 Java 11 Java 9 Java 10 Java 12 March2019 March2014 Java 8 2020 2021 2022 Java 13 Java 14 Java 15 Java 16 Java 17 (LTS) (LTS) (LTS)
  • 5.
    5DEVNEXUS 2019 Java 9/10/11:New Features Tons of Features! • ( JDK 9, JDK 10, JDK 11 ) • var for local variables (JEP 286) • Launch Single-File Source-Code Programs (JEP 330) • New methods in several classes (Optional, Collection, etc) • TLS 1.3 • …
  • 6.
    Java 9/10/11: Modularity 6DEVNEXUS2019 • Java Platform Module System (JPMS) • Breaks code into modules containing packages • Applications must declare dependency on modules for access • Very disruptive • “Kill switch” on by default (currently) • --illegal-access=permit
  • 7.
  • 8.
    Java 8 ->Java 11: Migration Concerns 8DEVNEXUS 2019 • Removals • Packages, classes and methods • Previously deprecated • General Migration Strategy: Replace • Not previously deprecated • General Migration Strategy: Depends… • Behavior changes • Information Source: Java 9/10/11 compatibility guides and release notes
  • 9.
    Java 8 ->Java 11: Removed Packages/Classes 9DEVNEXUS 2019 Removed Security classes: • com.sun.security.auth.PolicyFile • com.sun.security.auth.SolarisNumericGroupPrincipal • com.sun.security.auth.SolarisNumericUserPrincipal • com.sun.security.auth.SolarisPrincipal • com.sun.security.auth.X500Principal • com.sun.security.auth.callback.DialogCallbackHandler • com.sun.security.auth.module.SolarisLoginModule • com.sun.security.auth.module.SolarisSystem • javax.security.auth.Policy Java 8 Java 11
  • 10.
    Java 8 ->Java 11: Removed Packages/Classes 10DEVNEXUS 2019 Removed AWT APIs: • java.awt.peer.* • java.awt.dnd.peer.* • com.sun.awt.AWTUtilities Removed DOM APIs: • com.sun.java.browser.plugin2.DOM • sun.plugin.dom.DOMObject Removed Misc: • com.sun.image.codec.jpeg.* • com.sun.xml.internal.bind.*
  • 11.
    11DEVNEXUS 2019 Java 8-> Java 11: Removed Java EE Modules java.activation javax.activation java.corba javax.rmi javax.rmi.CORBA org.omg.CORBA org.omg.CORBA_2_3 org.omg.CORBA_2_3.portable org.omg.CORBA.* org.omg.CosNaming ... org.omg.PortableInterceptor org.omg.PortableInterceptor.* org.omg.PortableServer org.omg.PortableServer.* org.omg.SendingContext org.omg.stub.java.rmi java.transaction javax.transaction java.xml.bind javax.xml.bind javax.xml.bind.annotation javax.xml.bind.annotation.adapters javax.xml.bind.attachment javax.xml.bind.helpers javax.xml.bind.util java.xml.ws javax.jws javax.jws.soap javax.xml.soap javax.xml.ws javax.xml.ws.handler javax.xml.ws.handler.soap javax.xml.ws.http javax.xml.ws.soap javax.xml.ws.spi javax.xml.ws.spi.http javax.xml.ws.wsaddressing java.xml.ws.annotation javax.annotation Option 1: package your own dependencies Option 2: rely on the app server to provide them (OpenLiberty with Java 11)
  • 12.
    Java 8 ->Java 11: Removed Methods 12DEVNEXUS 2019 Removed java.lang.SecurityManager Methods: • java.lang.SecurityManager.checkAwtEventQueueAccess • java.lang.SecurityManager.checkSystemClipboardAccess • java.lang.SecurityManager.checkMemberAccess • java.lang.SecurityManager.checkTopLevelWindow • java.lang.SecurityManager.classDepth • java.lang.SecurityManager.classLoaderDepth • java.lang.SecurityManager.currentClassLoader • java.lang.SecurityManager.currentLoadedClass • java.lang.SecurityManager.getInCheck • java.lang.SecurityManager.inClass • java.lang.SecurityManager.inClassLoader Java 8 Java 11
  • 13.
    Java 8 ->Java 11: Removed Methods 13DEVNEXUS 2019 Removed java.lang.Thread Methods: • java.lang.Thread.destroy() • java.lang.Thread.stop(java.lang.Throwable) Removed java.lang.Runtime Methods: • java.lang.Runtime.getLocalizedInputStream • java.lang.Runtime.getLocalizedOutputStream • java.lang.Runtime.runFinalizersOnExit Removed java.lang.System Method: • java.lang.System.runFinalizersOnExit
  • 14.
    Java 8 ->Java 11: Removed Methods 14DEVNEXUS 2019 Removed java.util.logging.LogManager Methods: • java.util.logging.LogManager.addPropertyChangeListener • java.util.logging.LogManager.removePropertyChangeListener Removed java.util.jar.Pack200.Packer/Unpacker Methods: • java.util.jar.Pack200.Packer.addPropertyChangeListener • java.util.jar.Pack200.Packer.removePropertyChangeListener • java.util.jar.Pack200.Unpacker.addPropertyChangeListener • java.util.jar.Pack200.Unpacker.removePropertyChangeListener
  • 15.
    Java 8 ->Java 11: Other Changes 15DEVNEXUS 2019 Technology Removal: • Java Web Start • JavaFX (separate product) Other Removals: • @jdk.Exported • netdoc protocol handler Behavior changes • java.lang.Class.getAnnotation() • java.nio.channels.DatagramChannel.send() And much more… • Oracle JDK 11 Migration Guide
  • 16.
    16DEVNEXUS 2019 Java 8-> Java 11 Where do I start?
  • 17.
    17DEVNEXUS 2019 Application BinaryScanner Tool • Download: https://developer.ibm.com/wasdev/downloads/#asset/tools- Migration_Toolkit_for_Application_Binaries • Command Line tool (Runs with Java 7 and later) • Scans application binaries • Accepts .ear/.war files (and .jar files with --analyze option) • No app server required • Flags potential migration issues for a variety of scenarios • Java SE versions • On-premise -> Cloud • Others…
  • 18.
  • 19.
    19DEVNEXUS 2019 Application SourceScanner Tool • Download: https://developer.ibm.com/wasdev/downloads/#asset/tools- WebSphere_Application_Server_Migration_Toolkit • Eclipse Plugin • Scans application source code • Flags potential migration issues for a variety of scenarios including Java SE versions • Click-and-go to affected code line • Documentation • See Chapter 3-4 for installation details
  • 20.
  • 21.
    21DEVNEXUS 2019 Java classdependency analyzer (Jdeps) • Command utility shipped with JDK • Multiple Options • Migration Relevant Option: -jdkinternals • Accepts jars, class files, directories • Binary scanner and source scanner will recommend if applicable • Limitations • Subset of removed APIs • No method removal flagging • Java version specific (i.e. running Jdeps shipped with Java 8 is different than Java 11) • Documentation
  • 22.
    22DEVNEXUS 2019 TL;DR 1. Downloadthe Binary scanner: https://developer.ibm.com/wasdev/downloads/#asset/tools- Migration_Toolkit_for_Application_Binaries 2. Follow the prompts to install the jar. 3. Run the binary scanner against your application binaries. Here is my command: java -jar binaryAppScanner.jar C:AppsMyApplication.war --sourceAppServer=liberty -- targetAppServer=liberty --sourceJava=ibm8 --targetJava=openjdk11 • Command help: • java -jar binaryAppScanner.jar --help • java -jar binaryAppScanner.jar --help --analyze 4. Review the report and read the help for each flagged issue to resolve them.
  • 23.
    References/Resources 23DEVNEXUS 2019 • MyBlog on adding the Java 11 feature to the migration tools (https://developer.ibm.com/tutorials/migration-to-java-11- made-easy/) • Binary Scanner – see the Additional information section (https://developer.ibm.com/wasdev/downloads/#asset/tools- Migration_Toolkit_for_Application_Binaries) • Source Scanner – see the Additional information section (https://developer.ibm.com/wasdev/downloads/#asset/tools- WebSphere_Application_Server_Migration_Toolkit) • Oracle Java SE Support Roadmap (https://www.oracle.com/technetwork/java/java-se-support-roadmap.html) • Oracle JDK Migration Guide (https://docs.oracle.com/en/java/javase/11/migrate/index.html) • AdoptOpenJDK (https://adoptopenjdk.net) • Migrating from Oracle Java to AdoptOpenJDK (https://adoptopenjdk.net/MigratingtoAdoptOpenJDKfromOracleJava.pdf) • AWT peer removals (http://mail.openjdk.java.net/pipermail/awt-dev/2015-February/008924.html) • Andy Guibert’s blog on OpenLiberty Java 11 support (https://openliberty.io/blog/2019/02/06/java-11.html)
  • 24.