Я был бы очень осторожен ... и решил, стоит ли производительность рисковать
Я думал о гипотетической ситуации, когда вы могли бы иметь некоторые непреднамеренные последствия использования общего ClassLoader ...
Я посмотрел на Log4J
, который создает регистраторы через LogManager
, который расширяет java.util.logging.LogManager
, который используется для поддержки набора общего состояния о регистраторах и сервисах журналов.
Представьте себе случай, когда эти клиенты private static final Logger LOGGER = LogManager.getLogger();
создают регистраторы для каждого хоста
<Host name="client9001.example.com">
<Host name="client9002.example.com">
<Host name="client9003.example.com">
<Host name="BADclient.example.com">
Поскольку LogManager статически совместно используется всеми хостами, плохой клиент может вызвать LogManagers.getLoggerNames();
, который вернет список всех зарегистрированных регистраторов этому статическому экземпляру LogManager и приведет к утечке информации о других клиентах, работающих на том же экземпляре tomcat / be смог удалить список событий для других хостов, используя тот же класс (** я не пробовал это **)
По сути, вы хотите разместить код, который будет на 100% разделен между всеми хостами (и всеми будущими хостами), работающими на JVM. Типичным примером будет инициализация соединения JDBC.
Кроме того, с точки зрения обслуживания кода, если вы собираетесь пройти по кроличьей норе и попытаться просмотреть все статические методы / поля ... при каждом обновлении стороннего импорта вы должны будете снова просмотреть их, чтобы убедиться, что ничего не было введено ... и, возможно, даже пересмотреть импорт сторонних импортеров
Возможно, этот вопрос заинтересует Загрузчик классов Tomcat нарушает политику делегирования , когда он спрашивает об опасности использования загрузчиков общих классов в Tomcat