2016-12-09 5 views
0

まあ、DeltaSpikeで@Transactionalを使用しようとしていますが、TransactionalInterceptorは呼び出されません。DeltaSpike @Transactionalが呼び出されていません

これは私のEntityManagerProducerです:

public class EntityManagerProducer implements Serializable { 

    private static final long serialVersionUID = 1L; 


    private static EntityManagerFactory emf = Persistence.createEntityManagerFactory("generalPU"); 

    @Produces 
    @TransactionScoped 
    // is a bit better than @RequestScoped because it won't allow perform injection outside transaction context 
    public EntityManager createEntityManager() { 
     return emf.createEntityManager(); 
    } 

    public void close(@Disposes EntityManager em) { 
     if (em.isOpen()) { 
      em.close(); 
     } 
    } 


    public EntityManagerFactory getEmf() { 
     return emf; 
    } 


    public void setEmf(EntityManagerFactory emf) { 
     this.emf = emf; 
    } 

} 

私はEntityManagerを注入し、@Transactionalを使用するクラスを持って、次を参照してください。

@Named 
@RequestScoped 
public class BasicDAOImpl implements BasicDAO, Serializable { 
    @Inject 
    private EntityManager entityManager; 

    @Transactional 
    public void save(AbstractBean bean) { 
    try { 
     entityManager.merge(bean); 
    } catch (Exception e) { 
     logger.error("Erro ao tentar salvar. \n " + e); 
    } 
    } 
} 

と私はインターセプタとbeans.xmlのを持って、見て:

<?xml version="1.0"?> 
<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://jboss.org/schema/cdi/beans_1_0.xsd"> 
    <interceptors> 
     <class>org.apache.deltaspike.jpa.impl.transaction.TransactionalInterceptor</class> 
    </interceptors> 
</beans> 

この問題を解決するにはどうすればよいですか?私はApacheのページ(https://deltaspike.apache.org/documentation/jpa.html)の例とまったく同じです。私はTomcat7 + JDK 1.8を使用してい

+ CDI 1.2(ウェルド2.3.0最終的な実装)

編集1:これは

である私のpersistence.xmlの

<?xml version="1.0" encoding="UTF-8"?> 
<persistence version="2.0" 
    xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/persistence 
http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd "> 


    <persistence-unit name="generalPU"> 
     <provider>org.hibernate.ejb.HibernatePersistence</provider> 
     <non-jta-data-source>java:/comp/env/jdbc/cedDS</non-jta-data-source> 
     <properties> 
      <property name="hibernate.show_sql" value="true" /> 
      <property name="hibernate.format_sql" value="false" /> 
      <property name="hibernate.hbm2ddl.auto" value="update" /> 
      <property name="hibernate.cache.use_second_level_cache" 
       value="false" /> 
      <property name="hibernate.cache.use_query_cache" value="false" /> 
      <property name="hibernate.jdbc.batch_size" value="50" /> 
      <property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect" />   
     </properties> 
    </persistence-unit> 

</persistence> 

編集2:pom.xmlの私の依存関係

<dependency> 
      <groupId>org.facebook4j</groupId> 
      <artifactId>facebook4j-core</artifactId> 
      <version>2.3.1</version> 
     </dependency> 

     <dependency> 
      <groupId>javax.mail</groupId> 
      <artifactId>mail</artifactId> 
      <version>1.4</version> 
     </dependency> 

     <dependency> 
      <groupId>org.apache.deltaspike.modules</groupId> 
      <artifactId>deltaspike-jpa-module-api</artifactId> 
      <version>1.7.1</version> 
     </dependency> 

     <dependency> 
      <groupId>org.apache.deltaspike.modules</groupId> 
      <artifactId>deltaspike-jpa-module-impl</artifactId> 
      <version>1.7.1</version> 
     </dependency> 


     <!-- JASPER REPORT IMPORTS --> 

     <dependency> 
      <groupId>net.sourceforge.barbecue</groupId> 
      <artifactId>barbecue</artifactId> 
      <version>1.5-beta1</version> 
     </dependency> 


     <dependency> 
      <groupId>net.sf.jasperreports</groupId> 
      <artifactId>jasperreports</artifactId> 
      <version>5.0.1</version> 
     </dependency> 

     <dependency> 
      <groupId>net.sf.jasperreports</groupId> 
      <artifactId>jasperreports-fonts</artifactId> 
      <version>4.0.0</version> 
     </dependency> 

     <dependency> 
      <groupId>xml-apis</groupId> 
      <artifactId>xml-apis</artifactId> 
      <version>1.4.01</version> 
     </dependency> 
     <dependency> 
      <groupId>xerces</groupId> 
      <artifactId>xercesImpl</artifactId> 
      <version>2.10.0</version> 
     </dependency> 


     <!-- FIM JASPER RESPORT IMPORTS --> 

     <dependency> 
      <groupId>com.sun.faces</groupId> 
      <artifactId>jsf-api</artifactId> 
      <version>2.1.6</version> 
     </dependency> 

     <dependency> 
      <groupId>com.sun.faces</groupId> 
      <artifactId>jsf-impl</artifactId> 
      <version>2.1.6</version> 
     </dependency> 
     <dependency> 
      <groupId>javax.servlet</groupId> 
      <artifactId>jstl</artifactId> 
      <version>1.2</version> 
     </dependency> 

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


     <dependency> 
      <groupId>javax.persistence</groupId> 
      <artifactId>persistence-api</artifactId> 
      <version>1.0</version> 
     </dependency> 

     <!-- CDI --> 
     <dependency> 
      <groupId>org.jboss.weld.servlet</groupId> 
      <artifactId>weld-servlet</artifactId> 
      <version>2.3.0.Final</version> 
     </dependency> 

     <dependency> 
      <groupId>javax.inject</groupId> 
      <artifactId>javax.inject</artifactId> 
      <version>1</version> 
     </dependency> 


     <!-- HIBERNATE --> 
     <dependency> 
      <groupId>org.hibernate</groupId> 
      <artifactId>hibernate-core</artifactId> 
      <version>3.6.10.Final</version> 
     </dependency> 
     <dependency> 
      <groupId>org.hibernate</groupId> 
      <artifactId>hibernate-entitymanager</artifactId> 
      <version>3.6.10.Final</version> 
     </dependency> 
     <dependency> 
      <groupId>org.hibernate</groupId> 
      <artifactId>hibernate-validator</artifactId> 
      <version>5.1.0.Final</version> 
     </dependency> 
     <dependency> 
      <groupId>cglib</groupId> 
      <artifactId>cglib-nodep</artifactId> 
      <version>2.2.2</version> 
     </dependency> 

     <dependency> 
      <groupId>javassist</groupId> 
      <artifactId>javassist</artifactId> 
      <version>3.12.1.GA</version> 
     </dependency> 

     <dependency> 
      <groupId>org.slf4j</groupId> 
      <artifactId>slf4j-api</artifactId> 
      <version>1.6.1</version> 
     </dependency> 
     <dependency> 
      <groupId>org.slf4j</groupId> 
      <artifactId>slf4j-simple</artifactId> 
      <version>1.6.1</version> 
     </dependency> 
     <dependency> 
      <groupId>asm</groupId> 
      <artifactId>asm-commons</artifactId> 
      <version>3.1</version> 
     </dependency> 

     <dependency> 
      <groupId>log4j</groupId> 
      <artifactId>log4j</artifactId> 
      <version>1.2.17</version> 
     </dependency> 

     <dependency> 
      <groupId>commons-collections</groupId> 
      <artifactId>commons-collections</artifactId> 
      <version>20040616</version> 
     </dependency> 

     <dependency> 
      <groupId>commons-io</groupId> 
      <artifactId>commons-io</artifactId> 
      <version>2.4</version> 
     </dependency> 

     <dependency> 
      <groupId>commons-fileupload</groupId> 
      <artifactId>commons-fileupload</artifactId> 
      <version>1.3</version> 
     </dependency> 

     <dependency> 
      <groupId>org.primefaces</groupId> 
      <artifactId>primefaces</artifactId> 
      <version>3.5</version> 
     </dependency> 

     <dependency> 
      <groupId>javax.annotation</groupId> 
      <artifactId>jsr250-api</artifactId> 
      <version>1.0</version> 
     </dependency> 
+0

どのCDI実装を使用していますか?どのバージョン?あなたの 'persistence.xml'を共有できますか? –

+0

@Jonh Ament、私はこの情報で投稿を編集しました。 – RonaldoLanhellas

+0

ちょっと指摘すると、溶接2.3はCDI 1.2の実装です。なぜ古いバージョンを使用しているのか分かりませんが、これは2.4.1で複製されていますか?さらに、あなたはそれが呼び出されていないことをどのように知っていますか? 'ResourceLocalTransactionStrategy'にブレークポイントを設定して、それが呼び出されなかったことを確認しましたか? –

答えて

0

これは私によって動作し、ブレークポイントはTransactionalInterceptorになります。 Manuelly登録する必要はありませんTransactionalInterceptorです。

public class EntityManagerProducer implements Serializable { 

    @Inject 
    @PersistenceUnitName(value="generalPU") 
    private EntityManagerFactory entityManagerFactory; 

    @Produces 
    @TransactionScoped 
    protected EntityManager createTranEntityManager() { 
     return this.entityManagerFactory.createEntityManager(); 
    } 

    protected void closeEntityManager(@Disposes EntityManager entityManager){ 
     if (entityManager.isOpen()) { 
      entityManager.close(); 
     } 
    } 
} 
+0

私はそれを試みたが成功しなかった – RonaldoLanhellas

+0

私の依存関係は新しいです。なぜpersistence-api 1.0ですか? hibernate-validator 5.1とhibernate-core 3.6.10はなぜですか?私はそれがdeltaspike問題だとは思わない。 – jklee

+0

あなたは何をお勧めしますか? – RonaldoLanhellas

関連する問題