2011-03-27 41 views
0

在這個文檔中:http://download.oracle.com/javase/6/docs/technotes/guides/standards/它只描述了一種用程序設計的方式來覆蓋Java中認可的標準(例如提供一個不同的TransformerFactory實現等)。通過把罐子放在<java-home>\lib\endorsed如何以編程方式覆蓋/更改Java中的認可標準?

有沒有一種方法來以編程方式來表示背書的jar?(看着Tomcat的背書目錄,我認爲有可能,畢竟Tomcat是用Java編寫的)

回答

1

Tomcat也只是在啓動JVM時設置系統屬性,所以使用常規/記錄方式as documented in the classloader 'how-to'(「Tomcat通過在啓動容器的命令行中包含系統屬性設置-Djava.endorsed.dirs = $ JAVA_ENDORSED_DIRS來利用此機制。「)

因此,以編程方式執行它並不那麼容易。我假設在JVM啓動後設置系統屬性沒有效果(我沒有測試過)。

但是,仍然有可能:您只需從應用程序中啓動另一個JVM,並在其中設置系統屬性。你的應用程序必須首先檢查是否設置了背書目錄,如果是正常運行,如果沒有:使用Runtime.getRuntime().exec(cmdarray)'重新啓動'(當然系統屬性設置正確)。這'開始'有點複雜,但這是可能的。我工作的公司(www.day.com)將其用於所有產品,我們稱之爲「快速啓動」。我相信我們並沒有真正設置背書目錄,但如果當前設置不足,我們會設置最大內存(-Xmx..)。

+0

設置特定實現*的系統屬性*會產生影響(例如設置TransformerFactory實現,AKA Xalan),但是我希望每個類加載器都使用它自己的實現。我想我找到了答案,但我會等待先看到更多的想法...... – 2011-03-27 08:42:49

相關問題