Вопрос

У меня есть устаревшее приложение, которое я пытаюсь портировать на 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) обращается к свойству только при запуске сервера, а не для каждого запроса.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top