@Transactional @Program3 da Spring3 não está comprometido com o DB?
Esta é minha primeira vez tentando o @Scheduled da Spring3, mas descobri que não posso me comprometer com o DB. Este é o meu código:
@Service
public class ServiceImpl implements Service , Serializable
{
@Inject
private Dao dao;
@Override
@Scheduled(cron="0 0 * * * ?")
@Transactional(rollbackFor=Exception.class)
public void hourly()
{
// get xxx from dao , modify it
dao.update(xxx);
}
}
Acho que deve funcionar, posso vê-lo inicializar a cada hora e carregar xxx do DB, mas os dados não são confirmados no D
Houvetx:annotation-driven
no xml da primavera:
<bean id="entityManagerFactoryApp" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="persistenceUnitName" value="myapp"/>
</bean>
<bean id="transactionManagerApp" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="entityManagerFactoryApp" />
</bean>
<tx:annotation-driven transaction-manager="transactionManagerApp" />
lguém pode me dizer o que eu perdi aqu
Eu tenho um 'suj 'solução:
@Service
public class ServiceImpl implements Service , Serializable
{
@Inject
private Dao dao;
@Inject
@Qualifier("transactionManagerApp")
private PlatformTransactionManager txMgrApp;
@Override
@Scheduled(cron="0 0 * * * ?")
@Transactional(rollbackFor=Exception.class)
public void hourly()
{
final TransactionTemplate txTemplateApp = new TransactionTemplate(txMgrApp);
txTemplateApp.execute(new TransactionCallbackWithoutResult()
{
@Override
protected void doInTransactionWithoutResult(TransactionStatus status)
{
//get xxx from dao
dao.update(xxx);
}
});
}
}
Istofunciona be aqui, mas é tão redundante, dificultando a leitura do código. Eu quero saber porqueTransactionManager não é injetado (e aberto) nos trechos de código anteriores?
Muito obrigado