Ошибка ServiceLoader в WebLogic12c

Я пытался изменить нашу реализацию Activiti на использование CDI, но столкнулся с рядом проблем. Я потратил слишком много времени, пытаясь решить эту проблему уже, но я просто не могу отпустить это... Я думаю, что я наметил проблему сейчас, настраивая чистую структурированную войну без вовлечения Activiti и смог воспроизвести то, что я считаю главной проблемой.

В основном у меня есть jar1 и jar2, оба CDI включены, включая META-INF/beans.xml. Оба jar указывают класс в META-INF/services/test.TheTest, указывающий на реализации, локальные для соответствующего jar. jar1 зависит от jar2. Кроме того, обе банки указывают на реализацию javax.enterprise.inject.spi.Extension, запускающего сценарий. В каждой реализации расширения у меня есть такой метод:

public void afterDeploymentValidation(
        @Observes AfterDeploymentValidation event, BeanManager beanManager) {


    System.out.println("In jar1 extension"); 
    ServiceLoader<TheTest> loader = ServiceLoader.load(TheTest.class);
    Iterator<TheTest> serviceIterator = loader.iterator();
    List<TheTest> discoveredLookups = new ArrayList<TheTest>();
    while (serviceIterator.hasNext()) {
        TheTest serviceInstance = (TheTest) serviceIterator.next();
        discoveredLookups.add(serviceInstance);
        System.out.println(serviceInstance.getClass().getName());
    }
}

Теперь моя проблема в том, что ServiceLoader не видит каких-либо реализаций ни в одном из случаев при запуске WebLogic12c. Один и тот же код прекрасно работает как в Jboss 7.1.1, так и в Glassfish, в котором перечислены обе реализации теста. Интерфейс TheTest.

Справедливо ли предположить, что это действительно проблема в WebLogic 12c или я что-то не так делаю? Пожалуйста, помните, что я просто пытаюсь подражать производственной настройке, которую мы используем при включении Activiti.

С уважением, / Петтер

1 ответ

Существует инструмент анализа Classloader, поставляемый с WLS, вы видели, поможет ли это в диагностике вашей проблемы.

Вы можете получить доступ к этому инструменту, перейдя в ip:port/wls-cat/index.jsp, где port будет портом управляемого сервера, на котором развернуто ваше приложение.

Другие вопросы по тегам