Новые обработчики URLStreamHandlers в glassfish
Вопрос
У меня есть устаревшее приложение, которое я пытаюсь портировать на Java EE.В настоящее время это приложение вызывает URL.setURLStreamHandlerFactory() для регистрации некоторых пользовательских обработчиков протокола URL.Этот вызов завершается неудачей в версиях Glassfish 2.1 и 3, поскольку glassfish уже зарегистрировала фабрику.
Я пытался использовать системное свойство java.protocol.handler.pkgs, но у меня это не работает из-за проблем с загрузчиком классов.Все классы-обработчики являются частью приложения, и я не горю желанием пытаться извлечь их и поместить jar в classpath контейнера.
Я немного разбираюсь в пакетах osgi - очевидно, я мог бы написать Пакет, который будет работать с новыми протоколами.Я не горю желанием делать это веб-приложение пакетом osgi (шаг за шагом!Сначала EE, затем osgi, если возникнет необходимость).
Можно ли вставить пакет jar в мой каталог WEB-INF / lib и заставить Glassfish загрузить его как пакет?Пакет должен будет импортировать пакеты из веб-приложений (другой jar в WEB-INF /lib или в WEB-INF/ classes).Я готов упаковать это приложение как EAR, если это сработает, я просто не могу оправдать osgifying всего приложения, не зная больше.
Решение
Я решил свою проблему.Очевидно, у меня пересеклись какие-то провода, поскольку системное свойство java.protocol.handler.pkgs работает нормально.
Для любого другого сбоя я помещаю jar с моими обработчиками в $DOMAINDIR/lib/ext /, а также в каталог WEB-INF / lib моей войны.В конфигурации моего приложения я также добавил опцию jvm -Djava.protocol.handler.pkgs=my.handlers.pkg.prefix
Я заметил, что в glassfish 2.1 это работает без опции jvm, если я добавляю префикс в какой-либо код запуска, но в glassfish 3 опция jvm необходима, потому что felix (реализация osgi, которую использует glassfish) обращается к свойству только при запуске сервера, а не для каждого запроса.