Как получить экземпляр javax.imageio.spi.IIORegistry с правильной областью действия
У нас есть несколько веб-приложений, развернутых на сервере приложений WebSphere, где оба приложения используют ImageIO стандартной Java, но одно использует дополнительную библиотеку, чтобы добавить больше читателей / писателей.
Вопрос сейчас, оба приложения используют IIORegistry.getDefaultInstance()
чтобы получить экземпляр реестра службы, и оба приложения, кажется, получают один и тот же экземпляр. Внутренне это связано с AppContext.getAppContext()
возвращая тот же AWT AppContext. Есть ли какой-нибудь правильный способ иметь несколько приложений WebSphere, использующих ImageIO Java, без необходимости заботиться об обоих приложениях, использующих одни и те же библиотеки? Нужно ли вручную создавать awt AppContext для моих приложений WebSphere?
1 ответ
Я считаю, что концепция контекста приложения (та, которая используется в IIORegistry
Класс, не путать с контекстом веб-приложения) изначально предназначался для апплетов (т. е. нескольких апплетов, выполняющихся в одной JVM в браузере). Для веб-приложений это также имело бы смысл, но я не думаю, что это работает таким образом. Кроме того, я не думаю, что есть какие-либо общедоступные классы API или методы, связанные с созданием или поддержанием контекстов приложения (это все в sun.awt.*
пакеты), поэтому создание контекстов вручную не рекомендуется.
Я сделал слушатель веб-контекста, который решит некоторые проблемы с использованием ImageIO
в веб-приложениях, т.е. регистрация и отмена регистрации "локальных" плагинов веб-приложения, когда веб-приложение загружается / выгружается (обрабатывает как обнаружение, так и удаление "устаревших" плагинов). К сожалению, это не будет скрыто в плагинах веб-приложений от других веб-приложений, если это ваше намерение (трудно сказать по вопросу).
Имея AppContext
Для каждого веб-приложения, вероятно, будет более понятный подход, но, как уже упоминалось, отсутствие общедоступного API и отсутствие "стандартного" способа сделать это делает такое решение непереносимым и, следовательно, нежелательным.