簡體   English   中英

已棄用的認可標准的替代方案覆蓋機制和擴展機制

[英]Alternative for deprecated endorsed-standards override mechanism and extension mechanism

Java 8 Update 40(8u40)發行說明指出

已棄用的標准覆蓋機制和擴展機制已被棄用,可能會在將來的版本中刪除。 沒有運行時更改。 建議使用“認可標准覆蓋”或“擴展”機制的現有應用程序遠離使用這些機制。

還有一個問題澄清了Jigsaw(計划用於Java SE 9,AFAIK),這將以某種方式用模塊化方法取代:

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

我知道Oracle現在想要棄用這些機制,因為它們不再支持它們在Java SE 9中了。

另一方面,在不提供替代方案的情況下棄用某些東西並不是一種好的做法。

發布說明指出:“建議現有應用程序遷移遠離使用這些機制”

那么你怎么能“遠離”

  • 認可標准覆蓋機制
  • 擴展機制

在Java SE 8中?

我找到了以下文章,它解釋了這些機制確實計划在Java SE 9中刪除:

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

不幸的是,現在似乎沒有什么可以做的,例如對於屬於JRE的庫而言。

如果受到影響該怎么辦

雖然大多數應用程序不使用認可的標准或擴展機制,但有些應用程序可以使用。 如果您是開發人員,請考慮將依賴項作為應用程序的一部分,而不是需要外部系統配置。 如果您不是開發人員,請與各個軟件供應商聯系以獲取支持。

使用Java 8,您可以繼續使用已棄用的機制。 Oracle僅提供了一種方法來檢查您的應用程序是否使用-XX:+CheckEndorsedAndExtDirs更新40及更高版本中提供的此java.exe標志-XX:+CheckEndorsedAndExtDirs [ 1 ]的機制。

當您升級到Java 9時,為了避免Java應用程序在運行時失敗,使用由ClassNotFoundException引起的NoClassDefFoundError

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 

你需要使用像--add-modules --patch-module -add-exports這樣的參數來更新你的java.exe啟動命令行

有關具體示例,請參閱Grzegorz Grzybek在2016年9月發布的jacorb-developer郵件[ 2 ]。 我們必須使用Java 9附加的命令行參數更新我們的應用程序的Windows批處理文件

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

與CORBA和Java相關的一個腳注,CORBA(和JAXB)將在Java 11中完全刪除。請參閱“JEP 320:刪除Java EE和CORBA模塊”[ 3 ]以及此博客文章[ 4 ]。

您現在的后備是在執行Java實例時明確列出您的類路徑目錄和jar文件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM