Mehrere Transaktions-Manager, die mit @Transactional-annotation

  1. Wir haben Basis-generic-manager, die
    vererbt sich an alle Führungskräfte. Base
    manager versehen mit
    @Transactional-Annotationen.
  2. Gibt es 2 Gruppen von Transaktions -
    Dienstleistungen:

    • x.y.service1.* - verwaltet werden müssen, durch transactionManager1
    • x.y.service2.* - verwaltet werden müssen, durch transactionManager2

Wie können Transaktionen konfiguriert werden, ohne nessesity zum überschreiben ALLER Transaktions-Methoden, und geben Sie den Transaktions-manager?

@Transactional(readOnly = true)
public abstract class GenericManagerImpl<D extends IGenericDao, T extends BaseObject, PK extends Serializable>
        implements IGenericManager<T, PK> {

    protected D dao;

    @Autowired
    public void setDao(D dao) {
        this.dao = dao;
    }


    @Transactional(readOnly = false)
    public void save(T object) {
        dao.save(object);
    }

    @Transactional(readOnly = false)
    public void remove(T object) {
        dao.remove(object);
    }


}

@Service
class UserManagerImpl
        extends GenericManagerImpl<IUserDao, User, Long>
        implements IUserManager {

//Everything is OK. User is managed by txManager1

}

@Service
class BillingManagerImpl
        extends GenericManagerImpl<IBillingDao, Billing, Long>
        implements IBillingManager {

    @Override
    @Transactional(readOnly = false, value="txManager2") //<--have to override method only to specify txManager
    public void save(final Billing billing ) {
        super.save(billing);
    }

    @Override
    @Transactional(readOnly = false, value="txManager2") //<--have to override method only to specify txManager
    public void remove(final Billing billing ) {
        super.remove(billing);
    }
}

Meisten wahrscheinlich muss ich kombinieren aop mit @Transactional-annotation.
Eigentlich ist das, was ich will, ist:
1) konfigurieren können, die Transaktionen (read-only-flag, Predigten, isolation usw.), die mit @Transactional-annotation.
2) definieren Strategie zu wählen transaction manager außerhalb meiner Klassen (mit AOP, zum Beispiel)
x.y.service1.* -> verwenden txManager1
x.y.service2.* -> verwenden txManager2

Ist es möglich?

InformationsquelleAutor Seyran | 2010-07-26

Schreibe einen Kommentar