Migracja wersji środowiska Java SE
W zestawie reguł Przegląd kodu Java kategoria Migracja Java SE zawiera reguły migracji z wersji J2SE 1.4, J2SE 5.0, Java SE 6, Java SE 7, Java SE 8 lub Java SE 11. Cele migracji Java to Java SE 8, 11 i 17.
Kategoria Wpływ na kompatybilność z językiem Java firmy IBM zawiera zestaw reguł do migrowania interfejsów API Sun, które nie są dostępne w środowisku IBM Java Runtime Environment. Jeśli jest to możliwe, reguły migrują kod w celu użycia klas javax.net lub com.ibm.net.ssl .
Wybrane reguły zależą od wyboru źródłowego środowiska Java Runtime Environment, do którego aplikacja była wcześniej używana, oraz do wersji produktu WebSphere , do której wykonywana jest migracja. W przypadku Liberty można wybrać język Java SE 8, 11 lub 17 jako cel. W przypadku produktu WebSphere traditional należy przeprowadzić migrację do środowiska Java SE 8.
Szybkie poprawki są dostępne tam, gdzie jest to możliwe. Reguły bez szybkich poprawek są oznaczane przez naruszenia reguł, dzięki czemu można ocenić ich użycie i ręcznie przeprowadzić migrację kodu, jeśli jest to konieczne.
Wpływ na kompatybilność ze środowiskiem J2SE 5.0
| Nazwa reguły | Szybka poprawka | Wykonana czynność |
|---|---|---|
| Sprawdzenie, czy użycie interfejsów API JAXP jest kompatybilne | Nie | Interfejsy API JAXP używane w środowisku JRE 1.4.2 mogą powodować problemy z kompatybilnością, gdy są używane w środowisku JRE 5. Ta reguła umożliwia wykrycie importowania wszystkich pakietów związanych z JAXP, aby można było sprawdzić składnię. |
| Sprawdzenie, czy wyjątek zgłaszany przez metodę EntityResolver.resolveEntity() interfejsu JAXP jest kompatybilny | Nie | Program JAXP EntityResolver.resolveEntity(String, String) zgłasza teraz wyjątek IOException oprócz wyjątku SAXException. Ta reguła wykrywa brakujący wyjątek IOException. |
| Sprawdzenie nowych interfejsów API JAXP DOM | Nie | Nowe interfejsy API JAXP DOM zostały dodane do następujących interfejsów:
Ta reguła umożliwia wykrycie klas, które implementują dowolny z tych interfejsów, i ich flag, tak aby można było dodać nowe interfejsy. |
| Sprawdzenie kompatybilności serializacji obiektów Java | Nie | Serializacja nie jest spójna między językiem Java 1.4 i Java 5.0. Ta reguła wykrywa klasy, które implementują java.io.Serializable bez pola serialVersionUID . |
| Nie należy tworzyć bezpośrednich odwołań do klas dostawcy IBMJSSEFIPS | Nie | Dostawca IBMJSSEFIPS został uwzględniony w obsłudze przez IBMJSSE2. Odwołania do klas poprzedniego dostawcy, com.ibm.fips.*, muszą zostać usunięte. Ta reguła wykrywa użycie odwołań do pakietów com.ibm.fips. |
| Nie należy używać interfejsów API z pakietów com.ibm.net.ssl | Tak | Klasy i interfejsy w pakiecie com.ibm.net.ssl zostały zastąpione przez klasy i interfejsy w pakiecie javax.net.ssl . Ta reguła umożliwia wykrycie użycia dowolnego odwołania do produktu com.ibm.net.ssl packages. Szybka poprawka zmienia nazwy pakietów com.ibm.net.ssl na javax.net.ssl. |
| Nie używaj interfejsów API z sun.* pakiety | Nie | Niektóre funkcje API w pakietach sun.* zostały zmienione w środowisku JRE 5 i mają problemy ze zgodnością ze środowiskiem JRE 1.4.2. Te interfejsy API nie są przeznaczone do użycia przez programistów. Ta reguła umożliwia wykrycie użycia odwołań do pakietów produktu sun.* . |
| Nie należy używać klas wewnętrznych JAXP 1.1 | Nie | Wewnętrzne klasy interfejsu JAXP zostały zmienione. Tych klas wewnętrznych nie należy używać w następujących pakietach:
Ta reguła umożliwia wykrycie korzystania z tych pakietów i ich oznaczenie. |
| Nie używaj nazw pakietów JAXP 1.1 w literałach łańcuchowych | Nie | Niektóre nazwy pakietów implementacji zmieniły się między wersjami JAXP 1.1 i JAXP 1.3. Ta reguła umożliwia wykrycie nazw pakietów JAXP 1.1 używanych w literałach łańcuchowych. |
| Nie należy używać usuniętych interfejsów API dostawcy IBMJSSE | Nie | Podczas konwersji z IBMJSSE do IBMJSSE2 usunięto dwie klasy JSSE. Ta reguła umożliwia wykrycie użycia odwołań do produktów com.ibm.jsse. KeyManagerFactoryParametersSpec i com.ibm.jsse.SSLContext. Ponieważ produkt com.ibm.net.ssl. KeyManagerFactoryParametersSpec został zmigrowany do wersji com.ibm.jsse. KeyManagerFactoryParametersSpec , a następnie usunięty z użycia, produkt com.ibm.net.ssl. KeyManagerFactoryParametersSpec jest również wykrywany z tą regułą. |
| Nie należy używać słowa zastrzeżonego enum języka Java | Nie | Począwszy od wersji Java 5.0, enum jest zastrzeżonym typem Java i nie może być już używany jako nazwa zmiennej. Jeśli w kodzie używane są zmienne o nazwie enum, nazwy muszą zostać zmienione. Ta reguła wykrywa zmienne i argumenty o nazwie enum. |
| Jawne użycie metody toPlainString() klasy BigDecimal podczas uzyskiwania wartości łańcuchowej | Nie | Metoda BigDecimal toString() zachowuje się inaczej niż we wcześniejszych wersjach. Program J2SE 5.0 dodał produkt toPlainString() do produktu BigDecimal, który zachowuje się jak metoda toString() we wcześniejszych wersjach. Ta reguła umożliwia wykrycie niejawnego użycia metody toString() w klasie. |
| Użycie metody toPlainString() klasy BigDecimal zamiast metody toString() | Tak | Metoda BigDecimal toString() zachowuje się inaczej niż we wcześniejszych wersjach. Program J2SE 5.0 dodał produkt toPlainString() do produktu BigDecimal, który zachowuje się jak metoda toString() we wcześniejszych wersjach. Szybka poprawka zmienia toString na toPlainString. |
| Użycie dostawcy IBMJSSE2 | Tak | Podczas konwersji z IBMJSSE do IBMJSSE2 dostawców IBMJSSEProvider i JSSEProvider zastąpiono dostawcą IBMJSSEProvider2. Ta reguła umożliwia wykrycie użycia odwołań do klas com.ibm.jsse.IBMJSSEProvider i com.ibm.jsse.JSSEProvider . Szybka poprawka powoduje zmianę odwołania do produktu com.ibm.jsse2.IBMJSSEProvider2. |
Wpływ na kompatybilność ze środowiskiem Java SE 6
| Nazwa reguły | Szybka poprawka | Wykonana czynność |
|---|---|---|
| Sprawdź logikę wyjątku dla wywołań funkcji EventHandler . | Nie | W języku Java SE 6: konstruktor EventHandler i metody create() wymagają przekazywania parametrów o wartości innej niż NULL. Ta reguła powoduje oznaczenie flagą wywołań konstruktora i metody create() , dzięki czemu możliwe jest sprawdzenie, czy logika poprawnie obsługuje wyjątek NullPointer. |
| Sprawdzanie zgodności typu Duration i XMLGregorianCalendar equals () | Nie | Wykryj użycie metody Duration i XMLGregorianCalendar equals (). W środowisku Java 6 obecnie zwracana jest wartość false, jeśli przekazany parametr ma wartość NULL. Poprzednio zgłaszany był wyjątek NullPointerException. |
| Sprawdzenie użycia nowych metod w interfejsach Java SQL | Nie | Interfejs java.sql.Wrapper został dodany jako nadinterfejs do kilku interfejsów Java SQL. Przy przejściu do środowiska Java 6 brakujące metody należy dodać do klas implementujących interfejsy, w których dodano klasę java.sql.Wrapper. |
| Sprawdzenie wyjątku OverlappingFileLockException w metodzie lock() klasy FileChannel | Nie | W środowisku Java SE 6 metoda FileChannel.lock() zgłasza teraz OverlappingFileLockException. Ta reguła powoduje oznaczenie flagą wywołań metody lock() bez bloku catch dla OverlappingFileLockException lub bez deklaracji throws dla OverlappingFileLockException w metodzie. |
| Usunięcie użycia podwójnych ukośników w elementach JMX ObjectName. | Nie | Wykryj użycie łańcucha znaków podwójnego ukośnika ("//") w JMX ObjectNames. |
Wpływ na kompatybilność ze środowiskiem Java SE 7
| Nazwa reguły | Szybka poprawka | Wykonana czynność |
|---|---|---|
| Sprawdzenie, czy nie zmieniło się działanie metody add klasy TreeSet i metody put klasy TreeMap w przypadku pustego obiektu | Nie | Ta reguła powoduje oznaczenie wystąpień użycia klasy java.util.TreeSet lub java.util.TreeMap. W zależności od konfiguracji reguły, albo konstruktor, albo metody add () /put () tych klas zostaną oznaczone flagą. W środowisku Java 7 zmieniło się działanie tych metod. |
| Sprawdzenie, czy nie zmieniło się działanie procedury obsługi wyjątków AWT | Nie | Ta reguła powoduje oznaczenie literału łańcuchowego sun.awt.exception.handler. W środowisku Java 7 został dodany nowy mechanizm obsługi wyjątków. |
| Sprawdzenie, czy nie zmieniło się działanie metod setReadOnly, setWritable i canWrite klasy File | Nie | Ta reguła powoduje oznaczenie flagą metod java.io.File setReadOnly(), setWritable(boolean arg) i setWritable(boolean arg, boolean
user). W środowisku Java 7 zmieniło się działanie tych metod. |
| Sprawdzenie, czy nie zmieniło się działanie metody getInputStream klas HttpURLConnection i URLConnection | Nie | Ta reguła powoduje oznaczenie flagą metody getInputStream() na serwerze URLConnection lub HttpURLConnection. W środowisku Java 7 działanie tej metody zostało zmienione. |
| Sprawdzenie, czy nie zmieniło się działanie metod send, receive i connect klasy DatagramChannel | Nie | Ta reguła powoduje oznaczenie wywołań metod java.nio.channels.DatagramChannel send, receivei connect , które mają nowe zachowanie w środowisku Java 7. |
| Sprawdzanie zmiany zachowania w metodach isLowerCase i isUpperCase. | Nie | Ta reguła powoduje oznaczenie flagą metod isLowerCase i isUpperCase . Istnieje niewielkie prawdopodobieństwo, że wprowadzona zmiana działania tych metod może mieć wpływ na aplikację. |
| Sprawdzenie, czy nie zmieniło się działanie metody getDefault klasy Locale | Nie | Ta reguła powoduje oznaczenie wywołań metody getDefault() klasy java.util.Locale, ponieważ jej działanie zostało zmienione. |
| Sprawdzenie, czy nie zmieniło się działanie metody getButton klasy MouseEvent | Nie | Ta reguła powoduje oznaczenie wystąpień instancji metody java.awt.event.MouseEvent getButton() , ponieważ ma ona nowe zachowanie. |
| Sprawdzenie, czy nie zmieniło się działanie metody setMaxPriority klasy ThreadGroup | Nie | Ta reguła powoduje oznaczenie flagą metody setMaxPriority w obiekcie ThreadGroup . Działanie metody zostało zmienione w pakiecie JDK 7. |
| Sprawdzenie, czy nie zmieniło się działanie metody getPrintJob klasy Toolkit | Nie | Ta reguła powoduje oznaczenie wystąpień instancji metody java.awt.Toolkit getPrintJob(...) , ponieważ ma ona nowe zachowanie. |
| Sprawdzenie, czy nie zmieniło się działanie metody setBackground klasy Window | Nie | Ta reguła powoduje oznaczenie wystąpień wywołania metody java.awt.Window setBackground() , ponieważ jej zachowanie zostało zmienione przez zgłaszanie nowego wyjątku. |
| Sprawdzanie klas implementujących interfejs TypeVisitor | Nie | Ta reguła powoduje oznaczenie klas implementujących interfejs javax.lang.model.type.TypeVisitor . W środowisku Java SE 7 do tego interfejsu dodano nową metodę. |
| Sprawdzenie użycia nowych metod w interfejsach JDBC | Nie | Ta reguła umożliwia wykrycie klas, które implementują interfejsy JDBC , które dodają nowe metody. Interfejsy to: java.sql.Connection, java.sql.Driver, java.sql.Statementi javax.sql.CommonDataSource. |
| Nie należy definiować metod zadeklarowanych jako final w klasie java.lang.Throwable | Nie | Ta reguła wykrywa klasę rozszerzając java.lang.Throwable , która implementuje metody addSuppressed i getSuppressed , które zostały dodane jako nowe metody final w środowisku Java 7. |
| Nie należy przesłaniać metod getPathIterator klasy Path2D | Nie | Ta reguła powoduje oznaczenie flagą metod Path2D getPathIterator . Te metody są teraz oznaczone jako final w języku Java 7. |
| Nie należy używać usuniętej klasy XSLTProcessorApplet | Nie | Ta reguła wykrywa użycie klasy org.apache.xalan.client.XSLTProcessorApplet. Ta klasa została usunięta z pakietu JDK 7. |
| Nie należy używać klasy LinkedHashMap.Entry | Tak | Ta reguła powoduje oznaczenie użycia klasy java.util.LinkedHashMap.Entry, ponieważ nie jest ona już dostępna w środowisku Java SE 7. |
Wpływ na kompatybilność ze środowiskiem Java SE 8
Środowisko Java 8 jest obsługiwane na serwerze Liberty i na serwerze WebSphere Application Server tradycyjnym V8.5.5.9 i nowszych.
| Nazwa reguły | Szybka poprawka | Wykonana czynność |
|---|---|---|
| Zmiana zachowania w wyjątkach zgłaszanych podczas ustawiania klawiszy traversal w AWT | Nie | W środowisku Java 8 metody java.awt.Component setFocusTraversalKeys i java.awt.KeyboardFocusManager setDefaultFocusTraversalKeys zgłaszają ClassCastException zamiast IllegalArgumentException , jeśli żaden przekazany obiekt keystroke nie jest AWTKeyStroke. |
| Zmiana działania metod split klas java.lang.String i java.util.regex.Pattern | Nie | W środowisku Java 8 zachowanie metod split może prowadzić do usunięcia pustego String , który jest obecny na początku tablicy zwracanej. |
| Zmiana działania w formatowaniu nazw miesięcy w niektórych językach | Nie | W środowisku Java 8 podczas formatowania wartości daty i godziny przy użyciu klas DateFormat i SimpleDateFormat nazwy miesięcy kontekstowych są obsługiwane dla języków, które mają różne formatowanie dat i autonomiczne formy nazw miesięcy. Różnica w nazwie miesiąca może być zwracana w łańcuchach sformatowanych przez klasy DateFormat lub SimpleDateFormat lub przez metody w klasie DateFormatSymbols . |
| Zmiana działania w większości implementacji metod Collection.removeAll i Collection.retainAll | Nie | W wersjach wcześniejszych niż Java 8 większość implementacji produktów Collection.removeAll(Collection) i retainAll(Collection) zwraca wartość false i ignoruje parametr null, jeśli sama kolekcja jest pusta. W środowisku Java 8 kolekcje zgłaszają NullPointerException , jeśli jako parametr podano wartość NULL. |
| Zmiana działania podczas tworzenia nowych instancji interfejsów niepublicznych | Nie | W środowisku Java 8 konieczna jest zmiana kodu w celu utworzenia instancji proxy dla niepublicznych interfejsów znajdujących się w innym pakiecie przy użyciu metod Proxy.getProxyClass i Constructor.newInstance . |
| Zmiana działania zaokrąglania w metodach formatujących NumberFormat i DecimalFormat | Nie | W języku Java 8 zachowanie zaokrąglania metod w formacie NumberFormat i DecimalFormat zostało zmienione w taki sposób, aby były zgodne z zaokrąglaniem reprezentacji binarnej liczby. |
| Zmiana działania metody stripTrailingZeros klasy BigDecimal w przypadku wartości zerowej | Nie | Środowisko Java 8 wprowadza zmianę zachowania, gdy program java.math.BigDecimal
stripTrailingZeros działa na zerowej wartości z niezerową skalą. |
| Zmiana działania w konstruktorze dynamicznych klas proxy | Nie | W środowisku Java 8 wywołanie funkcji java.lang.reflect.Proxy(InvocationHandler) z parametrem null powoduje zgłoszenie NullPointerException. W wersjach wcześniejszych niż Java 8 konstruktor zwraca proxy, ale wszystkie wywołania metody dla tego proxy zgłaszają NullPointerException. |
| Sprawdzenie klas implementujących interfejs TypeVisitor | Nie | Java 8 dodała nową metodę do interfejsu javax.lang.model.type.TypeVisitor . Ta reguła powoduje oznaczenie klas, które implementują ten interfejs. |
| Konstruktor DatagramPacket z SocketAddress nie deklaruje już wyjątku SocketException | Nie | W środowisku Java 8 konstruktory java.net.DatagramPacket zostały zmienione w celu usunięcia deklaracji SocketException . Ta reguła oznacza konstruktory java.net.DatagramPacket , które akceptują argument java.net.SocketAddress , gdy konstruktory znajdują się w bloku try, który wychwyci java.net.SocketException lub jego nadklasę java.io.IOException. |
| Różnice w ładowaniu klas w przypadku dostawców usług JAXP | Nie | Środowisko Java 8 udostępnia interfejs Java API for XML Processing (JAXP) 1.6, który obsługuje ładowanie klas dla dostawców usług w inny sposób niż w poprzednich wersjach. |
| java.lang.Thread stop (java.lang.Throwable) jest wyłączony | Nie | W środowisku Java 8 metoda java.lang.Thread.stop(java.lang.Throwable) jest wyłączona. |
| Interfejsy MBean i MXBean muszą być publiczne | Tak | Środowisko Java 8 wymusza wymaganie, aby interfejsy zarządzania MBean i MXBean były publiczne. W interfejsach niepublicznych niedozwolone jest udostępnianie funkcji zarządzania. To wymaganie specyfikacji nie było wymuszane w środowisku Java 7 i wcześniejszych wersjach. |
| Nowe metody w klasie java.util.concurrent.ConcurrentHashMap | Nie | W środowisku Java 8 klasa ConcurrentHashMap wprowadziła ponad 30 nowych metod. Jeśli klasa java.util.concurrent.ConcurrentHashMap zostanie rozszerzona, konieczna może być zmiana klasy. |
| Mechanizm wyboru dostawcy usług ustawień narodowych został zmieniony | Nie | W środowisku Java 8 został zmieniony mechanizm wyboru dostawcy usług ustawień narodowych. Nowa metoda w klasie LocaleServiceProvider umożliwia implementację pozwalającą sprawdzić, czy dane ustawienia narodowe są obsługiwane. |
Wpływ na kompatybilność ze środowiskiem Java SE 11
Środowisko Java 11 jest obsługiwane w produkcie Liberty v19.0.0.1 i nowszych.
| Nazwa reguły | Szybka poprawka | Wykonana czynność |
|---|---|---|
| Unikaj używania nieaktualnej klasy RMIIIOPServerImpl | Nie | Ta reguła powoduje oznaczenie wystąpień użycia klasy RMIIIOPServerImpl . Ta klasa jest nieaktualna w środowisku Java SE 11. |
| Zmiana działania związana z domyślnymi danymi ustawień narodowych | Nie | W środowisku Java 11 repozytorium CLDR (Common Locale Data Repository) konsorcjum Unicode jest włączone jako domyślne dane ustawień narodowych. We wcześniejszych wersjach środowisko JRE (obecnie znane jako COMPAT) było ustawione jako domyślne dane ustawień narodowych. Kod korzystający z usług zależnych od ustawień narodowych, takich jak formatowanie dat, czasu i liczb, może dawać różne wyniki w przypadku użycia danych ustawień narodowych CLDR. |
| Zmiana w działaniu wyjątków w przypadku wywołania metody Class.getAnnotation() | Nie | W języku Java 11 metoda java.lang.Class.getAnnotation() zgłasza java.lang.TypeNotPresentException zamiast java.lang.ArrayStoreException , jeśli adnotacja ma tablicę, która odwołuje się do brakującej klasy. |
| Zmiana zachowania w klasie java.util.concurrent.ThreadPoolExecutor. Metoda finalize () | Nie | W języku Java 11 metoda java.util.concurrent.ThreadPoolExecutor.finalize() nie wyłącza już puli wątków. |
| Zmiana zachowania w klasie java.lang.invoke.MethodHandles. Metoda filterArguments | Nie | Ta reguła powoduje oznaczenie aplikacji, które korzystają z metody java.lang.invoke.MethodHandles.filterArguments . |
| Zmiana w działaniu konstruktora javax.management.MBeanOperationInfo | Nie | Ta reguła powoduje oznaczenie aplikacji, które korzystają z konstruktora javax.management.MBeanOperationInfo , jeśli podany wpływ nie jest jednym z informacji INFO, ACTION, ACTION_INFO lub UNKNOWN. |
| Zmiana w działaniu metod interfejsów API (java.xml) o typie surowym | Nie | W języku Java 11 funkcje API produktu java.xml zawierające deklaracje metod z typami surowymi zostały zaktualizowane w celu dodania parametru typu. |
| Sprawdź, czy występują zmiany w działaniu związane z metodami select i selectNow klasy Selector | Nie | Ta reguła powoduje oznaczenie flagą metod java.nio.channels.Selector.select() i java.nio.channels.Selector.selectNow() . W środowisku JDK 11 działanie tych metod uległo zmianie. |
| Sprawdź, czy występują zmiany w działaniu związane z oddzieleniem blokujących i nieblokujących ścieżek kodu na potrzeby kanałów we/wy | Nie | W środowisku Java 11 utworzono osobne ścieżki kodu (blokujące i nieblokujące) na potrzeby kanałów we/wy w celu zwiększenia wydajności i niezawodności. Ta reguła oznacza wywołania interfejsów API, na które może mieć wpływ ta zmiana w działaniu. |
| Sprawdź zmiany konfiguracji związane z com.ibm.security.auth.module. Klasa Krb5LoginModule | Nie | Ta reguła powoduje oznaczenie wszystkich odwołań do klas powiązanych z produktem com.ibm.security.auth.module.Krb5LoginModule , które mogą wymagać zmian w konfiguracji podczas migrowania do środowiska Java 11. |
| Sprawdź, czy w interfejsach Pack200.Packer i Pack200.Unpacker występują usunięte metody | Nie | Produkty addPropertyChangeListener i removePropertyChangeListener nie są już zdefiniowane w interfejsach Pack200.Packer i Pack200.Unpacker w środowisku Java 11. |
| Nie używaj interfejsów API z pakietu com.sun.image.codec.jpeg | Nie | W środowisku Java SE 11 interfejs API pakietu com.sun.image.codec.jpeg nie jest dostępny. |
| Nie należy używać interfejsów API z pliku com.sun.xml.internal.bind.* pakiety | Nie | Interfejsy API w pakietach com.sun.xml.internal.bind.* nie są już dostępne w środowisku Java SE 11. |
| Nie używaj interfejsów API z sun.* pakiety | Nie | Interfejsy API sun.* są nieobsługiwanymi, wewnętrznymi w pakiecie JDK interfejsami API, które mogą zostać usunięte w dowolnym momencie. |
| Nie używaj klasy javax.security.auth.Policy | Nie | W środowisku Java SE 11 klasa javax.security.auth.Policy nie jest dostępna. Ta reguła powoduje oznaczenie wszystkich odwołań do klasy javax.security.auth.Policy . |
| Nie używaj usuniętych klas com.sun | Nie | Ta reguła powoduje oznaczenie klas com.sun , które nie są dostępne w języku Java SE 11. |
| Nie używaj usuniętych metod runFinalizersOnExit | Nie | Metody java.lang.Runtime.runFinalizersOnExit i java.lang.System.runFinalizersOnExit zostały usunięte z Java SE 11. |
| Nie należy używać klasy com.ibm.security.auth.module. Klasa Krb5LoginModule | Nie | Klasa com.ibm.security.auth.module.Krb5LoginModule nie jest dostępna w środowisku Java SE 11. |
| Nie należy używać pliku com.sun.xml.internal.bind.v2. Klasa ContextFactory | Tak | Produkt com.sun.xml.internal.bind.v2.ContextFactory nie jest już dostępny w środowisku Java SE 11. |
| Nie używaj metody getPeer | Nie | Wszystkie metody w interfejsie API języka Java SE, które zwracają klasę z pakietu java.awt.peer , zostały usunięte z Java 11. Aby sprawdzić, czy węzeł sieci został jeszcze ustawiony, należy użyć metody Component.isDisplayable() . Aby przetestować, czy komponent jest lekki, należy użyć metody Component.isLightWeight() . |
| Nie używaj metody klonowania klasy java.lang.ref.Reference | Nie | Metoda klonowania java.lang.ref.Reference nie jest już obsługiwana w środowisku Java 11. |
| Nie używaj protokołu adresu URL netdoc | Nie | Procedura obsługi protokołu netdoc została usunięta ze środowiska Java 11. |
| Nie używaj usuniętych interfejsów API com.sun.java.browser.plugin2.DOM i sun.plugin.dom.DOMObject | Nie | Interfejsy API com.sun.java.browser.plugin2.DOM i sun.plugin.dom.DOMObject nie są dostępne w środowisku Java SE 11. |
| Nie należy używać usuniętego pliku com.sun.java.swing.plaf.nimbus. NimbusLookAndFeel lub apple.laf.AquaLookAndFeel Swing LookAndFeel | Nie | Opłaty com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel i apple.laf.AquaLookAndFeel Swing LookAndnie są już obsługiwane przez metodę javax.swing.UIManager.setLookAndFeel w środowisku Java SE 11. |
| Nie używaj usuniętych metod java.lang.Thread.destroy() i java.lang.Thread.stop(java.lang.Throwable) | Nie | Metody java.lang.Thread.destroy() i java.lang.Thread.stop(java.lang.Throwable) zostały usunięte w środowisku Java SE 11. |
| Nie należy używać usuniętego mechanizmu javax.crypto.ExemptionMechanism. Metoda finalize () | Nie | Metoda javax.crypto.ExemptionMechanism.finalize() została usunięta z Java SE 11. |
| Nie używaj usuniętej adnotacji jdk.Exported | Nie | Adnotacja jdk.Exported nie jest dostępna w środowisku Java SE 11. |
| Nie używaj usuniętych metod addPropertyChangeListener i removePropertyChangeListener klasy LogManager | Nie | Metody addPropertyChangeListener i removePropertyChangeListener nie są dostępne w klasie java.util.logging.LogManager w języku Java 11. |
| Nie używaj usuniętych metod Runtime.getLocalizedInputStream i Runtime.getLocalizedOutputStream | Nie | Metody Runtime.getLocalizedInputStream i Runtime.getLocalizedOutputStream zostały usunięte z Java SE 11. |
| Nie używaj metod usuniętych z klasy SecurityManager | Nie | Ta reguła powoduje oznaczenie metod, które zostały usunięte z klasy java.lang.SecurityManager w środowisku Java SE 11. |
| Zmiana formatu numerów wersji Java 11 | Nie | Począwszy od wersji 11 środowiska Java wprowadzono nową konwencję numerowania wersji. Format numeru wersji zmienił się z 1.8 (Java 8) na 11 (Java 11). |
| Przejrzyj procedurę czyszczenia zasobów pod kątem obecności przesłoniętej metody zamykania (close) klas FileInputStream i FileOutputStream | Nie | Ta reguła powoduje oznaczenie flagą metody close() dla podklas produktów java.io.FileInputStream i java.io.FileOutputStream. |
| Uruchamianie narzędzia Analizator zależności klas Java (JDeps) | Nie | Pakiet JDK jest dostarczany z programem narzędziowym wiersza komend o nazwie jdeps służącym do analizy zależności klas. To narzędzie umożliwia identyfikację wewnętrznych pakietów zawartych w pakiecie JDK, które nie są już dostępne w pakiecie JDK 11. |
| Pakiety java.awt.peer i java.awt.dnd.peer są niedostępne | Nie | Wszystkie metody w interfejsie API języka Java SE, które odwołują się do typów zdefiniowanych w pakietach java.awt.peer i java.awt.dnd.peer , zostały usunięte z języka Java 11. Kod wywołujący metodę, która wcześniej akceptowała lub zwracała typ zdefiniowany w tych
pakietach, nie daje się skompilować ani nie działa w środowisku Java 11. |
| Metoda java.nio.channels.DatagramChannel.send() zgłasza wyjątek AlreadyConnectedException zamiast wyjątku IllegalArgumentException | Nie | Gdy adres przekazywany jest do klasy java.nio.channels.DatagramChannel. Metoda send (ByteBuffer,SocketAddress) jest różna od adresu podłączonego, ta metoda zgłasza AlreadyConnectedException zamiast IllegalArgumentException w środowisku Java SE 11. |
| Klas java.nio.channels.Selector i java.nio.channels.SelectableChannel można bezpiecznie używać w wątkach współbieżnych | Nie | Klasy java.nio.channels.Selector i java.nio.channels.SelectableChannel zostały zaktualizowane tak, aby mogły być bezpiecznie używane w wątkach współbieżnych w środowisku Java SE 11. |
| Moduł java.transaction został usunięty z pakietu JDK 11 | Nie | Ta reguła powoduje oznaczenie flagą aplikacji, które korzystają z pakietów w module javax.transaction . |
| Moduły java.xml.bind i java.activation zostały usunięte z pakietu JDK 11 (implementacja niestandardowa) | Nie | Ta reguła powoduje oznaczenie flagą aplikacji, które korzystają z pakietów w modułach java.xml.bind lub java.activation , oraz pakiet ich własnej implementacji JAXB. |
| Moduły java.xml.bind i java.activation zostały usunięte z pakietu JDK 11 (implementacja domyślna) | Nie | Ta reguła powoduje oznaczenie aplikacji, które korzystają z pakietów w modułach java.xml.bind lub java.activation , a także używają domyślnej implementacji JAXB produktu WebSphere . |
| Moduły platformy JavaFX zostały usunięte z pakietu JDK 11 | Nie | W środowisku Java SE 11 moduły platformy JavaFX nie są dostępne. |
| Wywołania konstruktorów URLClassLoader i metod newInstance() powodują zgłoszenie wyjątku NullPointerException, gdy tablica zawiera element o wartości NULL | Nie | Konstruktory produktu URLClassLoader i wywołania produktu newInstance() zgłaszają NullPointerException , gdy tablica adresów URL zawiera element o wartości NULL w środowisku Java SE 11. |
| Technologia Java Web Start została usunięta z pakietu JDK 11 | Nie | W pakiecie JDK 11 technologia Java Web Start nie jest dostępna. Ta reguła oznacza pliki jnlp w aplikacji. |
| Zmiana zachowania podprogramu ładującego pulę klas wspólnych ForkJoinPool | Nie | Ta reguła oznacza metody, których działanie mogło ulec zmianie w zależności od propagacji podprogramu ładującego klasy kontekstu wątku w aplikacji. |
| Nazwa reguły | Szybka poprawka | Wykonana czynność |
|---|---|---|
| Moduł java.corba został usunięty z pakietu JDK 11 | Nie | Ta reguła powoduje oznaczenie flagą aplikacji, które korzystają z pakietów w module java.corba . |
| Moduł java.xml.ws został usunięty z pakietu JDK 11 (implementacja niestandardowa) | Nie | Ta reguła powoduje oznaczenie flagą aplikacji, które korzystają z pakietów w module java.xml.ws , oraz pakiet ich własnej implementacji JAX-WS. |
| Moduł java.xml.ws został usunięty z pakietu JDK 11 (implementacja domyślna) | Nie | Ta reguła powoduje oznaczenie aplikacji, które korzystają z pakietów w module java.xml.ws , i używają domyślnej implementacji JAX-WS produktu WebSphere . |
Implementacja IBM XML została usunięta ze środowiska Java 11. Więcej informacji na ten temat zawiera sekcja Określanie zgodności aplikacji: XML .
| Nazwa reguły | Szybka poprawka | Wykonana czynność |
|---|---|---|
| Wykryte zależności od pakietów wewnętrznych implementacji IBM XML | Nie | Ta reguła oznacza odwołania do pakietów wewnętrznych implementacji IBM XML. |
| Wykryte odwołania literałów łańcuchowych do parametrów konfiguracyjnych specyficznych dla implementacji IBM XML | Nie | Ta reguła oznacza odwołania literałów łańcuchowych do parametrów konfiguracyjnych specyficznych dla implementacji IBM XML. |
| Wykryte odwołania literałów łańcuchowych do wewnętrznych elementów implementacji IBM XML | Nie | Ta reguła oznacza odwołania literałów łańcuchowych do implementacji IBM XML. |
Wpływ na kompatybilność ze środowiskiem Java SE 17
Środowisko Java 17 jest obsługiwane w produkcie Liberty 21.0.0.10 i nowszych. Wpływ na kompatybilność środowiska Java SE 17 obejmuje wszystkie wpływy kompatybilności z wersji 12 do 17 środowiska Java SE.
| Nazwa reguły | Szybka poprawka | Wykonana czynność |
|---|---|---|
| Zmiana zachowania w metodzie Properties.loadFromXML dla niezgodnych dokumentów XML | Nie | Ta reguła oznacza wywołania metody java.util.Properties.loadFromXML(java.io.InputStream) . Metoda zgłasza wyjątek dla niezgodnych dokumentów XML w środowisku Java SE 12. |
| Zmiana zachowania właściwości systemowej user.timezone | Nie | This rule flags System.getProperty method calls with the user.timezone property value. Ta metoda może zwrócić wartość NULL w środowisku Java SE 12. |
| Nie używaj usuniętych metod FileInputStream.finalize() i FileOutputStream.finalize() | Nie | Metody java.io.FileInputStream.finalize() i java.io.FileOutputStream.finalize() zostały usunięte z języka Java SE 12. |
| Nie używaj klasy com.sun.awt.SecurityWarning | Nie | Klasa com.sun.awt.SecurityWarning została usunięta z języka Java SE 12. |
| Nie używaj usuniętych metod ZipFile.finalize(), Inflater.finalize() i Deflater.finalize() | Nie | Metody java.util.zip.ZipFile.finalize(), java.util.zip.Inflater.finalize() i java.util.zip.Deflater.finalize() zostały usunięte z języka Java SE 12. |
| Nie używaj usuniętych metod Runtime.traceInstructions(boolean) i Runtime.traceMethodCalls(boolean) | Nie | Metody java.lang.Runtime.traceInstructions(boolean) i java.lang.Runtime.traceMethodCalls(boolean) zostały usunięte z Java SE 13. |
| Interfejsy API java.util.jar.Pack200 zostały usunięte | Nie | Klasa java.util.jar.Pack200 została usunięta wraz z interfejsami java.util.jar.Pack200.Packer i java.util.jar.Pack200.Unpacker . |
| Właściwość systemowa sun.nio.cs.map została usunięta | Nie | Właściwość systemowa sun.nio.cs.map została usunięta w wersji Java SE 14. Ta reguła oznacza odwołania do "sun.nio.cs.map" w postaci literału łańcuchowego. |
| Pakiet java.security.acl został usunięty | Nie | Pakiet java.security.acl został usunięty w środowisku Java SE 14, zamiast tego należy użyć klas java.security.Policy . |
| Słabe nazwane krzywe zostały usunięte | Nie | Słabe krzywe nazwane zostały usunięte z dostawcy SunEC w środowisku Java SE 16. Ta reguła oznacza odwołania do dowolnej ze słabych krzywych nazwanych. |
| Sprawdzenie, czy występuje konflikt przestrzeni nazw z nową klasą java.lang.Record | Nie | Klasa java.lang.Record została dodana w języku Java SE 14. Aby uniknąć konfliktu przestrzeni nazw, należy dopilnować, aby wszelkie inne klasy o nazwie "Record" były importowane jako pojedyncze typy (na przykład: "com.foo.Record"), a nie z użyciem symbolu wieloznacznego (na przykład: "com.foo.*"). |
| Metoda netscape.javascript.JSObject.getWindow(Applet) została usunięta | Nie | Metoda netscape.javascript.JSObject.getWindow(Applet) została usunięta w języku Java SE 14. Ponieważ metoda ta była używana tylko z wtyczkami Java, które również zostały usunięte, nie ma zamiennika dla tej metody. |
| Sprawdzenie zmiany zachowania metody DatagramPacket.getPort() | Nie | Domyślna wartość zwracana dla metody DatagramPacket.getPort() została zmieniona z -1 na 0 w Java SE 15. |
| Stała RMIConnectorServer.CREDENTIAL_TYPES została usunięta | Nie | Stała RMIConnectorServer.CREDENTIAL_TYPES została usunięta w środowisku Java SE 15. |
| Implementacja metody SSLSession.getPeerCertificateChain() została usunięta | Nie | Domyślna implementacja metody SSLSession.getPeerCertificateChain() została usunięta w języku Java SE 15. |
| Konstruktory Modifier() i ConstantBootstraps() zostały usunięte | Nie | Konstruktory Modifier() i ConstantBootstraps() zostały usunięte w środowisku Java SE 15. |
| Opcja gniazda SO_FLOW_SLA Solaris została usunięta | Nie | W środowisku Java SE 15 usunięto opcję gniazda systemu SO_FLOW_SLA Solaris oraz powiązane klasy SocketFlow i SocketFlow.Status . |
| Nazwa dostawcy com.sun.net.ssl.internal.ssl.Provider została usunięta | Tak | Wcześniejsza nazwa dostawcy SunJSSE produktu com.sun.net.ssl.internal.ssl.Provider została usunięta w języku Java SE 15. Należy ją zastąpić nazwą dostawcy SunJSSE . |
| Sprawdzenie obecności domyślnej metody isEmpty() w interfejsie java.lang.CharSequence | Nie | Metoda default isEmpty() została dodana do interfejsu java.lang.CharSequence
w środowisku Java SE 15. Klasy, które implementują produkt java.lang.CharSequence i inny interfejs definiujący domyślną metodę isEmpty() , mogą wymagać aktualizacji. |
| Java SE 17 — informacje ogólne i potencjalne problemy | Nie | Ogólne informacje na temat zmian w środowisku Java SE 17 i potencjalnych problemów z migracją, które nie są wykrywane przez to narzędzie. |
| Konstruktor ToolProvider() został usunięty | Nie | Konstruktor ToolProvider został usunięty w środowisku Java SE 16. |
| Unikanie używania nieaktualnych metod w klasie java.lang.Thread i java.lang.ThreadGroup | Nie | Metody suspend i resume w klasie java.lang.Thread oraz metody suspend,
resume i allowThreadSuspension w klasie java.lang.ThreadGroup zostały zdezaktualizowane w wersji Java SE 14. Metody stop, destroy, isDestroyed, setDaemon i isDaemon w klasie java.lang.ThreadGroup zostały oznaczone jako nieaktualne w środowisku Java SE 16. |
| Sprawdzenie obecności domyślnej metody toList() w interfejsie java.util.stream.Stream | Nie | Metoda default toList() została dodana do interfejsu java.util.stream.Stream
w środowisku Java SE 16. Klasy, które implementują produkt java.util.stream.Stream i inny interfejs definiujący domyślną metodę toList() , mogą wymagać aktualizacji. |
| Sprawdzenie zmiany zachowania metody HttpPrincipal.getName() | Nie | Wartość zwrócona przez metodę HttpPrincipal.getName() została zmieniona w środowisku Java SE 16. |
| Sprawdzanie zmiany zachowania klasy java.io.LineNumberReader | Nie | Definicja terminatora linii w klasie java.io.LineNumberReader została zmieniona w języku Java SE 16. |
| Unikanie używania nieaktualnych interfejsów API java.security.cert | Nie | Metody getIssuerDN, getSubjectDN, getIssuerDN, setIssuer, setSubject, getIssuerAsString, getSubjectAsStringi addIssuerName w produkcie java.security.cert.X509Certificate, java.security.cert.X509CRL, java.security.cert.X509CertSelectori java.security.cert.X509CRLSelector były nieaktualne w środowisku Java SE 16. |
| Sprawdzanie zmiany zachowania metod HttpClient.newHttpClient i HttpClient.Builder.build | Nie | Utworzenie instancji produktu java.net.http.HttpClient może spowodować zgłoszenie UncheckedIOException , jeśli nie ma wystarczającej ilości zasobów bazowych. |
| Unikanie używania nieaktualnych metod w klasie java.util.logging.LogRecord | Nie | Metody getThreadID i setThreadID w produkcie java.util.logging.LogRecord były nieaktualne w środowisku Java SE 16. |
| Unikanie używania nieaktualnych konstruktorów podstawowych klas opakowujących | Nie | Konstruktory klas opakowań podstawowych zostały oznaczone jako nieaktualne w środowisku Java SE 16. |
| Unikanie synchronizacji dla wszystkich klas opartych na wartościach | Nie | Synchronizacja w instancjach wszystkich klas opartych na wartościach w środowisku Java SE 16 jest niezalecana. |
| Pakiet javax.security.cert został zdezaktualizowany z przeznaczeniem do usunięcia | Tak | Produkt |
| Metoda Thread.countStackFrames() została zmieniona tak, że bezwarunkowo zgłasza wyjątek UnsupportedOperationException | Nie | Terminalnie nieaktualna metoda |
| Unikanie używania usuniętego pakietu RMI Activation | Nie | Pakiet |
| Mechanizm fabryki implementacji gniazda został zdezaktualizowany | Nie | Następujące metody używane do ustawiania fabryk implementacji gniazd w systemie są nieaktualne w środowisku Java SE 17: static void ServerSocket.setSocketFactory(SocketImplFactory fac), static void Socket.setSocketImplFactory(SocketImplFactory fac), static void DatagramSocket.setDatagramSocketImplFactory(DatagramSocketImplFactory fac). |
| Sprawdzenie, czy nie zmienił się sposób dopasowywania wzorca w wyrażeniach regularnych | Nie | Zmienił się sposób dopasowywania wzorca w niektórych wyrażeniach regularnych korzystających z części wspólnych w środowisku Java SE 17. |
| Metoda defineAnonymousClass z klasy sun.misc.Unsafe została usunięta | Nie | Metoda defineAnonymousClass z klasy sun.misc.Unsafe została usunięta w środowisku Java SE 17. |
| Sprawdzenie, czy nie zmieniło się zachowanie agentów Java | Tak | Metody premain agenta Java i metody agentmain muszą być publiczne w środowisku Java SE 17. |
| Interfejs API Applet został uznany za nieaktualny z przeznaczeniem do usunięcia | Nie | Interfejs API Applet został uznany za nieaktualny z przeznaczeniem do usunięcia w środowisku Java SE 17. |
| Pliki JAR podpisane algorytmami SHA-1 podlegają teraz ograniczeniom | Nie | Pliki JAR podpisane przy użyciu algorytmów SHA-1 są obecnie domyślnie objęte ograniczeniami i traktowane w środowisku Java SE 17 tak, jak gdyby były niepodpisane. |
| Zdalne wywołania komponentów EJB mogą się nie powieść w środowisku Java SE 17 | Nie | Ze względu na bardziej rygorystyczne egzekwowanie zasad dostępu do modułów zdalne wywołania komponentów EJB mogą się nie powieść w środowisku Java SE 17. |
Wpływ na kompatybilność produktu Oracle z IBM
Podczas migrowania aplikacji ze środowiska Oracle Java Runtime Environment do środowiska IBM Java Runtime Environment należy uruchomić następujące reguły. Jeśli serwer Liberty jest uruchomiony przy użyciu środowiska wykonawczego Oracle Java Runtime, nie należy uruchamiać szybkich poprawek dla tych reguł.
| Nazwa reguły | Szybka poprawka | Wykonana czynność |
|---|---|---|
| Wykrywanie pakietów com.sun.net.ssl.internal | Nie | Ta reguła powoduje oznaczenie instrukcji importu niektórych pakietów com.sun.net.ssl.internal w plikach Java, które nie są dostępne i nie powinny być używane. |
| Nie należy używać interfejsów API z pakietów com.sun.net.ssl | Tak | Ta reguła wykrywa klasy i interfejsy w pakiecie >com.sun.net.ssl , które zostały zastąpione przez klasy i interfejsy w pakiecie javax.net.ssl . |
| Nie należy używać klas wewnętrznych com.sun.org.apache interfejsu JAXP | Nie | Ta reguła oznacza, że wewnętrzne klasy Sun JAXP nie są dostępne w środowisku IBM Java Runtime Environment. |
| Nie należy używać nazw pakietów com.sun.org.apache interfejsu JAXP w literałach łańcuchowych | Nie | Ta reguła wykrywa nazwy pakietów com.sun.org.apache JAXP 1.3 , które są używane w literałach łańcuchowych. |
| Nie należy używać klasy com.sun.net.ssl.internal.ssl.Provider | Tak | Ta reguła oznacza, że klasa com.sun.net.ssl.internal.ssl.Provider powinna zostać zastąpiona przez program com.ibm.jsse.IBMJSSEProvider. |
| Nie należy używać klasy com.sun.net.ssl.internal.www.protocol.https.Handler | Tak | Ta reguła powoduje oznaczenie flagą klasy com.sun.net.ssl.internal.www.protocol.https.Handler , która powinna zostać zastąpiona przez program com.ibm.net.ssl.www2.protocol.https.Handler. |
| Nie należy używać pakietu com.sun.net.ssl.internal.www.protocol | Tak | Ta reguła powoduje oznaczenie odwołań do pakietów produktu com.sun.net.ssl.internal.www.protocol , które powinny zostać zastąpione przez produkt com.ibm.net.ssl.www2.protocol. |
Wewnętrzne interfejsy API firmy Sun
Podczas migrowania aplikacji ze środowiska Oracle Java Runtime Environment do środowiska IBM Java Runtime, które zawiera klasę IBM , należy uruchomić tylko następujące reguły. Na przykład środowisko HP-UX i Solaris Java Runtime Environment, które jest dostarczane razem z serwerem WebSphere Application Server , nie zawiera klasy. Ta reguła nie jest wybierana automatycznie przez żaden zestaw reguł.
| Nazwa reguły | Szybka poprawka | Wykonana czynność |
|---|---|---|
| Nie należy używać interfejsów API z pakietu sun.security.x509 | Tak | Klasy i interfejsy w pakiecie sun.security.x509 są zastępowane przez klasy i interfejsy w pakiecie com.ibm.security.x509 w niektórych systemach operacyjnych. |