2015-03-11 5 views
9

Der release notes for Java 8 Update 40 (8u40) Zustand:Alternative für veraltete unterstützt Standards Aufhebungsmechanismus und Erweiterungsmechanismus

Der gebilligt-Standards Aufhebungsmechanismus und der Erweiterungsmechanismus sind veraltet und kann in einer zukünftigen Version entfernt werden. Es gibt keine Laufzeitänderungen. Bestehende Anwendungen, die die Mechanismen ' override' oder 'extension' verwenden, werden empfohlen, diese Mechanismen zu entfernen.

Es gibt auch das Problem, das mit Jigsaw (geplant für Java SE 9, AFAIK), wird dies ersetzt wird mit einem modularen Ansatz verdeutlicht, dass irgendwie:

http://bugs.java.com/view_bug.do?bug_id=8065675

Ich verstehe, dass Oracle will Entschuldigen Sie diese Mechanismen jetzt, da sie sie in Java SE 9 nicht mehr unterstützen können.

Auf der anderen Seite ist es keine gute Praxis, etwas zu verwerfen, ohne eine Alternative anzubieten.

Die Release Notes heißt es: "Bestehende Anwendungen [...] werden aus der Verwendung dieser Mechanismen zur Migration empfohlen away"

So wie können Sie "wandern weg von"

  • unterstützt Standards überschreiben Mechanismus
  • Erweiterungsmechanismus

in Java SE 8?

+0

Erscheint es nicht sagen kann nicht in Java 9 unterstützt werden? – EJP

+0

@EJB Das habe ich verstanden. Z.B. In der Ausgabe: "Wir gehen davon aus, dass wir zukünftig nur noch standardisierte APIs und Standalone-APIs in modularer Form über das Konzept erweiterbarer Module [2] unterstützen werden." Vielleicht lese ich auch in anderen Quellen etwas darüber. Und AFAIK Jigsaw ist für Java SE 9 geplant. Aber das ist zumindest mein aktuelles Verständnis nicht unbedingt eine Tatsache. Haben Sie andere Informationen diesbezüglich? – Puce

+0

'Vorwärts'! = Java 9. Sie sind übermäßig in Panik geraten. Sie haben weder eine Zielversion noch eine Zeitleiste erwähnt. Ich würde denken, dass Sie in Sicherheit sind, bis mindestens eine Hauptversion mit beiden vorhandenen Mechanismen passiert ist: vielleicht zwei oder mehr. – EJP

Antwort

1

fand ich den folgenden Artikel, der erklärt, dass diese Mechanismen in der Tat in Java SE 9 entfernt werden geplant:

https://blogs.oracle.com/java-platform-group/entry/planning_safe_removal_of_under

Leider können Sie scheinen es nicht mehr viel zu tun, zum Beispiel für Bibliotheken, die Teil der JRE sind.

Was tun, wenn Sie

Obwohl die meisten Anwendungen nicht verwenden, um die übernommenen Standards oder Erweiterungsmechanismus betroffen sind, tun einige Anwendungen. Wenn Sie ein Entwickler sind, denken Sie daran, Abhängigkeiten als Teil Ihrer Anwendung bereitzustellen, anstatt externe Systemkonfigurationen zu erfordern. Wenn Sie nicht der Entwickler sind, kontaktieren Sie bitte den individuellen Softwareanbieter , um Unterstützung zu erhalten.

-1

Ihr Fallback ist jetzt explizit Ihre Klassenpfad-Verzeichnisse und JAR-Dateien auflisten, wenn Sie die Java-Instanz ausführen.

+0

Der "normale" Klassenpfad kann die von der JRE bereitgestellten Klassen nicht ersetzen, AFAIK. – Puce

+0

Die von der JRE bereitgestellten sind standardmäßig. Erweiterungen wurden extern vom Benutzer dem JRE-Pfad hinzugefügt und gelten allgemein als Anti-Pattern. Ich habe das Feature "Indossiert" nie benutzt. Alle externen Abhängigkeiten werden am besten im Klassenpfad aufgelistet. Alles, was Sie in Extensions hatten, sollte stattdessen als .jar oder class-Verzeichnis bereitgestellt werden, auch im Klassenpfad. Das ist meine Meinung dazu. –

0

Mit Java 8 können Sie den veralteten Mechanismus weiterhin verwenden. Oracle bietet nur eine Möglichkeit, zu überprüfen, ob Ihre Anwendung den Mechanismus mit diesem java.exe Flag -XX:+CheckEndorsedAndExtDirs [1] in Java 8 Update 40 und höher verwendet.

Wenn Sie auf Java 9, aktualisieren Sie Ihre Java-Anwendung Fehler zur Laufzeit, mit NoClassDefFoundError von ClassNotFoundException wie

Exception in thread "pool-1-thread-3" java.lang.NoClassDefFoundError: javax/rmi/CORBA/Stub 
     at java.base/java.lang.ClassLoader.defineClass1(Native Method) 
     at java.base/java.lang.ClassLoader.defineClass(Unknown Source) 
     at java.base/java.security.SecureClassLoader.defineClass(Unknown Source) 
     at java.base/jdk.internal.loader.BuiltinClassLoader.defineClass(Unknown Source) 
     at java.base/jdk.internal.loader.BuiltinClassLoader.findClassOnClassPathOrNull(Unknown Source) 
     at java.base/jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(Unknown Source) 
     at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(Unknown Source) 
     at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(Unknown Source) 
     at java.base/java.lang.ClassLoader.loadClass(Unknown Source) 
     at org.jacorb.orb.ORB._getDelegate(ORB.java:541) 
     at org.jacorb.orb.ORB.string_to_object(ORB.java:2110) 
--snip-- 
     at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) 
     at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) 
     at java.base/java.lang.Thread.run(Unknown Source) 
Caused by: java.lang.ClassNotFoundException: javax.rmi.CORBA.Stub 
     at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(Unknown Source) 
     at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(Unknown Source) 
     at java.base/java.lang.ClassLoader.loadClass(Unknown Source) 
     ... 26 more 

Sie müssen aktualisieren Sie Ihre java.exe Start-Befehlszeilen mit Argumenten zu vermeiden wie --add-Module --patch-Modul -add-Exporte

Für ein konkretes Beispiel siehe Grzegorz Grzybek des September 2016 Post auf dem jacorb-Entwickler-Mailing [2]. Wir hatten unsere Anwendung Windows-Batch-Datei mit den Java 9 zusätzliche Befehlszeilenargumente wie

gut aktualisieren dies nicht der Verbindungs ​​ Persistenz, aber es hat abstürzen nicht

java --add-modules "java.corba" --patch-module "java.corba=..\lib\jacorb-omgapi-3.4.jar" --add-exports=java.corba/org.omg.CONV_FRAME=ALL-UNNAMED --add-exports=java.corba/org.omg.CORBA_2_5=ALL-UNNAMED --add-exports=java.corba/org.omg.PortableGroup=ALL-UNNAMED --add-exports=java.corba/org.omg.ETF=ALL-UNNAMED --add-exports=java.corba/org.omg.GIOP=ALL-UNNAMED --add-exports=java.corba/org.omg.SSLIOP=ALL-UNNAMED --add-exports=java.corba/org.omg.CSIIOP=ALL-UNNAMED -jar ourapp.jar 
Verwandte Themen