Tomcat + CDI + Arquillian

Ale*_*ühl 6 maven-3 cdi tomcat7 jboss-arquillian

我将Tomcat 7和CDI一起使用,为此,我使用了Knappsack Maven Archetypes中的jee6-servlet-minimal-archetype 作为起点.

现在我想使用Arquillian来测试CDI bean,但即使在搜索了很长时间之后,我也只发现了一些与该主题相关的问题.

有人能指出我pom.xml在Tomcat 7上使用Arquillian进行CDI测试的工作设置(特别是使用权)吗?


编辑2012/09/11: 正如下面的评论所指出的,我认为要解决我的问题,我需要有人帮助我理解整个设置,而不是试图在某个时候解决特定的异常.

那么,pom.xml和测试类是如何看待的,因为在tomcat 7中有一个CDI bean并且能够在嵌入式和托管容器中使用所有注入机制来测试它?(顺便说一下,为什么没有tomcat 7的远程容器适配器,因为它已经用于6?)

我已经尝试调整tomcat 6示例,但无法使其在tomcat 7上运行.

Ale*_*ühl 4

不幸的是,我还没有找到或被告知有关我的问题的工作示例,但能够想出一些对我有用的东西,我想在这里展示 - 也许它对某人有帮助,因为我认为问题是不是一个异国情调的东西,也许有人可以查看它并给我一个提示,以防出现不同的情况。

/pom.xml(可在 eclipse [3.7] 和 tomcat 7 [7.0.30] 中使用,确保项目属性/部署程序集不包含测试类/资源):

<?xml version="1.0" encoding="UTF-8"?>
<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.mycompany</groupId>
    <artifactId>cditomcat</artifactId>
    <packaging>war</packaging>
    <version>0.0.1-SNAPSHOT</version>
    <name>cditomcat</name>
    <description>This pom is the base for a project using JSF2+CDI on a tomcat 7 and Arquillian for tests.</description>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencies>
        <!-- Java EE Dependencies -->
        <dependency>
            <groupId>com.sun.xml.ws</groupId>
            <artifactId>jaxws-rt</artifactId>
            <version>2.2.7</version>
        </dependency>

        <dependency>
            <groupId>javax.faces</groupId>
            <artifactId>jsf-api</artifactId>
            <version>2.0</version>
            <scope>compile</scope>
        </dependency>

        <dependency>
            <groupId>com.sun.faces</groupId>
            <artifactId>jsf-impl</artifactId>
            <version>2.0.2-b10</version>
            <scope>compile</scope>
        </dependency>

        <dependency>
            <groupId>javax.validation</groupId>
            <artifactId>validation-api</artifactId>
            <version>1.0.0.GA</version>
            <scope>compile</scope>
        </dependency>

        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-validator</artifactId>
            <version>4.0.0.GA</version>
            <scope>compile</scope>
        </dependency>

        <dependency>
            <groupId>org.jboss.weld.servlet</groupId>
            <artifactId>weld-servlet</artifactId>
            <version>1.1.4.Final</version>
        </dependency>

        <!-- Test dependencies -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.10</version>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.jboss.arquillian.junit</groupId>
            <artifactId>arquillian-junit-container</artifactId>
            <version>1.0.0.CR5</version>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.jboss.shrinkwrap.container</groupId>
            <artifactId>shrinkwrap-container-tomcat-60</artifactId>
            <version>1.0.0-beta-1</version>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.jboss.shrinkwrap</groupId>
            <artifactId>shrinkwrap-api</artifactId>
            <version>1.0.0-cr-1</version>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.jboss.shrinkwrap</groupId>
            <artifactId>shrinkwrap-spi</artifactId>
            <version>1.0.0-cr-1</version>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.jboss.shrinkwrap.descriptors</groupId>
            <artifactId>shrinkwrap-descriptors-api</artifactId>
            <version>1.1.0-beta-1</version>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.jboss.shrinkwrap.descriptors</groupId>
            <artifactId>shrinkwrap-descriptors-impl</artifactId>
            <version>1.1.0-beta-1</version>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.7.0</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <finalName>cditomcat</finalName>
        <testSourceDirectory>src/test/java</testSourceDirectory>

        <plugins>
            <!-- Facilitates downloading source and javadoc in Eclipse -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-eclipse-plugin</artifactId>
                <version>2.8</version>
                <configuration>
                    <wtpversion>2.0</wtpversion>
                    <downloadSources>true</downloadSources>
                    <downloadJavadocs>true</downloadJavadocs>
                </configuration>
            </plugin>

            <!-- Ensures we are compiling at 1.6 level -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>2.3.2</version>
                <configuration>
                    <source>1.6</source>
                    <target>1.6</target>
                </configuration>
            </plugin>

            <!-- Tomcat plugin for embedded tomcat -->
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>tomcat-maven-plugin</artifactId>
                <version>1.1</version>
                <configuration>
                    <path>/${project.build.finalName}</path>
                </configuration>
            </plugin>
        </plugins>
    </build>

    <profiles>
        <profile>
            <id>tc7-embedded</id>
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>

            <build>
                <testResources>
                    <testResource>
                        <directory>src/test/resources</directory>
                    </testResource>
                    <testResource>
                        <directory>src/test/resources/embedded</directory>
                    </testResource>
                </testResources>
            </build>

            <dependencies>
                <dependency>
                    <groupId>org.jboss.arquillian.container</groupId>
                    <artifactId>arquillian-tomcat-embedded-7</artifactId>
                    <version>1.0.0.CR3</version>
                    <scope>test</scope>
                </dependency>

                <dependency>
                    <groupId>org.apache.tomcat.embed</groupId>
                    <artifactId>tomcat-embed-core</artifactId>
                    <version>7.0.19</version>
                    <scope>provided</scope>
                </dependency>

                <dependency>
                    <groupId>org.apache.tomcat.embed</groupId>
                    <artifactId>tomcat-embed-jasper</artifactId>
                    <version>7.0.19</version>
                    <scope>provided</scope>
                </dependency>

                <dependency>
                    <groupId>org.eclipse.jdt.core.compiler</groupId>
                    <artifactId>ecj</artifactId>
                    <version>3.7</version>
                    <scope>test</scope>
                </dependency>

                <!-- Provided scoped dependencies for embedded container -->
                <dependency>
                    <groupId>org.apache.tomcat</groupId>
                    <artifactId>tomcat-catalina</artifactId>
                    <version>7.0.29</version>
                    <scope>provided</scope>
                </dependency>

                <dependency>
                    <groupId>org.apache.tomcat</groupId>
                    <artifactId>tomcat-coyote</artifactId>
                    <version>7.0.29</version>
                    <scope>provided</scope>
                </dependency>

                <dependency>
                    <groupId>org.apache.tomcat</groupId>
                    <artifactId>tomcat-jasper</artifactId>
                    <version>7.0.29</version>
                    <scope>provided</scope>
                </dependency>

                <dependency>
                    <groupId>javax.servlet</groupId>
                    <artifactId>servlet-api</artifactId>
                    <version>2.5</version>
                    <scope>provided</scope>
                </dependency>

                <dependency>
                    <groupId>org.jboss.arquillian.container</groupId>
                    <artifactId>arquillian-container-test-spi</artifactId>
                    <version>1.0.2.Final</version>
                    <scope>test</scope>
                </dependency>

                <dependency>
                    <groupId>org.jboss.arquillian.container</groupId>
                    <artifactId>arquillian-container-spi</artifactId>
                    <version>1.0.0.CR5</version>
                    <scope>test</scope>
                </dependency>
            </dependencies>
        </profile>

        <profile>
            <id>tc7-managed</id>
            <build>
                <testResources>
                    <testResource>
                        <directory>src/test/resources</directory>
                    </testResource>
                    <testResource>
                        <directory>src/test/resources/managed</directory>
                    </testResource>
                </testResources>
            </build>

            <dependencies>
                <dependency>
                    <groupId>org.jboss.arquillian.container</groupId>
                    <artifactId>arquillian-tomcat-managed-7</artifactId>
                    <version>1.0.0.CR3</version>
                    <scope>test</scope>
                </dependency>

                <!-- Provided scoped dependencies for embedded container -->
                <dependency>
                    <groupId>org.apache.tomcat</groupId>
                    <artifactId>tomcat-catalina</artifactId>
                    <version>7.0.29</version>
                    <scope>provided</scope>
                </dependency>

                <dependency>
                    <groupId>org.apache.tomcat</groupId>
                    <artifactId>tomcat-coyote</artifactId>
                    <version>7.0.29</version>
                    <scope>provided</scope>
                </dependency>

                <dependency>
                    <groupId>org.apache.tomcat</groupId>
                    <artifactId>tomcat-jasper</artifactId>
                    <version>7.0.29</version>
                    <scope>provided</scope>
                </dependency>

                <dependency>
                    <groupId>javax.servlet</groupId>
                    <artifactId>servlet-api</artifactId>
                    <version>2.5</version>
                    <scope>provided</scope>
                </dependency>

                <dependency>
                    <groupId>org.jboss.arquillian.container</groupId>
                    <artifactId>arquillian-container-test-spi</artifactId>
                    <version>1.0.2.Final</version>
                    <scope>test</scope>
                </dependency>

                <dependency>
                    <groupId>org.jboss.arquillian.container</groupId>
                    <artifactId>arquillian-container-spi</artifactId>
                    <version>1.0.0.CR5</version>
                    <scope>test</scope>
                </dependency>
            </dependencies>
        </profile>
    </profiles>
</project>
Run Code Online (Sandbox Code Playgroud)

/src/main/webapp/WEB-INF/web.xml(我还是用的2.5版本):

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
    version="2.5">
    <welcome-file-list>
        <welcome-file>index.html</welcome-file>
    </welcome-file-list>
    <context-param>
        <param-name>facelets.DEVELOPMENT</param-name>
        <param-value>true</param-value>
    </context-param>
    <servlet>
        <servlet-name>Faces Servlet</servlet-name>
        <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>Faces Servlet</servlet-name>
        <url-pattern>*.jsf</url-pattern>
    </servlet-mapping>
    <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>

</web-app>
Run Code Online (Sandbox Code Playgroud)

/src/main/webapp/META-INF/context.xml(未使用 Servlet、Listeners、Filters 中的注入):

<?xml version="1.0" encoding="UTF-8"?>
<Context>
    <!-- disable storage of sessions across restarts -->
    <Manager pathname=""/>
    <Resource name="BeanManager" auth="Container" type="javax.enterprise.inject.spi.BeanManager" factory="org.jboss.weld.resources.ManagerObjectFactory"/>
</Context>
Run Code Online (Sandbox Code Playgroud)

/src/main/resources/META-INF/beans.xml /src/test/resources/in-container-beans.xml (空标记文件对于应用程序和测试来说是相同的):

<?xml version="1.0" encoding="UTF-8"?>
<beans 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/beans_1_0.xsd">
</beans>
Run Code Online (Sandbox Code Playgroud)

/src/test/resources/in-container-web.xml(嵌入式和托管相同):

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
    version="2.5">

    <env-entry>
        <env-entry-name>name</env-entry-name>
        <env-entry-type>java.lang.String</env-entry-type>
        <env-entry-value>Tomcat</env-entry-value>
    </env-entry>

    <listener>
        <listener-class>org.jboss.weld.environment.servlet.Listener</listener-class>
    </listener>

    <resource-env-ref>
        <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>
</web-app>
Run Code Online (Sandbox Code Playgroud)

/src/test/resources/in-container-context.xml(嵌入式和托管相同):

<Context>
    <Resource name="BeanManager" auth="Container"
        type="javax.enterprise.inject.spi.BeanManager" factory="org.jboss.weld.resources.ManagerObjectFactory" />
</Context>
Run Code Online (Sandbox Code Playgroud)

/src/test/resources/embedded/arquillian.xml(此文件仅用于嵌入):

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<arquillian xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://jboss.org/schema/arquillian"
    xsi:schemaLocation="http://jboss.org/schema/arquillian http://jboss.org/schema/arquillian/arquillian_1_0.xsd">

    <engine>
        <property name="deploymentExportPath">target</property>
    </engine>
    <container qualifier="tomcat" default="true">
        <configuration>
            <property name="tomcatHome">target/tomcat-embedded-7</property>
            <property name="workDir">work</property>
            <property name="appBase">webapps</property>
            <property name="bindHttpPort">8889</property>
            <property name="unpackArchive">true</property>
        </configuration>
    </container>
</arquillian>
Run Code Online (Sandbox Code Playgroud)

/src/test/resources/managed/arquillian.xml(此文件仅供管理):

<?xml version="1.0"?>
<arquillian
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns="http://jboss.org/schema/arquillian"
        xsi:schemaLocation="http://jboss.org/schema/arquillian http://jboss.org/schema/arquillian/arquillian_1_0.xsd">

    <container qualifier="tomcat" default="true">
        <configuration>
            <property name="jmxPort">8099</property>
            <property name="host">localhost</property>
            <property name="port">8080</property>
            <property name="user">tomcat</property>