@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

questionAnswers(3)

yourAnswerToTheQuestion