2014-01-10 2 views
2
загрузки классов

я проблемы с приложением вебсервис/OSGi, устанавливающее в качестве WAR под JBoss 7.JBoss 7 чудес

Мои вопросы:

  1. Какие модули доступны в приложении по умолчанию? Я знаю, как добавить зависимость и как ее исключить. Но как узнать значения по умолчанию? Я думаю, что они называются «глобальными модулями».
  2. Какие пакеты JDK предоставляются приложению по умолчанию? Все? Некоторые? Как я могу это расследовать?
  3. По конкретной ошибке следующее. Некоторый код начальной загрузки вызывает javax.xml.parsers.DocumentBuilderFactory.newInstance(). Это приводит к исключению javax.xml.parsers.FactoryConfigurationError: Provider __redirected.__DocumentBuilderFactory not found. Кажется, что в JBoss системное свойство javax.xml.parsers.DocumentBuilderFactory указывает на описанную выше странную реализацию __redirected.__DocumentBuilderFactory.

Благодарим за помощь!

+0

Просто найти хорошую отправную точку в Документах https://docs.jboss.org/author/display/AS71/Class+Loading+in+AS7 – user3181425

ответ

0
  1. Вы можете проверить вкладку admin console/OSGi, чтобы узнать, что доступно для вас во время выполнения. «По умолчанию» зависит от конфигурации вашего запуска, существует 4 альтернативных профиля запуска, которые вы можете использовать с помощью IIRC.

  2. Проверить $ JBOSS/modules/sun/jdk/main/module.xml, чтобы увидеть, какие пакеты импортированы, а какие нет. Только некоторые из них. Другие вам нужно добавить вручную using jboss-deployment-structure или изменить файл sun.jdk module.xml, если они вам понадобятся. В дополнение к JDK есть другие автоматические зависимости, которые перечислены на this page.

  3. Вам нужно будет предоставить более подробную информацию, чтобы ответить на этот вопрос, включая ваши зависимости. Синтаксический анализатор Xerces является большой головной болью для модульного загрузчика классов.

1

Отвечая на мой собственный вопрос:

  1. модули добавлены неявно подробно описаны в документации JBoss найти здесь: https://docs.jboss.org/author/display/AS7/Implicit+module+dependencies+for+deployments. Как уже сказано в другом ответе, зависимости могут быть подавлены путем объявления исключений в jboss-deployment-structure.xml.

  2. См ответ выше

  3. Заявка развернуты JBoss является WAR-файл, который сам бутстрэпами контейнер OSGi. Внутри контейнера Gemini Blueprint используется для управления зависимостями службы OSGi. Gemini Blueprint ищет контекстные файлы Spring Application и запускает контекст Spring для пакета, если он найден. Анализ синтаксического анализа XML-файла завершился неудачей с исключением, указанным выше. Причина заключалась в том, что пакет __redirected не был доступен для комплекта. Мне удалось выполнить это через загрузку.

    # In JBoss some JDK classes like "javax.xml.parsers.DocumentBuilderFactory" are redirected to a JBoss package "__redirected" via a system property 
    # The corresponding implementation "__redirected/__DocumentBuilderFactory" is made accessible from all bundles via "boot delegation" 
    org.osgi.framework.bootdelegation = __redirected 
    # Sets the parent classloader to the one that loads the framework. It must have access to the bootdelegation pakages, e. g. "__redirected" 
    org.osgi.framework.bundle.parent = framework 
    
+0

, как вы знаете, Gemini план используется?Я ничего не вижу об этом в OP – eis

0

Проблема заключается в использовании метода setContextClassLoader. Это переопределяет класс-класс, который может загрузить DocumentBuilderFactory. Обходным путем является использование OrderClassLoaders.

Thread currentThread = Thread.currentThread(); 
ClassLoader originalCl = currentThread.getContextClassLoader(); 
currentThread.setContextClassLoader(new OrderClassLoaders(myCl, originalCl));