Onehdá jsem řešil, jak použít springové deklarativní transakce
(@Transactional) bez použití springového kontejneru. Prostě čisté
spring-jdbc. Kupodivu to není žádná velká magie, takže jestli to někoho
zajímá, tady to je.

Mějme rozhraní SomeService:

public interface SomeService {
  void doSomething();
}

a jeho implementaci:

final class SomeServiceImpl() {
  private final JdbcTemplate jdbc;

  SomeServiceImpl(JdbcTemplate jdbc) {
    this.jdbc = jdbc;
  }

  @Transactional // !!!
  void doSomething() {
    ...
  }
}

To zajímavé se odehrává tady:

public final class ServicesFactory {
  private ServicesFactory() {}

  private static final SomeService SOME_SERVICE;
  static {
    // nad implementaci SomeServiceImpl vytvorim springovou transakcni proxy
rizenou
    // anotacemi (staci reflect.Proxy nad rozhranim SomeService, neni treba
pouzit cglib)
    DataSource dataSource = ...;
    SomeServiceImpl target = new SomeServiceImpl(new
JdbcTemplate(dataSource));
    PlatformTransactionManager txManager = new
DataSourceTransactionManager(dataSource);
    TransactionProxyFactoryBean proxyFactory = new
TransactionProxyFactoryBean();
    proxyFactory.setTarget(target); // rozhrani, ktera proxovat, si factory
zjisti sama
    proxyFactory.setTransactionManager(txManager);
    proxyFactory.setTransactionAttributeSource(new
AnnotationTransactionAttributeSource());
    proxyFactory.afterPropertiesSet();
    SomeService impl = (SomeService) proxyFactory.getObject();
    SOME_SERVICE = impl;
  }

  public static SomeService someService() {
    return SOME_SERVICE;
  }
}

LT


2010/2/16 Martin Kuba <[email protected]>

> Dusan Zatkovsky napsal(a):
> > Problem je, ze nikde na webe nemozem najst nejaky JEDNODUCHY navod,
> > ako na transakcie so spring-jdbc. Nasiel som len kopu otazok bez
> odpovedi, pripadne
> > odpovede s linkom na kopu xml chaosu a stovky riadkov mne
> nepochopitelneho kodu:
> >
> >
> http://static.springsource.org/spring/docs/2.5.x/reference/transaction.html
> >
> > Poradi niekto?
>
> Vyráběl jsem onehdy tutoriál, je tady:
> http://kore.fi.muni.cz:5080/wiki/index.php/Spring_JDBC#Transakce
>
> Makub
> --
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> Supercomputing Center Brno             Martin Kuba
> Institute of Computer Science    email: [email protected]
> Masaryk University             
> http://www.ics.muni.cz/~makub/<http://www.ics.muni.cz/%7Emakub/>
> Botanicka 68a, 60200 Brno, CZ     mobil: +420-603-533775
> --------------------------------------------------------------
>
>

Odpovedet emailem