2016-06-06 3 views
2

При развертывании веб-приложение с помощью DeploymentManager, эта ошибка возникаетJetty 9.3.9.v20160517 Поставщик WebSocketCdiInitializer не найден при включении аннотаций

2016-06-06 15:19:37,750 WARN [org.eclipse.jetty.deploy.DeploymentManager] (WrapperSimpleAppMain) Unable to reach node goal: started (DeploymentManager.java:506) 
java.util.ServiceConfigurationError: javax.servlet.ServletContainerInitializer: Provider org.eclipse.jetty.cdi.websocket.WebSocketCdiInitializer not found 
    at java.util.ServiceLoader.fail(ServiceLoader.java:239) 
    at java.util.ServiceLoader.access$300(ServiceLoader.java:185) 
    at java.util.ServiceLoader$LazyIterator.nextService(ServiceLoader.java:372) 
    at java.util.ServiceLoader$LazyIterator.next(ServiceLoader.java:404) 
    at java.util.ServiceLoader$1.next(ServiceLoader.java:480) 
    at org.eclipse.jetty.annotations.AnnotationConfiguration.getNonExcludedInitializers(AnnotationConfiguration.java:864) 
    at org.eclipse.jetty.annotations.AnnotationConfiguration.configure(AnnotationConfiguration.java:444) 
    at org.eclipse.jetty.webapp.WebAppContext.configure(WebAppContext.java:494) 
    at org.eclipse.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1361) 
    at org.eclipse.jetty.server.handler.ContextHandler.doStart(ContextHandler.java:772) 
    at org.eclipse.jetty.servlet.ServletContextHandler.doStart(ServletContextHandler.java:262) 
    at org.eclipse.jetty.webapp.WebAppContext.doStart(WebAppContext.java:520) 
    at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68) 

Это происходит при включении аннотаций поддерживают использование:

org.eclipse.jetty.webapp.Configuration.ClassList classlist = org.eclipse.jetty.webapp.Configuration.ClassList.setServerDefault(server); 
    classlist.addBefore(
     "org.eclipse.jetty.webapp.JettyWebXmlConfiguration", 
     "org.eclipse.jetty.annotations.AnnotationConfiguration" 
    ); 
    classlist.addAfter(
     "org.eclipse.jetty.webapp.FragmentConfiguration", 
     "org.eclipse.jetty.plus.webapp.PlusConfiguration" 
    ); 

Ящик cdi-websocket-9.3.9.v20160517.jar находится в пути класса

Этот issue предлагает отключить cdi Модуль Jetty, но он не говорит, как это сделать со встроенным Jetty.

Как исправить это?

EDIT

Мы понимаем, что эта проблема может быть вызвана (комплексной) средой приложение работает в.

Поэтому я особенно заинтересован в понимании , что причины корневых что может привести это исключение будет брошено

ЗАКЛЮЧЕНИЕ

TD; LR: Jetty-9.3.9 встроенный! = Jetty-9.3.9 standalone

С Jetty 9.2.14 мы начали программировать программу (как и Jetty embedded), но используя банки неупакованной версии автономный причал.

У нас была эта настройка работоспособности с Jetty 7 (или, может быть, даже 6), но при переходе на Jetty 9.3.9 все началось.

Примечание: мы используем Джерси, сервлеты и очень немногие JSP. Нет веб-сайтов. Мы обновляем протокол HTTP/2.

+0

На самом деле, лучший способ сказать, что 'jetty-cdi- *' специально разработан для автономного 'jetty-distribution' и его модульной системы , что слишком сложно (и бессмысленно) использовать, когда вы находитесь в 'embedded-jetty'. Более простое решение - просто использовать 'cdi-weld' напрямую. –

ответ

1

Поскольку вы сказали, вы молы встраиваемый, решение очень простое.

Не включайте в проект свой проект jetty-cdi-*. Они не предназначены для использования со встроенным причалом.

Используйте артефакты cdi-weld непосредственно из проекта сварки для Jetty Embedded.

Убедитесь, что вы прочитали документацию по сварке о том, как настроить WebAppClassloader, чтобы разрешить сварку видеть компоненты сервера. (это называется «пробивание отверстия в изолирующем слое webapp»)

+0

Спасибо. Я не забываю вас: мы проводим тесты и дадим вам обратную связь –

+0

Я отредактирую свой вопрос с нашими выводами. В обоих ответах на самом деле были намеки на то, что делать; ваш больше, чем другой, поэтому я награждаю его вам. благодаря –

1

Из исходного кода Jetty 9.3.2 [1](я предполагаю, что линии не изменились после прихода к 9.3.9) я нашел следующий исходный фрагмент кода:

851   //Get initial set of SCIs that aren't from excluded jars or excluded by the containerExclusionPattern, or excluded 
852   //because containerInitializerOrdering omits it 
853   for (ServletContainerInitializer sci:loadedInitializers) 
854   {  
855    if (matchesExclusionPattern(sci)) 
856    { 
857     if (LOG.isDebugEnabled()) LOG.debug("{} excluded by pattern", sci); 
858     continue; 
859    } 
860    
861    Resource sciResource = getJarFor(sci); 
862    if (isFromExcludedJar(context, sci, sciResource)) 
863    { 
864     if (LOG.isDebugEnabled()) LOG.debug("{} is from excluded jar", sci); 
865     continue; 
866    } 

Там комментарий говорит, что SCI (ServletContainerInitializer) здесь проверяется на то, что он не исключается по каким-либо причинам. Ваш stacktrace сказал нам, что строка 864 бросает исключение. LOG.debug пытается сказать, что причина в том, что SCI исключен из jar, в результате чего возникла ошибка.

Мое предложение вы проверить конфигурации Maven (ваш pom.xml) о пакете org.eclipse.jetty.annotations.AnnotationConfiguration с указанной файл:

<!-- http://mvnrepository.com/artifact/org.eclipse.jetty/jetty-annotations --> 
<dependency> 
    <groupId>org.eclipse.jetty</groupId> 
    <artifactId>jetty-annotations</artifactId> 
    <version>9.3.9.M1</version> 
</dependency> 

[2] и что эта зависимость не является исключены из какой-то странной причины. Я полагаю, что банка относится к зависимости maven.

Мои источники:

[1] http://grepcode.com/file/repo1.maven.org/maven2/org.eclipse.jetty/jetty-annotations/9.3.2.v20150730/org/eclipse/jetty/annotations/AnnotationConfiguration.java?av=f

[2] http://mvnrepository.com/artifact/org.eclipse.jetty/jetty-annotations/9.3.9.M1

+0

Спасибо. Я не забываю вас: мы проводим тесты и дадим вам отзывы –

+0

Я отредактирую свой вопрос с нашими выводами. В обоих ответах на самом деле были намеки на то, что делать; @Joakim Erdfelt больше, чем ваш, поэтому я награждаю его ему. Спасибо за ваше время –

Смежные вопросы