【问题标题】:How to programmatically override / change endorsed standards in Java?如何以编程方式覆盖/更改 Java 中认可的标准?
【发布时间】:2011-03-27 16:29:43
【问题描述】:

在本文档中:http://download.oracle.com/javase/6/docs/technotes/guides/standards/ 它只描述了一种非编程方式来覆盖 Java 中认可的标准(例如,提供不同的 TransformerFactory 实现等......)。通过将罐子放入<java-home>\lib\endorsed

有没有办法以编程方式指定认可的 jar?(查看 Tomcat 的认可目录,我认为这是可能的,毕竟 Tomcat 是用 Java 编写的)

【问题讨论】:

    标签: java endorsed


    【解决方案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..)。

    【讨论】:

    • 设置特定实现的系统属性确实有效果(例如设置 TransformerFactory 实现,AKA Xalan),但我希望每个类加载器都使用它自己的实现。我想我找到了答案,但我会先等着看更多的想法……
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-06
    • 2017-06-22
    • 2015-05-18
    • 2010-12-07
    • 1970-01-01
    • 2023-03-28
    相关资源
    最近更新 更多