2017-05-30 71 views
1

我安装焊接/ CDI和Tomcat中正常工作,除了在启动时它说,交​​易服务未启用:如何在Tomcat 8 + Weld 3.0(CDI 2.0)中添加交易服务?

org.jboss.weld.bootstrap.WeldStartup.startContainer WELD-000101: 
    Transactional services not available. Injection of @Inject 
    UserTransaction not available. Transactional observers will be 
    invoked synchronously. 

我的pom.xml:

<?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/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 

    <groupId>groupId</groupId> 
    <artifactId>TestWebSocket</artifactId> 
    <version>1.0-SNAPSHOT</version> 

    <packaging>war</packaging> 

    <!-- Tell Maven what language version to use --> 
    <properties> 
     <maven.compiler.source>1.8</maven.compiler.source> 
     <maven.compiler.target>1.8</maven.compiler.target> 
    </properties> 

    <dependencies> 

     <!-- https://mvnrepository.com/artifact/javax.enterprise/cdi-api --> 
     <dependency> 
      <groupId>javax.enterprise</groupId> 
      <artifactId>cdi-api</artifactId> 
      <version>2.0</version> 
     </dependency> 

     <!-- Enables the annotations, etc needed --> 
     <dependency> 
      <groupId>javax</groupId> 
      <artifactId>javaee-api</artifactId> 
      <version>7.0</version> 
      <exclusions> 
       <exclusion> 
        <groupId>javax.exterprise</groupId> 
        <artifactId>cdi-api</artifactId> 
       </exclusion> 
      </exclusions> 
     </dependency> 

     <!-- Our jersey libs --> 
     <dependency> 
      <groupId>org.glassfish.jersey.containers</groupId> 
      <artifactId>jersey-container-servlet-core</artifactId> 
      <version>2.25.1</version> 
     </dependency> 

     <!-- CDI to JAX-RS Binding --> 
     <!-- https://mvnrepository.com/artifact/org.glassfish.jersey.containers.glassfish/jersey-gf-cdi-ban-custom-hk2-binding --> 
     <dependency> 
      <groupId>org.glassfish.jersey.containers.glassfish</groupId> 
      <artifactId>jersey-gf-cdi</artifactId> 
      <version>2.14</version> 
     </dependency> 

     <!-- https://mvnrepository.com/artifact/org.jboss.weld.servlet/weld-servlet-core --> 
     <dependency> 
      <groupId>org.jboss.weld.servlet</groupId> 
      <artifactId>weld-servlet-core</artifactId> 
      <version>3.0.0.Final</version> 
     </dependency> 

     <!-- https://mvnrepository.com/artifact/org.jboss.weld/weld-core-impl --> 
     <dependency> 
      <groupId>org.jboss.weld</groupId> 
      <artifactId>weld-core-impl</artifactId> 
      <version>3.0.0.Final</version> 
     </dependency> 

    </dependencies> 

</project> 

的web.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" 
     version="3.1"> 

    <servlet> 
     <servlet-name>Example API</servlet-name> 
     <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class> 

     <init-param> 
      <param-name>jersey.config.server.provider.packages</param-name> 
      <param-value>com.testpush</param-value> 
     </init-param> 

     <load-on-startup>1</load-on-startup> 
    </servlet> 

    <servlet-mapping> 
     <servlet-name>Example API</servlet-name> 
     <url-pattern>/events/*</url-pattern> 
    </servlet-mapping> 

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

<?xml version="1.0" encoding="utf-8"?> 
<Context> 

    <Resource name="BeanManager" 

      auth="Container" 

      type="javax.enterprise.inject.spi.BeanManager" 

      factory="org.jboss.weld.resources.ManagerObjectFactory"/> 

</Context> 

beans.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://xmlns.jcp.org/xml/ns/javaee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee 
     http://xmlns.jcp.org/xml/ns/javaee/beans_1_1.xsd" 
    bean-discovery-mode="all"> 
</beans> 

回答

0

您将需要从焊缝SPI提供的TransactionServices实现,然后通过ServiceLoaderMETA-INF/services/org.jboss.weld.bootstrap.api.Service

全部细节登记可以发现in the weld documentation for SPI