首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Apache OpenWebBeans(CDI) + Servlet,注入无效

Apache OpenWebBeans(CDI) + Servlet,注入无效
EN

Stack Overflow用户
提问于 2017-07-20 04:54:18
回答 1查看 1.2K关注 0票数 2

我试图让CDI在Tomcat9.x中工作。我遵循以下链接,但openwebbean容器仍然没有将资源注入servlet

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

下面是我的servlet

代码语言:javascript
复制
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

代码语言:javascript
复制
<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_3_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中添加了下面一行

代码语言:javascript
复制
<Listener className="org.apache.webbeans.web.tomcat7.ContextLifecycleListener" />

下面是我的pom.xml

代码语言:javascript
复制
<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库下添加了下面的jars

  • geronimo-注释_1.3_spec-1.0
  • _1.0_spec-1.0
  • geronimo-拦截器_1.2_spec-1.0
  • geronimo-jcdi_2.0_spec-1.0
  • openwebbeans-el22-2.0.0
  • openwebbeans-impl-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

下面是部署我的war后的服务器日志。从日志中可以清楚地看到,打开的web bean容器已经启动。

2017年7月10:06:08.315 INFO 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年7月10:06:08.904 INFO http-nio-8080-exec-5 org.apache.webbeans.lifecycle.AbstractLifeCycle.bootstrapApplication OpenWebBeans容器开始.2017年7月10:06:09.229信息http-nio-8080-exec-5 org.apache.webbeans.lifecycle.AbstractLifeCycle.bootstrapApplication OpenWebBeans容器已经启动,花费了325 ms。2017年7月10:06:09.235 INFO http-nio-8080-exec-5 org.apache.catalina.startup.HostConfig.deployWAR D:\krishna\apache-tomcat-9.0.0.M22\webapps\openwebbeans-beginner.war部署工作在920 ms内完成。

此外,我在META/openwebbean下创建了org.apache.webbeans.spi.ContainerLifecycle=org.apache.webbeans.lifecycle.StandaloneLifeCycle并向其添加了openwebbeans.properties。但是它仍然不起作用

我也尝试过使用org.apache.webbeans.spi.ContainerLifecycle=org.apache.webbeans.web.lifecycle.WebContainerLifecycle,但是似乎没有什么效果。

有人能帮我把这件事做好吗?

EN

回答 1

Stack Overflow用户

发布于 2017-07-25 12:48:23

如果您需要在servlet中注入,那么您需要比servlet侦听器更深层次的集成。我们提供了openwebbeans-tomcat7插件。

最简单的方法是使用我们的安装程序,正如我们在公告邮件https://lists.apache.org/thread.html/15b8cbcdbcc24942dae6d277d75363103a9d45d59047fda0e6abcbbe@%3Cannounce.apache.org%3E中所解释的那样

在这种情况下,只需将整个WebBeansConfigurationListener从web.xml中删除即可。如果您喜欢在“unpimped”Servlet容器中集成,或者在GAE中运行等等,那么您可以使用CDI.current()在servlet中获取CDI。

您也不再需要任何javassist依赖项了。很久以前在OWB-1.2.x上被移除了。

欢迎点击我们的邮件列表或在#openwebbean在freenode.net上的irc!

哦,还有另一个提示:您可以尝试我们的容器,它是OWB + Tomcat9 + CXF + Johnzon --都是9MB。它包括一个maven插件,一个Arquillian容器,等等。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45205472

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档