Apache OpenWebBeans (CDI) + сервлет, инъекция не работает

Я пытаюсь заставить CDI работать в tomcat 9.x. Я перешел по следующим ссылкам, но контейнер openwebbeans все еще не вводил ресурс в сервлет.

https://devlearnings.wordpress.com/2011/05/15/apache-openwebbeans-cdi-from-standalone-to-webapp/ https://dzone.com/articles/using-apache-openwebbeans http://openwebbeans.apache.org/owbsetup_ee.html

Ниже мой сервлет

package com.openwebbeans;

import java.io.IOException;

import javax.inject.Inject;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class SampleController extends  HttpServlet{

    private static final long serialVersionUID = 1L;

    @Inject
    private SampleService service;

    public void doGet(final HttpServletRequest request, final HttpServletResponse response) throws IOException {

        response.getWriter().print(service);
    }
}

Ниже приведен файл web.xml.

<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
          http://java.sun.com/xml/ns/javaee/web-app
<Listener className="org.apache.webbeans.web.tomcat7.ContextLifecycleListener" />
0.xsd" version="3.0"> <display-name>OpenWebBeans</display-name> <listener> <listener-class>org.apache.webbeans.servlet.WebBeansConfigurationListener</listener-class> </listener> <servlet> <servlet-name>sample</servlet-name> <servlet-class>com.openwebbeans.SampleController</servlet-class> </servlet> <servlet-mapping> <servlet-name>sample</servlet-name> <url-pattern>/sample</url-pattern> </servlet-mapping> </web-app>

Добавлена ​​строка ниже в server.xml

<Listener className="org.apache.webbeans.web.tomcat7.ContextLifecycleListener" />

Ниже мой pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.openwebbeans</groupId>
    <artifactId>openwebbeans-beginner</artifactId>
    <packaging>war</packaging>
    <version>1.0</version>
    <name>openwebbeans-beginner</name>
    <url>http://maven.apache.org</url>
    <properties>
        <owb.version>2.0.0</owb.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.1.0</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.geronimo.specs</groupId>
            <artifactId>geronimo-atinject_1.0_spec</artifactId>
            <version>1.0</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.geronimo.specs</groupId>
            <artifactId>geronimo-jcdi_2.0_spec</artifactId>
            <version>1.0</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.geronimo.specs</groupId>
            <artifactId>geronimo-interceptor_1.2_spec</artifactId>
            <version>1.0</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.geronimo.specs</groupId>
            <artifactId>geronimo-annotation_1.3_spec</artifactId>
            <version>1.0</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.openwebbeans</groupId>
            <artifactId>openwebbeans-impl</artifactId>
            <version>${owb.version}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.openwebbeans</groupId>
            <artifactId>openwebbeans-spi</artifactId>
            <version>${owb.version}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.openwebbeans</groupId>
            <artifactId>openwebbeans-web</artifactId>
            <version>${owb.version}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.openwebbeans</groupId>
            <artifactId>openwebbeans-tomcat7</artifactId>
            <version>${owb.version}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.javassist</groupId>
            <artifactId>javassist</artifactId>
            <version>3.21.0-GA</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>
    <build>
        <finalName>openwebbeans-beginner</finalName>
    </build>
</project>

Добавлены банки ниже в tomcat lib

  • geronimo-аннотация_1.3_spec-1.0
  • geronimo-atinject_1.0_spec-1.0
  • geronimo-interceptor_1.2_spec-1.0
  • geronimo-jcdi_2.0_spec-1.0
  • openwebbeans-el22-2.0.0
  • openwebbeans-импл-2.0.0
  • openwebbeans-spi-2.0.0
  • openwebbeans-tomcat7-2.0.0
  • openwebbeans-web-2.0.0
  • xbean-asm5-shaded-4.5
  • xbean-finder-shaded-4.5
  • javassist-3.21.0-GA

Ниже приведены журналы сервера после развертывания моей войны. Из логов видно, что открытый контейнер веб-бинов запущен

20 июля 2017 г. 10:06:08.315 ИНФОРМАЦИЯ [http-nio-8080-exec-5] org.apache.catalina.startup.HostConfig.deployWAR Развертывание архива веб-приложений [D:\krishna\apache-tomcat-9.0.0 .M22\webapps\openwebbeans-beginner.war] 20 июля 2017 г. 10:06:08.904 INFO [http-nio-8080-exec-5] org.apache.webbeans.lifecycle.AbstractLifeCycle.bootstrapApplication Контейнер OpenWebBeans запускается.. 20 июля 2017 г. 10:06:09.229 ИНФОРМАЦИЯ [http-nio-8080-exec-5] org.apache.webbeans.lifecycle.AbstractLifeCycle.bootstrapApplication Контейнер OpenWebBeans запущен, это заняло [325] мс. 20 июля 2017 г. 10:06:09.235 ИНФОРМАЦИЯ [http-nio-8080-exec-5] org.apache.catalina.startup.HostConfig.deployWAR Развертывание архива веб-приложений [D:\krishna\apache-tomcat-9.0. 0.M22\webapps\openwebbeans-beginner.war] завершено через [920] мс

Кроме того, я создал openwebbeans.properties в разделе META-INF/openwebbeans и добавил к нему org.apache.webbeans.spi.ContainerLifecycle=org.apache.webbeans.lifecycle.StandaloneLifeCycle. Но это все еще не работает

Я также пытался использовать org.apache.webbeans.spi.ContainerLifecycle=org.apache.webbeans.web.lifecycle.WebContainerLifecycle, но ничего не работает.

Может ли кто-нибудь помочь мне заставить это работать?


person Krishna Chaitanya    schedule 20.07.2017    source источник
comment
У меня такая же проблема с Tomcat-8.0.45 и Tomcat-8.5.16. Кто-нибудь заставил это работать?   -  person David    schedule 22.07.2017


Ответы (1)


Если вам нужна инъекция в сервлеты, вам нужна более глубокая интеграция, чем просто прослушиватель сервлетов. Мы предоставляем это с помощью плагина openwebbeans-tomcat7.

Самый простой способ — использовать наш установщик, как описано в нашем информационном письме https://lists.apache.org/thread.html/15b8cbcdbcc24942dae6d277d75363103a9d45d59047fda0e6abcbbe@%3Cannounce.apache.org%3E

В этом случае просто удалите весь WebBeansConfigurationListener из вашего web.xml. Это предназначено, если вы хотите интегрироваться в «непрокачанные» контейнеры сервлетов или если вы работаете в GAE и т. д. В этом случае вы можете обойти с помощью CDI.current(), чтобы получить ваш компонент CDI в сервлете.

Вам также больше не нужна зависимость от javassist. Это было удалено в OWB-1.2.x давным-давно.

Не стесняйтесь пинговать нас в наших списках рассылки или irc на #openwebbeans на freenode.net!

Да, и еще один совет: вы можете попробовать наш контейнер Apache Meecrowave, который представляет собой OWB + Tomcat9 + CXF + Johnzon — все в 9 МБ. Он включает в себя плагин maven, контейнер Arquillian и т. д.

person struberg    schedule 25.07.2017