Spring3 's @Transactional @Geplante nicht verpflichtet DB?

Dies ist mein 1. mal versucht Spring3 s @Eingeplant , aber ich kann nicht verpflichten zu DB. Das ist mein code :

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

Ich denke, es sollte funktionieren , ich kann es sehen beginnt-bis stündlich und laden xxx von DB , aber die Daten ist nicht verpflichtet, DB.

Gab es tx:annotation-driven im Frühjahr xml :

<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" />

Kann jemand mir sagen, was ich hier verpasst ?

Habe ich eine " dirty' Lösung :

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

Es funktioniert hier , aber es ist so überflüssig , was den code schwieriger zu Lesen.
Ich Frage mich, warum TransactionManager ist nicht injiziert (und geöffnet) in dem vorherigen code-Schnipsel?

Vielen Dank !

  • Ein bisschen off-topic, aber Sie brauchen nicht rollbackFor für @Transactional. Rollback erfolgt immer implizit zur Laufzeit Ausnahmen.
  • Ich habe versucht, Ihr dirty-Lösung, aber es funktioniert nicht. irgendeine Idee warum?
InformationsquelleAutor smallufo | 2011-03-26
Schreibe einen Kommentar