Migrazione della versione di Java SE

Nell'insieme di regole di Java Code Review, la categoria Java SE Migration contiene le regole per la migrazione da J2SE 5.0, Java SE 6, Java SE 7, Java SE 8 o Java SE 11 o Java SE 17. Gli obiettivi di migrazione Java sono Java SE 8, 11, 17 e 21.

La categoria Impatti della compatibilità da Sun a IBM Java fornisce una serie di regole per migrare le API Sun che non sono disponibili nell'IBM Java Runtime Environment. Laddove possibile, le regole migrano il codice per utilizzare le classi javax.net o com.ibm.net.ssl.

Le regole specifiche selezionate dipendono dalla selezione del Java Runtime Environment di origine precedentemente utilizzato dall'applicazione e dalla versione WebSphere alla quale si sta eseguendo la migrazione. Per Liberty, puoi scegliere come target Java SE 8, 11, 17 o 21. Per WebSphere tradizionale, è necessario migrare a Java SE 8.

Le correzioni rapide sono disponibili laddove possibile. Le regole senza correzioni rapide contrassegnano le violazioni della regola per consentire all'utente d valutarne l'utilizzo e di migrare il codice manualmente, se necessario.

Impatti della compatibilità con Java SE 21

Java 21 è supportato su Liberty 23.0.0.10 e successive. Gli impatti di compatibilità di Java SE 21 comprendono tutti gli impatti di compatibilità delle versioni da 17 a 21 di Java SE.

Tabella 1. Impatti della compatibilità di Java SE 21
Nome regola Descrizione regola Correzione automatica
Informazioni generali e potenziali problemi di Java SE 21 Questa regola contiene collegamenti a informazioni sulle modifiche apportate a Java SE 21, nonché alle precedenti versioni di Java non-LTS (long term support) rilasciate dopo Java SE 21. java-version-21.yml
org.openrewrite.java.migrate.UpgradeToJava17
Evitare di usare il set di caratteri predefinito quando il flusso di uscita è un PrintStream Questa regola segnala i costruttori di classi Java java.io.PrintStream, java.io.PrintWriter e java.io.OutputStreamWriter che accettano un java.io.OutputStream e nessun set di caratteri. No
Evitare di utilizzare i metodi deprecati getSubject(), doAs() in javax.security.auth.Subject Questa regola segnala l'uso dei metodi getSubject() e doAs() nella classe javax.security.auth.Subject. Il metodo " getSubject() " è deprecato da Java SE 17 ed è contrassegnato come " forRemoval = true". Il metodo " doAs() " è deprecato da Java SE 18 e contrassegnato come " forRemoval = true". java-version-21.yml
org.openrewrite.java.migrate.RemovedSubjectMethods
Il valore predefinito della proprietà di sistema java.security.manager è stato modificato per disabilitare Questa regola segnala l'uso del metodo setSecurityManager(SecurityManager()) in java.lang.System. No
Non utilizzare la classe java.lang.Compiler Questa regola segnala l'uso della classe java.lang.Compiler. Questa classe è stata rimossa in Java SE 21. No
Evitare l'uso dei metodi Thread.stop(), Thread.resume() e Thread.suspend() Questa regola segnala l'uso dei metodi Thread.stop(), Thread.suspend() e Thread.resume(). Questi metodi sono stati deprecati in Java SE 19 e sono stati aggiornati per lanciare sempre un UnsupportedOperationException. Il metodo sarà degradato e rimosso in una versione futura, poiché è intrinsecamente insicuro ed è stato deprecato da Java 1.2. No
Non utilizzare il metodo ThreadGroup.allowThreadSuspension Questa regola segnala l'uso del metodo ThreadGroup.allowThreadSuspension. Questo metodo è stato utilizzato per la gestione di poca memoria nel JDK 1.1, ma non è mai stato completamente specificato. È stato deprecato e cambiato in "do nothing" nel JDK 1.2 (1998). Questo metodo è stato rimosso nella versione Java 21. No
Il metodo ObjectInputStream.GetField.get(name, object) è stato modificato per lanciare una ClassNotFoundException Questa regola segnala l'uso del metodo get(String name, Object val) in java.io.ObjectInputStream.GetField. No
Non utilizzare la classe RMIIIOPServerImpl Questa regola segnala l'uso della classe javax.management.remote.rmi.RMIIIOPServerImpl, che è stata rimossa in Java SE 21. No
Evitare di utilizzare le implementazioni legacy PlainSocketImpl e PlainDatagramSocketImpl Questa regola segnala l'uso dei costruttori java.net.Socket(Proxy proxy), java.net.DatagramSocket(SocketAddress bindaddr) e java.net.MulticastSocket(SocketAddress bindaddr) No
Evitare di utilizzare il metodo deprecato empty finalize() in java.desktop Questa regola segnala l'uso del metodo finalize() nelle classi java.awt.color.ICC_Profile, java.awt.image.ColorModel e java.awt.image.IndexColorModel. java-version-21.yml
org.openrewrite.java.migrate.DeleteDeprecatedFinalize
Evitare di utilizzare i metodi degradati ThreadGroup Questa regola segnala l'uso dei metodi ThreadGroup.setDaemon, ThreadGroup.isDaemon, ThreadGroup.destroy e ThreadGroup.isDestroyed. No

Impatti sulla compatibilità di Java SE 17

Java 17 è supportato su Liberty 21.0.0.10 e successive. Gli impatti sulla compatibilità di Java SE 17 includono tutti gli impatti sulla compatibilità dalla versione 12 alla versione 17 di Java SE.

Tabella 2. Impatti sulla compatibilità di Java SE 17
Nome regola Descrizione regola Correzione automatica
Cambiamento di comportamento nel metodo Properties.loadFromXML per documenti non conformi XML Questa regola delle bandiere java.util.Properties.loadFromXML​(java.io.InputStream) richiama le chiamate. Il metodo genera un'eccezione per i documenti XML non conformi in Java SE 12. No
Modifica del comportamento della proprietà di sistema user.timezone Questa regola contrassegna le chiamate del metodo System.getProperty con il valore di proprietà user.timezone. Il metodo può restituire un valore nullo in Java SE 12. No
Ricerca di una modifica del comportamento nella messa in corrispondenza dei modelli di espressione regolare I flag della regola chiamano le invocazioni dei metodi quando l'espressione regolare fornita contiene un'intersezione, seguita da una classe di caratteri annidata, seguita da una classe di caratteri non annidata. No
Non utilizzare i metodi rimossi FileInputStream.finalize() e FileOutputStream.finalize() I metodi java.io.FileInputStream.finalize() e java.io.FileOutputStream.finalize() sono stati rimossi da Java SE 12. java-version-17.yml
org.openrewrite.java.migrate.RemovedFileIOFinalizeMethods
Non utilizzare la classe com.sun.awt.SecurityWarning La classe com.sun.awt.SecurityWarning è stata rimossa da Java SE 12. No
Non utilizzare i metodi rimossi ZipFile.finalize (), Inflater.finalize () e Deflater.finalize () I metodi java.util.zip.ZipFile.finalize(), java.util.zip.Inflater.finalize() e java.util.zip.Deflater.finalize() sono stati rimossi da Java SE 12. java-version-17.yml
org.openrewrite.java.migrate.RemovedZipFinalizeMethods
Non utilizzare i metodi Runtime.traceInstructions(booleano) e Runtime.traceMethodCalls(boolean) rimossi I metodi java.lang.Runtime.traceInstructions(boolean) e java.lang.Runtime.traceMethodCalls(boolean) sono stati rimossi da Java SE 13. java-version-17.yml
org.openrewrite.java.migrate.RemovedRuntimeTraceMethods
Le API java.util.jar.Pack200 sono state rimosse La classe java.util.jar.Pack200 è stata rimossa in aggiunta alle sue interfacce java.util.jar.Pack200.Packer e java.util.jar.Pack200.Unpacker. No
La proprietà di sistema sun.nio.cs.map è stata rimossa La proprietà di sistema sun.nio.cs.map è stata rimossa in Java SE 14. Questa regola contrassegna i riferimenti con valori letterali stringa a "sun.nio.cs.map" No
Il pacchetto java.security.acl è stato rimosso Il pacchetto java.security.acl è stato rimosso in Java SE 14, le classi java.security.Policy dovrebbero essere utilizzate invece. No
Le curve denominate deboli sono state rimosse Le curve denominate deboli sono state rimosse dal provider SunEC in Java SE 16. Questa regola contrassegna i riferimenti a qualsiasi curva denominata debole. No
Ricerca di un conflitto dello spazio dei nomi con la nuova classe java.lang.Record La classe java.lang.Record è stata aggiunta in Java SE 14. Per evitare un conflitto dello spazio dei nomi, assicurarsi che qualsiasi altra classe denominata "Record" sia importata utilizzando un'importazione di tipo univoco (ad esempio: "com.foo.Record") anziché un'importazione di tipo globale (ad esempio: "com.foo.*"). No
Il metodo netscape.javascript.JSObject.getWindow(Applet) è stato rimosso Il metodo netscape.javascript.JSObject.getWindow(Applet) è stato rimosso in Java SE 14. Poiché il metodo è stato utilizzato solo con Java Plugins, il quale è stato anche rimosso, non vi è alcuna sostituzione per tale metodo. No
Ricerca di un cambiamento del comportamento sul metodo DatagramPacket.getPort() Il valore restituito predefinito per il metodo DatagramPacket.getPort() è stato modificato da -1 a 0 in Java SE 15. No
La costante RMIConnectorServer.CREDENTIAL_TYPES è stata rimossa La costante RMIConnectorServer.CREDENTIAL_TYPES è stata rimossa in Java SE 15. java-version-17.yml
org.openrewrite.java.migrate.RemovedRMIConnectorServerCredentialTypesConstant
L'implementazione del metodo SSLSession.getPeerCertificateChain() è stata rimossa L'implementazione del metodo SSLSession.getPeerCertificateChain() predefinita è stata rimossa in Java SE 15. java-version-17.yml
org.openrewrite.java.migrate.RemovedSSLSessionGetPeerCertificateChainMethodImpl
I costruttori Modifier() e ConstantBootstraps() sono stati rimossi I costruttori Modifier() e ConstantBootstraps() sono stati rimossi in Java SE 15. java-version-17.yml
org.openrewrite.java.migrate.RemovedModifierAndConstantBootstrapsConstructors
L'opzione di socket Solaris SO_FLOW_SLA è stata rimossa L'opzione di socket Solaris SO_FLOW_SLA e le classi SocketFlow e SocketFlow.Status correlate sono state rimosse in Java SE 15. No
Il nome di provider com.sun.net.ssl.internal.ssl.Provider è stato rimosso Il nome del provider com.sun.net.ssl.internal.ssl.Provider legacy SunJSSE è stato rimosso in Java SE 15. Deve essere sostituito con il nome di provider SunJSSE. java-version-17.yml
org.openrewrite.java.migrate.RemovedLegacySunJSSEProviderName
Ricerca del metodo predefinito isEmpty() sull'interfaccia java.lang.CharSequence Un metodo isEmpty() predefinito è stato aggiunto all'interfaccia java.lang.CharSequence in Java SE 15. Le classi che implementano java.lang.CharSequence e un'altra interfaccia che definisce il metodo isEmpty() predefinito potrebbero dover essere aggiornate. No
Informazioni generali su Java SE 17 e potenziali problemi Informazioni generali sulle modifiche in Java SE 17 e potenziali problemi di migrazione che non sono rilevati da questo strumento. java-version-17.yml
org.openrewrite.java.migrate.Java8toJava11
Il costruttore ToolProvider() è stato rimosso Il costruttore ToolProvider è stato rimosso in Java SE 16. java-version-17.yml
org.openrewrite.java.migrate.RemovedToolProviderConstructor
Il package com.sun.net.ssl è stato rimosso Il package di com.sun.net.ssl dell'API interna è stato rimosso. Il package era previsto solo per uso interno e le API sostitutive sono disponibili nel package javax.net.ssl. java-version-17.yml
org.openrewrite.java.migrate.SunNetSslPackageUnavailable
Evitare di utilizzare i metodi obsoleti in java.lang.ThreadGroup e java.lang.Thread I metodi suspend e resume in java.lang.Thread e i metodi suspend, resume e allowThreadSuspension in java.lang.ThreadGroup sono stati dichiarati obsoleti in Java SE 14. I metodi stop, destroy, isDestroyed, setDaemon e isDaemon in java.lang.ThreadGroup sono stati dichiarati obsoleti in Java SE 16. No
Ricerca del metodo predefinito toList() sull'interfaccia java.util.stream.Stream Un metodo toList() predefinito è stato aggiunto all'interfaccia java.util.stream.Stream in Java SE 16. Le classi che implementano java.util.stream.Stream e un'altra interfaccia che definisce il metodo toList() predefinito potrebbero dover essere aggiornate. No
Ricerca di un cambiamento del comportamento sul metodo HttpPrincipal.getName() Il valore restituito dal metodo HttpPrincipal.getName() è stato modificato in Java SE 16. No
Ricerca di una modifica del comportamento nel metodo nella classe java.io.LineNumberReader La definizione di terminatore di riga nella classe java.io.LineNumberReader è stata modificata in Java SE 16. No
Evitare di utilizzare le API java.security.cert obsolete I metodi getIssuerDN, getSubjectDN, getIssuerDN, setIssuer, setSubject, getIssuerAsString, getSubjectAsString e addIssuerName in java.security.cert.X509Certificate, java.security.cert.X509CRL, java.security.cert.X509CertSelector e java.security.cert.X509CRLSelector sono stati dichiarati obsoleti in Java SE 16. No
Evitare di utilizzare i metodi obsoleti in java.util.logging.LogRecord I metodi getThreadID e setThreadID in java.util.logging.LogRecord sono stati dichiarati obsoleti in Java SE 16. java-version-17.yml
org.openrewrite.java.migrate.DeprecatedLogRecordThreadID
Evitare di utilizzare i costruttori di classe wrapper primitiva obsoleti I costruttori di classe wrapper primitiva sono stati dichiarati obsoleti in Java SE 16. No
Il package javax.security.cert è stato reso obsoleto per la rimozione

javax.security.cert è stato dichiarato obsoleto in Java SE 13 e contrassegnato per la rimozione. Le classi in questo package non devono più essere utilizzate. Il package java.security.cert contiene delle sostituzioni adatte.

java-version-17.yml
org.openrewrite.java.migrate.DeprecatedJavaxSecurityCert
Il metodo Thread.countStackFrames() è stato modificato per generare incondizionatamente una UnsupportedOperationException

Il metodo terminalmente obsoleto Thread.countStackFrames() è stato modificato per generare incondizionatamente una UnsupportedOperationException in Java SE 14.

java-version-17.yml
org.openrewrite.java.migrate.DeprecatedCountStackFramesMethod
Evitare di utilizzare il package di attivazione RMI rimosso

Il pacchetto java.rmi.activation è stato obsoleto in Java SE 15 e rimosso in Java SE 17.

No
Il meccanismo del factory di implementazione di socket è stato dichiarato obsoleto I seguenti metodi utilizzati per impostare i factory di implementazione di socket a livello di sistema sono stati dichiarati obsoleti in Java SE 17: static void ServerSocket.setSocketFactory(SocketImplFactory fac), static void Socket.setSocketImplFactory(SocketImplFactory fac), static void DatagramSocket.setDatagramSocketImplFactory(DatagramSocketImplFactory fac). No
Ricerca di una modifica del comportamento in HttpClient.newHttpClient e HttpClient.Builder.build Il comportamento della messa in corrispondenza dei modelli è stato modificato per alcune espressioni regolari che utilizzano le intersezioni in Java SE 17. No
Il metodo defineAnonymousClass da sun.misc.Unsafe è stato rimosso Il metodo defineAnonymousClass da sun.misc.Unsafe è stato rimosso in Java SE 17. No
Ricerca di una modifica del comportamento negli agent Java I metodi di agent Java premain e agentmain devono essere pubblici in Java SE 17. java-version-17.yml
org.openrewrite.java.migrate.Jre17AgentMainPreMainPublic
L'API dell'Applet è stata resa obsoleta per la rimozione L'API dell'Applet è stata resa obsoleta per la rimozione da Java SE 17. No
I JAR firmati con gli algoritmi SHA-1 sono ora limitati I JAR firmati con gli algoritmi SHA-1 sono ora limitati per impostazione predefinita e trattati come se fossero non firmati in Java SE 17. No
Le chiamate EJB remote potrebbero non riuscire su Java SE 17 A causa di una più rigida implementazione dell'accesso ai moduli, le chiamate EJB remote potrebbero non riuscire su Java SE 17. No

Impatti sulla compatibilità di Java SE 11

Java 11 è supportato su Liberty v19.0.0.1 e successive.

Tabella 3. Impatti sulla compatibilità di Java SE 11
Nome regola Descrizione regola Correzione automatica
Evitare di utilizzare la classe RMIIIOPServerImpl Questa regola contrassegna l'utilizzo della classe RMIIIOPServerImpl. Questa classe è divenuta obsoleta in Java SE 11. No
Cambiamento di comportamento nei dati della locale predefinita Il CLDR (Common Locale Data Repository) di Unicode Consortium è abilitato per i dati della locale predefinita in Java 11. Nelle release precedenti, il valore predefinito era JRE, ora noto come COMPAT. Il codice che utilizza servizi sensibili alla locale quali data, ora e formattazione dei numeri potrebbe produrre risultati diversi con i dati della locale CLDR. No
Cambiamento del comportamento nelle eccezioni quando si richiama il metodo Class.getAnnotation() In Java 11, il metodo java.lang.Class.getAnnotation() genera una java.lang.TypeNotPresentException invece di una java.lang.ArrayStoreException se l'annotazione ha un valore di array che fa riferimento a una classe mancante. java-version-11.yml
org.openrewrite.java.migrate.ArrayStoreExceptionToTypeNotPresentException
Modifica al comportamento nel metodo java.util.concurrent.ThreadPoolExecutor.finalize() In Java 11, il metodo java.util.concurrent.ThreadPoolExecutor.finalize() non arresta più il pool di thread. No
Modifica al comportamento nel metodo java.lang.invoke.MethodHandles.filterArguments Questa regola contrassegna le applicazioni che utilizzano il metodo java.lang.invoke.MethodHandles.filterArguments. No
Modifica al comportamento nel costruttore javax.management.MBeanOperationInfo Questa regola contrassegna le applicazioni che utilizzano il costruttore javax.management.MBeanOperationInfo se l'impatto fornito non è uno di INFO, ACTION, ACTION_INFO o UNKNOWN No
Modifica al comportamento nei metodi API java.xml con tipi non elaborati In Java 11, le API java.xml che contengono le dichiarazioni di metodo con tipi non elaborati sono state aggiornate per aggiungere un parametro di tipo. No
Ricerca di una modifica del comportamento nei metodi select e selectNow di Selector Questa regola contrassegna i metodi java.nio.channels.Selector.select() e java.nio.channels.Selector.selectNow(). Il comportamento dei metodi è stato modificato in JDK 11. No
Ricerca le modifiche al comportamento correlate alla separazione dei percorsi di codice soggetti e non soggetti a blocco per i canali I/O In Java 11, sono stai creati percorsi di codice soggetti e non soggetti a blocco separati per i canali I/O per incrementare le prestazioni e l'affidabilità. Questa regola contrassegna le chiamate API che potrebbero essere interessati dal cambiamento del comportamento. No
Ricerca le modifiche alla configurazione correlate alla classe com.ibm.security.auth.module.Krb5LoginModule Questa regola contrassegna qualsiasi riferimento alle classi correlate a com.ibm.security.auth.module.Krb5LoginModule che potrebbero richiedere delle modifiche alla configurazione quando si esegue la migrazione a Java 11. No
Rileva la modifica predefinita dell'archivio chiavi In Java 11 il keystore predefinito è stato aggiornato da JKS a PKCS12. Di conseguenza, le applicazioni che si basano su KeyStore.getDefaultType() potrebbero riscontrare problemi dopo la migrazione, a meno che il loro archivio chiavi JKS non sia stato convertito in PKCS12. java-version-11.yml
org.openrewrite.java.migrate.ChangeDefaultKeyStore
Ricerca dei metodi rimossi nelle interfacce Pack200.Packer e Pack200.Unpacker addPropertyChangeListener e removePropertyChangeListener non sono più definiti nelle interfacce Pack200.Packer e Pack200.Unpacker in Java 11. No
Non utilizzare le API del package com.sun.image.codec.jpeg L'API com.sun.image.codec.jpeg non è disponibile in Java SE 11. No
non utilizzare le API da com.sun.xml.internal.bind.* pacchetti Le API nei package com.sun.xml.internal.bind.* non sono più disponibili in Java SE 11. java-version-11.yml
org.openrewrite.java.migrate.InternalBindPackages
Non utilizzare le API dal sun.* pacchetti Le API sun.* sono API interne di JDK non supportate, e potrebbero essere eliminate in qualsiasi momento. No
Non utilizzare le API BASE64Encoder/Decoder di sun.* pacchetti sun.misc.BASE64Encoder e sun.misc.BASE64Decoder sono stati rimossi in Java SE 11. java-version-11.yml
org.openrewrite.java.migrate.UseJavaUtilBase64
Non utilizzare il formato JCEKS Keystore Questa regola rileva e segnala l'uso di KeyStore.getInstance("JCEKS"). Gli sviluppatori dovrebbero aggiornare le loro applicazioni per utilizzare PKCS12 per garantire la compatibilità. No
Non utilizzare la classe javax.security.auth.Policy La classe javax.security.auth.Policy non è disponibile in Java SE 11. Questa regola contrassegna qualsiasi riferimento alla classe javax.security.auth.Policy. java-version-11.yml
org.openrewrite.java.migrate.RemovedPolicy
Non utilizzare le classi com.sun rimosse Questa regola contrassegna le classi com.sun che non sono disponibili in Java SE 11. No
Non utilizzare i metodi runFinalizersOnExit rimossi I metodi java.lang.Runtime.runFinalizersOnExit e java.lang.System.runFinalizersOnExit sono stati rimossi da Java SE 11. No
Non utilizzare invocazioni di metodi statici ( com.sun.awt.AWTUtilities ) I metodi com.sun.awt.AWTUtilities.isTranslucencySupported(), com.sun.awt.AWTUtilities.setWindowOpacity(), com.sun.awt.AWTUtilities.getWindowOpacity(), com.sun.awt.AWTUtilities.getWindowShape(), com.sun.awt.AWTUtilities.isWindowOpaque(), com.sun.awt.AWTUtilities.isTranslucencyCapable() e com.sun.awt.AWTUtilities.setComponentMixingCutoutShape() sono stati rimossi da Java SE 11. java-version-11.yml
org.openrewrite.java.migrate.ReplaceComSunAWTUtilitiesMethods
Non utilizzare la classe com.ibm.security.auth.module.Krb5LoginModule La classe com.ibm.security.auth.module.Krb5LoginModule non è disponibile in Java SE 11. ibm-java.yml
org.openrewrite.java.migrate.Krb5LoginModuleClass
Non utilizzare il metodo getPeer Tutti i metodi nell'API Java SE che restituiscono una classe dal package java.awt.peer sono stati rimossi da Java 11. Per verificare se un peer è già stato impostato, utilizzare il metodo Component.isDisplayable(). Per verificare se un componente è leggero, utilizzare il metodo Component.isLightWeight(). java-version-11.yml
org.openrewrite.java.migrate.ReplaceAWTGetPeerMethod
Non utilizzare il metodo clone java.lang.ref.Reference Il metodo java.lang.ref.Reference clone non è più supportato in Java 11. java-version-11.yml
org.openrewrite.java.migrate.ReferenceCloneMethod
Non utilizzare il protocollo URL netdoc Il gestore del protocollo netdoc è stato rimosso da Java 11. No
Non utilizzare le API com.sun.java.browser.plugin2.DOM e sun.plugin.dom.DOMObject rimosse Le API com.sun.java.browser.plugin2.DOM e sun.plugin.dom.DOMObject non sono disponibili in Java SE 11. No
Non utilizzare il LookAndFeel Swing com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel o apple.laf.AquaLookAndFeel rimosso I metodi com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel e apple.laf.AquaLookAndFeel dello Swing LookAndFeels non sono più supportati dal metodo javax.swing.UIManager.setLookAndFeel in Java SE 11. No
Non utilizzare i metodi rimossi java.lang.Thread.destroy() o java.lang.Thread.stop(java.lang.Throwable) I metodi java.lang.Thread.destroy() e java.lang.Thread.stop(java.lang.Throwable) sono stati rimossi in Java SE 11. java-version-11.yml
org.openrewrite.java.migrate.ThreadStopDestroy
Non utilizzare il metodo javax.crypto.ExemptionMechanism.finalize() rimosso Il metodo javax.crypto.ExemptionMechanism.finalize() è stato rimosso da Java SE 11. No
Non utilizzare l'annotazione jdk.Exported rimossa L'annotazione jdk.Exported non è disponibile in Java SE 11. No
Non utilizzare i metodi addPropertyChangeListener o removePropertyChangeListener rimossi da LogManager I metodi addPropertyChangeListener e removePropertyChangeListener non sono disponibili sulla classe java.util.logging.LogManager in Java 11. No
Non utilizzare i metodi Runtime.getLocalizedInputStream e Runtime.getLocalizedOutputStream rimossi I metodi Runtime.getLocalizedInputStream e Runtime.getLocalizedOutputStream sono stati rimossi da Java SE 11. java-version-11.yml
org.openrewrite.java.migrate.ReplaceLocalizedStreamMethods
Non utilizzare i metodi rimossi SecurityManager Questa regola contrassegna i metodi che sono stati rimossi dalla classe java.lang.SecurityManager in Java SE 11. No
Non utilizzare i metodi rimossi di SecurityManager (con correzione automatica) Questa regola contrassegna i metodi che sono stati rimossi dalla classe java.lang.SecurityManager in Java SE 11. Questa regola ha una correzione automatica per aggiornare la chiamata al metodo. java-version-11.yml
org.openrewrite.java.migrate.RemovedSecurityManagerMethods
Modifica del formato numerico della versione in Java 11 Java 11 segna l'inizio di una nuova convenzione di denominazione del numero di versione. Il formato dei numeri di versione cambia da 1.8 (Java 8) a 11 (Java 11). No
Esaminare la ripulitura della risorsa nei metodi close sovrascritti FileInputStream e FileOutputStream Questa regola contrassegna il metodo close() sulle sottoclassi di java.io.FileInputStream e java.io.FileOutputStream. No
Eseguire lo strumento di analisi delle dipendenze della classe Java (JDeps) Il JDK fornisce un programma di utilità della riga comandi denominato jdeps che analizza le dipendenze della classe. Lo strumento può essere utilizzato per identificare i package interni jdk non più disponibili in JDK 11. No
I package java.awt.peer e java.awt.dnd.peer non sono accessibili Tutti i metodi presenti nell'API Java SE che si riferiscono ai tipi definiti nei pacchetti java.awt.peer e java.awt.dnd.peer sono stati rimossi da Java 11. Il codice che richiama un metodo che precedentemente accettava o restituiva un tipo definito in questi package non viene più compilato o eseguito in Java 11. No
Il metodo java.nio.channels.DatagramChannel.send() genera AlreadyConnectedException invece di IllegalArgumentException Quando l'indirizzo viene passato a java.nio.channels.DatagramChannel. send(ByteBuffer,SocketAddress) è diverso dall'indirizzo collegato, questo metodo lancia un AlreadyConnectedException invece di un IllegalArgumentException in Java SE 11. java-version-11.yml
org.openrewrite.java.migrate.IllegalArgumentExceptionToAlreadyConnectedException
Le classi java.nio.channels.Selector e java.nio.channels.SelectableChannel possono essere utilizzate senza problemi in thread simultanei Le classi java.nio.channels.Selector e java.nio.channels.SelectableChannel sono state aggiornate per essere utilizzate in modo sicuro nei thread simultanei in Java SE 11. No
Il modulo java.transaction è stato rimosso da JDK 11 Questa regola contrassegna le applicazioni che utilizzano i package nel modulo javax.transaction. No
I moduli java.xml.bind e java.activation sono stati rimossi da JDK 11 (implementazione personalizzata) Questa regola contrassegna le applicazioni che utilizzano i package nei moduli java.xml.bind o java.activation e includono una loro implementazione JAXB. ibm-java.yml
org.openrewrite.java.migrate.RemovedJaxBModuleProvided
I moduli java.xml.bind e java.activation sono stati rimossi da JDK 11 (implementazione predefinita) Questa regola contrassegna le applicazioni che utilizzano i package nei moduli java.xml.bind o java.activation e utilizzano l'implementazione JAXB predefinita di WebSphere. No
I moduli JavaFX sono stati rimossi da JDK 11 I moduli JavaFX non sono disponibili in Java SE 11. No
I costruttori URLClassLoader e le chiamate newInstance() generano un'eccezione NullPointerException quando l'array contiene un elemento null I costruttori URLClassLoader e le chiamate newInstance() generano una NullPointerException quando l'array di URL contiene un elemento null in Java SE 11. No
La tecnologia Java Web Start è stata rimossa da JDK 11 La tecnologia Java Web Start non è disponibile in JDK 11. Questa regola contrassegna i file jnlp in un'applicazione. No
Modifica al comportamento per il programma di caricamento classe del pool comune ForkJoinPool Questa regola contrassegna i metodi che potrebbero comportarsi diversamente in base alla propagazione del programma di caricamento classe di contesto del thread per un'applicazione. No
Informazioni generali e potenziali problemi di Java SE 11 Questa regola contiene collegamenti a informazioni sulle modifiche apportate a Java SE 11, nonché alle precedenti versioni di Java non LTS (long term support) rilasciate dopo Java SE 11. java-version-11.yml
org.openrewrite.java.migrate.UpgradeToJava8
 

Tabella 4. Impatti sulla compatibilità di Java SE 11 (non Liberty Core)
Nome regola Descrizione regola Correzione automatica
Il modulo java.corba è stato rimosso da JDK 11 Questa regola contrassegna le applicazioni che utilizzano i package nel modulo java.corba. No
Il modulo java.xml.ws è stato rimosso da JDK 11 (implementazione personalizzata) Questa regola contrassegna le applicazioni che utilizzano i package nel modulo java.xml.ws e includono una loro implementazione JAX-WS. ibm-java.yml
org.openrewrite.java.migrate.RemovedJavaXMLWSModuleProvided
Il modulo java.xml.ws è stato rimosso da JDK 11 (implementazione predefinita) Questa regola contrassegna le applicazioni che utilizzano i package nel modulo java.xml.ws e utilizzano l'implementazione JAX-WS predefinita di WebSphere. No

L'implementazione di IBM XML è stata rimossa in Java 11. Per ulteriori informazioni, consultare Determinazione della compatibilità delle applicazioni: XML.

Tabella 5. Impatti sulla compatibilità dell'implementazione IBM XML di Java SE 11
Nome regola Descrizione regola Correzione automatica
Rilevate dipendenze nei package interni dell'implementazione di IBM XML Questa regola contrassegna i riferimenti ai package interni di IBM XML. No
Rilevati riferimenti con valori letterali stringa ai parametri di configurazione specifici dell'implementazione di IBM XML Questa regola contrassegna i riferimenti con valori letterali stringa ai parametri di configurazione specifici dell'implementazione di IBM XML. No
Rilevati riferimenti con valori letterali stringa ad elementi interni dell'implementazione di IBM XML Questa regola contrassegna i riferimenti con valori letterali stringa all'implementazione di IBM XML. No

Impatti sulla compatibilità di J2SE 8

Java 8 è supportato su Liberty e WebSphere Application Server tradizionale V8.5.5.9 e successive.

Tabella 6. Impatti sulla compatibilità di J2SE 8
Nome regola Descrizione regola Correzione automatica
Cambiamento del comportamento nelle eccezioni quando si impostano le chiavi trasversali del focus AWT In Java 8, i metodi java.awt.Component setFocusTraversalKeys e java.awt.KeyboardFocusManager setDefaultFocusTraversalKeys generano ClassCastException invece di IllegalArgumentException se qualsiasi oggetto di pressione di tasto passato non è un AWTKeyStroke. No
Cambiamento del comportamento nei metodi di suddivisione java.lang.String e java.util.regex.Pattern In Java 8, il comportamento dei metodi split potrebbe portare alla rimozione della String vuota che è presente all'inizio dell'array di restituzione. No
Cambiamento del comportamento nella formattazione del nome del mese per alcune lingue In Java 8, quando si formattano i valori data-ora utilizzando le classi DateFormat e SimpleDateFormat, i nomi del mese sensibili al contesto sono supportati per le lingue che hanno una formattazione della data differente e dei formati autonomi di nomi del mese. Si potrebbe riscontrare una differenza nel nome del mese restituito nelle stringhe formattate dalle classi DateFormat o SimpleDateFormat o dai metodi sulla classe DateFormatSymbols. No
Cambiamento del comportamento nella maggior parte delle implementazioni di Collection.removeAll e Collection.retainAll Nelle versioni anteriori a Java 8, la maggior parte delle implementazioni di Collection.removeAll(Collection) e retainAll(Collection) restituisce false e ignora un parametro null se la raccolta stessa è vuota. In Java 8, le raccolte generano una NullPointerException se viene fornito null come parametro. No
Cambiamento del comportamento nella creazione di una nuova istanza per le interfacce non pubbliche In Java 8, è necessaria una modifica del codice per creare un'istanza proxy per le interfacce non pubbliche che si trovano in un package differente utilizzando i metodi Proxy.getProxyClass e Constructor.newInstance. No
Cambiamento del comportamento nell'arrotondamento nei metodi di formattazione NumberFormat e DecimalFormat In Java 8, il comportamento dell'arrotondamento dei metodi di formato NumberFormat e DecimalFormat è cambiato per corrispondere all'arrotondamento della rappresentazione binaria del numero. No
Cambiamento del comportamento nel metodo BigDecimal stripTrailingZeros per il valore zero Java 8 introduce un cambiamento di comportamento quando java.math.BigDecimal stripTrailingZeros opera su un valore zero con una scala non zero. No
Cambiamento del comportamento nella costruzione di classi proxy dinamiche In Java 8, il richiamo di java.lang.reflect.Proxy(InvocationHandler) con un parametro null genera una NullPointerException. Nelle versioni antecedenti a Java 8, il costruttore restituisce un proxy, ma qualsiasi chiamata di metodo su tale proxy genera una NullPointerException. No
Le classi che implementano l'interfaccia TypeVisitor devono implementare il metodo TypeVisitor.visitIntersection( ) Questa regola rileva e contrassegna le classi Java che implementano questa interfaccia ma non implementano il metodo visitIntersection(IntersectionType t, P p). Qualsiasi classe senza il metodo visitIntersection che implementa direttamente questa interfaccia Java non verrà compilata. No
Il costruttore DatagramPacket con SocketAddress non dichiara più SocketException In Java 8, i costruttori java.net.DatagramPacket sono stati modificati per rimuovere la dichiarazione SocketException. Questa regola contrassegna i costruttori java.net.DatagramPacket che accettano un argomento java.net.SocketAddress quando i costruttori si trovano in un blocco try che rileva una java.net.SocketException o la sua superclasse java.io.IOException. No
Rilevare MBeans e MXBeans registrati o istanziati Questa regola contrassegna le interfacce MBean o MXBean che non sono pubbliche, come richiesto da Java 8. Segnala inoltre le chiamate a registerMBean o createMBean per evidenziare potenziali problemi di visibilità dell'interfaccia. No
Differenze nel caricamento delle classi da parte dei provider dei servizi JAXP Java 8 include JAXP (Java API for XML Processing) 1.6, che gestisce il caricamento delle classi per i provider dei servizi in modo diverso rispetto alle versioni precedenti. No
Le interfacce MBean e MXBean devono essere pubbliche Java 8 applica il requisito che le interfacce di gestione MBean e MXBean siano pubbliche. Non le interfacce non pubbliche non possono esporre la funzionalità di gestione. Questo requisito della specifica non è stato applicato in Java 7 e nelle versioni precedenti. java-version-8.yml
org.openrewrite.java.migrate.MXBeanRule
Nuovi metodi in java.util.concurrent.ConcurrentHashMap In Java 8, la classe ConcurrentHashMap ha introdotto più di 30 nuovi metodi. Se si estende la classe java.util.concurrent.ConcurrentHashMap, la classe utilizzata potrebbe richiedere delle modifiche. No
Il meccanismo per selezionare un provider del servizio locale è cambiato In Java 8, il meccanismo per selezionare un provider del servizio locale è stato modificato. Un nuovo metodo nella classe LocaleServiceProvider consente alle implementazioni di determinare se la locale fornita è supportata. No
Non utilizzare le API del package sun.io Le API sun.io.* sono state eliminate in Java SE 8. Sostituire o rimuovere questa API. No
java.lang.Thread.stop(java.lang.Throwable) è disabilitato Questa regola segnala il metodo java.lang.Thread.stop(java.lang.Throwable) invocations.When si invoca questo metodo, che ora lancia un UnsupportedOperationException. No

Impatti sulla compatibilità di J2SE 7

Tabella 7. Impatti sulla compatibilità di J2SE 7
Nome regola Descrizione regola Correzione automatica
Ricerca di una modifica del comportamento nei metodi TreeSet add e TreeMap put vuoti Questa regola contrassegna l'utilizzo di java.util.TreeSet o java.util.TreeMap. A seconda della configurazione della regola, il costruttore o i metodi add()/put() di queste classi verranno contrassegnati. In Java 7 è stato aggiunto un nuovo comportamento per questi metodi. No
Ricerca di una modifica del comportamento nel gestore eccezioni AWT Questa regola contrassegna il valore letterale stringa sun.awt.exception.handler. Un nuovo meccanismo di gestione delle eccezioni è stato aggiunto in Java 7. No
Ricerca di una modifica del comportamento nei metodi File setReadOnly, setWritable e canWrite Questa regola bandiva i metodi java.io.File setReadOnly(), setWritable(boolean arg) e setWritable(boolean arg, boolean user). In Java 7 è stato aggiunto un nuovo comportamento per questi metodi. No
Ricerca di una modifica del comportamento nel metodo URLConnection, HttpURLConnection getInputStream Questa regola bandiva il metodo getInputStream() su URLConnection o HttpURLConnection. Questo metodo ha un nuovo comportamento in Java 7. No
Ricerca di una modifica del comportamento nei metodi DatagramChannel send, receive e connect Questa regola contrassegna le chiamate ai metodi java.nio.channels.DatagramChannel send, receive e connect che hanno un nuovo comportamento in Java 7. No
Ricerca di una modifica al comportamento nei metodi isLowerCase e isUpperCase Questa regola contrassegna i metodi isLowerCase e isUpperCase. È molto difficile che il cambiamento di comportamento di questi metodi possa influire sull'applicazione. No
Ricerca di una modifica del comportamento nel metodo Locale getDefault Questa regola contrassegna le chiamate al metodo java.util.Locale getDefault() poiché ha un nuovo comportamento. No
Ricerca di una modifica del comportamento nel metodo MouseEvent getButton Questa regola contrassegna le istanze del metodo java.awt.event.MouseEvent getButton() poiché ha un nuovo comportamento. No
Ricerca di una modifica del comportamento nel metodo ThreadGroup setMaxPriority Questa regola contrassegna il metodo setMaxPriority su un oggetto ThreadGroup. Il comportamento del metodo è cambiato in JDK 7. No
Ricerca di una modifica del comportamento nel metodo Toolkit getPrintJob Questa regola contrassegna le istanze del metodo java.awt.Toolkit getPrintJob(...) poiché ha un nuovo comportamento. No
Ricerca di una modifica del comportamento nel metodo Window setBackground Questa regola contrassegna le chiamate al metodo java.awt.Window setBackground() poiché il suo comportamento è stato modificato mediante la generazione di una nuova eccezione. No
Ricerca delle classi che implementano l'interfaccia TypeVisitor Questa regola contrassegna le classi che implementano l'interfaccia javax.lang.model.type.TypeVisitor. In Java SE 7, è stato aggiunto un nuovo metodo a questa interfaccia. No
Ricerca di nuovi metodi nelle interfacce JDBC Questa regola rileva le classi che implementano le interfacce JDBC che hanno aggiunto nuovi metodi. Le interfacce includono java.sql.Connection, java.sql.Driver, java.sql.Statement e javax.sql.CommonDataSource. java-version-7.yml
org.openrewrite.java.migrate.JREJdbcInterfaceNewMethods
Non definire i metodi dichiarati come final in java.lang.Throwable

Questa regola rileva le classi che estendono java.lang.Throwable che implementano i metodi addSuppressed e getSuppressed che erano stati aggiunti come nuovi metodi final in Java 7.

java-version-7.yml
org.openrewrite.java.migrate.JREThrowableFinalMethods
Non sostituire i metodi Path2D getPathIterator Questa regola contrassegna i metodi Path2D getPathIterator. Questi metodi sono ora indicati come final in Java 7. No
Non utilizzare la classe rimossa XSLTProcessorApplet Questa regola rileva l'utilizzo della classe org.apache.xalan.client.XSLTProcessorApplet. Questa classe è stata rimossa dalla release JDK 7. No
Non utilizzare la classe LinkedHashMap.Entry Questa regola contrassegna gli utilizzi della classe java.util.LinkedHashMap.Entry poiché non è più accessibile in Java SE 7. No

Impatti sulla compatibilità di J2SE 6

Tabella 8. Impatti sulla compatibilità di J2SE 6
Nome regola Descrizione regola Correzione automatica
Verifica della logica dell'eccezione nelle chiamate a EventHandler

In Java SE 6, il costruttore EventHandler e i metodi create() richiedono che vengano passati dei parametri non null. Questa regola contrassegna il costruttore e le chiamate del metodo create() in modo da consentire di verificare che la logica utilizzata gestisca correttamente una NullPointerException.

No
Verifica la compatibilità del metodo Duration e XMLGregorianCalendar equals()

Rilevare l'utilizzo del metodo Duration e XMLGregorianCalendar equals (). Java 6 adesso restituisce false se il parametro trasmesso è null. In precedenza è stata generata l'eccezione NullPointerException.

No
Ricerca di nuovi metodi nelle interfacce Java SQL

L'interfaccia java.sql.Wrapper è stata aggiunta come super-interfaccia a diverse interfacce Java SQL. Quando si passa a Java 6, i metodi mancanti devono essere aggiunti alle classi che implementano le interfacce aggiunte da java.sql.Wrapper.

java-version-6.yml
org.openrewrite.java.migrate.JREWrapperInterface
Ricerca di OverlappingFileLockException per il metodo FileChannel lock()

In Java SE 6, il metodo FileChannel.lock() ora genera OverlappingFileLockException. Questa regola contrassegna le chiamate del metodo lock() con un blocco catch per OverlappingFileLockException o senza una dichiarazione throws per OverlappingFileLockException sul metodo.

No
Non utilizzare la doppia barra negli elementi JMX ObjectName

Rileva l'utilizzo della stringa di caratteri a doppia barra ("//") in ObjectNames di JMX.

No

Impatti sulla compatibilità da Oracle a IBM

Eseguire le seguenti regole quando si migra la propria applicazione da un Oracle Java Runtime Environment a un IBM Java Runtime Environment. Se si sta eseguendo un server Liberty utilizzando un Oracle Java Runtime, non eseguire le correzioni rapide per queste regole.

Tabella 9. Impatti sulla compatibilità da Oracle a IBM
Nome regola Descrizione regola Correzione automatica
Rilevare i package com.sun.net.ssl.internal Questa regola contrassegna le istruzioni di importazione di specifici package com.sun.net.ssl.internal nei file Java che non sono disponibili e non si devono utilizzare. No
Non utilizzare API dei package com.sun.net.ssl Questa regola rileva le classi e le interfacce nel pacchetto com.sun.net.ssl sono state sostituite da classi e interfacce nel pacchetto javax.net.ssl . ibm-java.yml
org.openrewrite.java.migrate.JREDoNotUseSunNetSslAPIs
Non utilizzare le classi interne JAXP com.sun.org.apache Questa regola contrassegna le classi JAXP Sun interne che non sono disponibili in IBM Java Runtime Environment. No
Non utilizzare il nomi dei package JAXP com.sun.org.apache nei valori stringa letterali Questa regola rileva i nomi di package com.sun.org.apache JAXP 1.3 che sono utilizzati nei valori letterali stringa. No
Non utilizzare la classe com.sun.net.ssl.internal.ssl.Provider Questa regola contrassegna la classe com.sun.net.ssl.internal.ssl.Provider che deve essere sostituita da com.ibm.jsse.IBMJSSEProvider. ibm-java.yml
org.openrewrite.java.migrate.JREDoNotUseSunNetSslInternalSslProvider
Non utilizzare la classe com.sun.net.ssl.internal.www.protocol.https.Handler Questa regola contrassegna la classe com.sun.net.ssl.internal.www.protocol.https.Handler che deve essere sostituita da com.ibm.net.ssl.www2.protocol.https.Handler. ibm-java.yml
org.openrewrite.java.migrate.JREDoNotUseSunNetSslInternalWwwProtocolHttpsHandler
Non utilizzare il package com.sun.net.ssl.internal.www.protocol Questa regola segnala i riferimenti del pacchetto com.sun.net.ssl.internal.www.protocol che dovrebbero essere sostituiti da com.ibm.net.ssl.www2.protocol. ibm-java.yml
org.openrewrite.java.migrate.JREDoNotUseSunNetSslInternalWwwProtocol

API interne Sun

Eseguire queste regole solo quando si sta eseguendo la migrazione della propria applicazione da un Oracle Java Runtime Environment a un IBM Java Runtime che contiene la classe IBM. Ad esempio, HP-UX and Solaris Java Runtime Environment fornito con WebSphere Application Server non contiene la classe. Questa regola non è selezionata automaticamente da alcuna serie di regole.

Tabella 10. API interne Sun
Nome regola Descrizione regola Correzione automatica
Non utilizzare le API del package sun.security.x509 Le classi e le interfacce nel package sun.security.x509 sono sostituite dalle classi e dalle interfacce nel package com.ibm.security.x509 package su alcuni sistemi operativi. No