2016-12-09 8 views
0

글쎄, 나는 DeltaSpike에서 @Transactional을 사용하려고하는데 TransactionalInterceptor가 호출되지 않습니다. DeltaSpike @Transactional이 호출되지 않았습니다.

내 EntityManagerProducer입니다 : 내가 EntityManager를 주입하고 @Transactional를 사용하는 클래스가

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

} 

, 참조 :

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

이 문제는 어떻게 해결할 수 있습니까? 나는 정확히 같은 예제를 아파치 페이지 (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입니다. 마누엘 리는 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