Pessoal tenho dois projetos criados no Eclipse: 1º - projeto-negocio e 2º - projeto-web, estou utilizando o Spring para fazer a injeção do EntityManager dentro da minha classe DAO que fica dentro do projeto-negocio, mas está dando o seguinte erro quando no metodo de salvar dou um flush(): javax.persistence.TransactionRequiredException: no transaction is in progress, esse erro ocorre quando tento separa os dois projetos onde a união deles ocorre na parte web através do applicationContext.
Quando eu coloco tudo junto em um unico projeto funciona uma beleza. A intenção é de componentizar a camada de negócio propiciando assim o reuno negocial.
Segue os trechos dos fontes:
APPLICATIONCONTECXT.XML
<?xml version="1.0" encoding="UTF-8"?><context:component-scan base-package="br.gov" />
<context:annotation-config />
<jee:jndi-lookup id="dataSource" jndi-name="java:ProjetoPadraoDS" />
<bean
class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor" />
<tx:annotation-driven transaction-manager="transactionManager"/>
<bean id="entityManagerFactory"
class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
<property name="showSql" value="true" />
<property name="database" value="MYSQL" />
</bean>
</property>
<property name="jpaProperties">
<value>
hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect
</value>
</property>
</bean>
PERSISTENCE.XML
<?xml version="1.0" encoding="UTF-8"?>
org.hibernate.ejb.HibernatePersistence
java:ProjetoPadraoDS
CLASSEDAO:
@Repository
public class UsuarioDAO implements IUsuarioDAO {
private EntityManager entityManager;
public EntityManager getEntityManager() {
return this.entityManager;
}
@PersistenceContext
public void setEntityManager(EntityManager entityManager) {
this.entityManager = entityManager;
}
@Transactional(propagation = Propagation.REQUIRED)
public void salvar(Usuario usuario) {
try {
entityManager.persist(usuario);
entityManager.flush();
} catch (Exception ex) {
ex.printStackTrace();
throw new RuntimeException(ex);
}
}
}