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