2016-06-06 17 views
2

aktiviert wird, wenn ein Webapp Entfalten des DeploymentManager verwendet wird, wird dieser FehlerJetty 9.3.9.v20160517 Provider WebSocketCdiInitializer nicht gefunden, wenn Anmerkungen

geworfen
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) 

Dies geschieht bei der Aktivierung Anmerkungen unterstützen mit:

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" 
    ); 

Der Behälter cdi-websocket-9.3.9.v20160517.jar ist im Klassenpfad

Dieser issue schlägt vor, denzu deaktivierenJetty-Modul, aber es sagt nicht, wie man es mit einem eingebetteten Jetty macht.

Wie behebe ich das?

EDIT

Wir wissen, dass dieses Problem kann durch die (komplexe) Umwelt verursacht wird die Anwendung in läuft.

Deshalb bin ich besonders daran interessiert, Verständnis welche die Wurzel Gründe das könnte diese Ausnahme dazu führen

FAZIT

geworfen werden

TD; LR: Jetty-9.3.9 eingebettet! = Jetty-9.3.9 autonom

Mit Jetty 9.2.14 starteten wir Jetty programmatisch (genau wie ein Jetty eingebettet) aber die Jars der unverpackten Version von ein eigenständiger Jetty.

Wir hatten diese Einrichtung funktioniert gut seit Jetty 7 (oder vielleicht sogar 6), aber die Dinge begannen zu brechen beim Upgrade auf Jetty 9.3.9.

Hinweis: Wir verwenden Jersey, Servlets und sehr wenige JSPs. Keine Websockets. Wir aktualisieren, um HTTP/2 zu testen.

+0

Eigentlich ist die Art und Weise besser, es zu sagen ist, dass 'Anlegestelle-CDI- *' speziell für die Standalone-'Anlegestelle distribution' ausgebildet ist und sein Modulsystem . Das ist zu kompliziert (und sinnlos) zu verwenden, wenn Sie in Embedded-Jetty sind. Die einfachere Lösung besteht darin, 'cdi-weld' direkt zu verwenden. –

Antwort

1

Da Sie sagten, Sie sind Anlegesteg-eingebettet, die Lösung ist einfach.

Sie die jetty-cdi-* Gläser in Ihrem Projekt nicht enthalten. Sie sind nicht von eingebetteter Anlegestelle verwendet werden soll.

Mit cdi-weld Artefakte direkt aus dem Schweißprojekt für Landungssteg Embedded.

Seien Sie sicher, dass Sie den Schweiß Dokumentation, wie die Einrichtung lesen die WebAppClassloader Schweißnaht zu ermöglichen, die Server-Komponenten zu sehen. (Dies wird als „Stanzen einen Lochs in der Isolationsschicht webapp“)

+0

Danke. Ich vergesse Sie nicht: Wir führen Tests durch und geben Ihnen Feedback –

+0

Ich werde meine Frage mit unseren Ergebnissen bearbeiten. Beide Antworten gaben tatsächlich Hinweise darauf, was zu tun ist; deine mehr als die andere, also vergebe ich es dir. Vielen Dank –

1

Von Quellcode Jetty 9.3.2 [1](ich nehme an, die Linien nicht nach kommen auf 9.3.9 geändert haben) ich den folgenden Quellcode-Schnipsel gefunden:

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    } 

Dort wird der Kommentar sagt, dass SCI (ServletContainerInitializer) wird hier geprüft, um aus irgendwelchen Gründen nicht ausgeschlossen zu werden. Ihr Stacktrace hat uns gesagt, dass Zeile 864 eine Ausnahme auslöst. LOG.debug versucht zu sagen, dass der Grund dafür ist, dass der SCI von ausgeschlossenem jar ist, was den Fehler verursacht, dem Sie gegenüberstanden.

Mein Vorschlag ist, dass Sie Ihre Maven Konfigurationen überprüfen (Ihre pom.xml) über das Paket containg org.eclipse.jetty.annotations.AnnotationConfiguration Datei in:

<!-- 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] und dass diese Abhängigkeit nicht ist von irgendeinem seltsamen Grund ausgeschlossen. Ich nehme an, der Krug bezieht sich auf die Abhängigkeit der Maven.

Meine Quellen:

[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

Danke. Ich vergesse nicht: wir Tests laufen und geben Ihnen Feedback –

+0

Ich werde meine Frage mit unseren Ergebnissen bearbeiten. Beide Antworten gaben tatsächlich Hinweise darauf, was zu tun ist; @Joakim Erdfelt mehr als deins, also vergebe ich es ihm. Danke für Ihre Zeit –