Как программно переопределить / изменить одобренные стандарты в Java?

В этом документе: http://download.oracle.com/javase/6/docs/technotes/guides/standards/ он описывает только один непрограммный способ переопределения одобренных стандартов в Java (например, для обеспечения другой реализации TransformerFactory и т. Д....). поставив банки в <java-home>\lib\endorsed

Есть ли способ уточнить одобренную банку программно? (глядя на одобренный каталог Tomcat, я предполагаю, что это возможно, после того, как Tomcat написан на Java)

1 ответ

Решение

Tomcat также просто устанавливает системное свойство при запуске JVM, поэтому использует обычный / документированный способ, как описано в загрузчике классов "как" ("Tomcat использует этот механизм, включив параметр системного свойства -Djava.endorsed.dirs=$JAVA_ENDORSED_DIRS в командной строке, которая запускает контейнер.")

Поэтому это не так просто сделать программно. Я предполагаю, что установка системного свойства после запуска JVM не имеет никакого эффекта (я не проверял это).

Тем не менее, это все еще возможно: вам просто нужно запустить другую JVM из вашего приложения и установить там системное свойство. Ваше приложение должно будет сначала проверить, установлен ли одобренный каталог, если да, запустить нормально, а если нет: использовать Runtime.getRuntime().exec(cmdarray) "начать себя заново" (конечно, с системным свойством, установленным правильно). Это "само начало" немного сложно понять, но возможно. Компания, в которой я работаю ( http://www.day.com/), использует ее для всех продуктов, мы называем это "быстрый старт". Я считаю, что на самом деле мы не устанавливаем одобренный каталог, но мы устанавливаем максимальную память (-Xmx..) если текущей настройки недостаточно.

Другие вопросы по тегам