Die Bereitstellung eines Krieges, um Jetty mit CDI
Ich habe ein maven-Projekt in IntelliJ, wo ich versucht bin, für die Bereitstellung einer war-Datei auf einem jetty-container. Der Zweck dieser ist für eine schnelle integration test einige Funktionen gesagt war-Datei.
Da aus der box Jetty nicht über CDI oder JNDI, ich bin versucht, um Unterstützung für diese, sondern laufen in einige Probleme. Zum Beispiel, bekomme ich die folgende Fehlermeldung beim Start:
15:30:50 [34mINFO [0;39m o.a.s.c.CdiObjectFactory - [lookup]: Checking for BeanManager under JNDI key java:comp/BeanManager
15:30:50 [39mDEBUG[0;39m o.a.s.c.CdiObjectFactory - [lookup]: BeanManager lookup failed for JNDI key java:comp/BeanManager
Ich habe die weld-servlet jar in mein pom und auch die Schweißnaht-listener, um die web.xml aber es funktioniert immer noch nicht. Ich bin mit Jetty 9. Irgendwelche Ideen?
pom.xml
<dependency> <groupId>org.jboss.weld.servlet</groupId> <artifactId>weld-servlet-core</artifactId> <version>2.0.4.Final</version> </dependency>
web.xml
<listener> <listener-class>org.jboss.weld.environment.servlet.Listener</listener-class> </listener>
<resource-env-ref>
<description>Object factory for the CDI Bean Manager</description>
<resource-env-ref-name>BeanManager</resource-env-ref-name>
<resource-env-ref-type>javax.enterprise.inject.spi.BeanManager</resource-env-ref-type>
</resource-env-ref>
- Habe das problem gefunden. Es stellt sich heraus, dass der class-loader war immer verwirrt auf, wo man die entsprechende SCHWEIßNAHT unterstützt. Ich hatte weld-servlet als angegeben in meiner pom, aber der Krieg, ich war die Bereitstellung hatte auch noch andere Gläser zu bringen, dass in der Schweißnaht als auch. Ich getrennt das Projekt, das ab jetty in eine neue IntelliJ-Projekt und es hat Prima funktioniert. Vielen Dank für alle Ihre Vorschläge.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Folgende config funktioniert bei mir auf der Jetty-8.x und 9.0.x (nicht 9.1+ für den moment)
Hier sind die config benötigt :
Fügen Sie die Abhängigkeit in Pom.xml
beachten Sie die Tatsache, dass ich mit
weld-servlet
Abhängigkeit, die enthält alle benötigten Weld und CDI Klassen.In
jetty-env.xml
erklären Sie die JNDI-Ressourcenin
web.xml
fügen Sie die Zuhörer und setzen Sie das JNDI-Ressource :Und schließlich, wenn Sie wollen in der Lage zu injizieren bean im servlet müssen Sie Fragen, Jetty, setzen einige seiner inneren Klasse erstellen, indem Sie das folgende
jetty-web.xml
- Datei in IhremWEB-INF
VerzeichnisVerpassen Sie nicht die
-
im<Item/>
, es ist die Art und Weise zu erzählen Steg, die a-Klasse ist nicht mehr eine innere Klasse und kann gesehen werden, indem die webapp. Mit Schweißen wird in der Lage sein zu dekorieren Steg innere servlet-Klasse hinzufügen CDI Injection-Unterstützung in der it.Bonus : mit dem jetty-plugin für Maven
Es ist ganz einfach, Sie müssen nur fügen Sie eine
run
Profilpom.xml
wie dieseDanach wirst du nur noch geben
mvn -Prun
für die Erstellung Ihrer app, starten Sie Jetty und bereitstellen der app in.<Set name="serverClasses">
entfernt tatsächlich alle von den webapp-classloader-isolation. Mithilfe dieser Technik, die Sie gerade überschrieb die gesamte serverClasses-array mit 1 Eintrag, um alles von der server-classloader, der nun sichtbar in die webapp. (ein no-no in der servlet spec-Begriffe)Steg 9.1.0+ erfordert Schweißen 2.2.0+
Finden Sie unter: https://issues.jboss.org/browse/WELD-1561