iBATIS 3 und Spring 2 - die DataSource
2009-12-08 Gespeichert in: Softwareentwicklung
Das Spring Framework 2.x enthält Unterstützung zur Verwendung von iBATIS, leider aber nur für Version 2. Mit ein wenig eigenem Code kann das kurz vor dem Release stehende iBATIS 3 aber auch einfach eingebunden werden.
Die zu verwendende DataSource ist typischerweise als Bean in der Spring-Konfiguration enthalten und das Transaktionsmanagement wird auch von Spring erledigt. Die iBATIS Configuration wird aber ebenfalls über XML konfiguriert. Während das Transaktionsmanagement noch durch die Konfiguration
Glücklicherweise ist das Environment in der XML-Konfiguration von iBATIS keine Pflicht, so dass eine Mischkonfiguration gefahren werden kann (Environment programmatisch über Spring, Mapper etc. über XML). Das Bean hat Properties zur Konfiguration, nach der Initialisierung wird dann ein Environment erzeugt und in die aus der XML-Konfiguration gelesenen
Die zu verwendende DataSource ist typischerweise als Bean in der Spring-Konfiguration enthalten und das Transaktionsmanagement wird auch von Spring erledigt. Die iBATIS Configuration wird aber ebenfalls über XML konfiguriert. Während das Transaktionsmanagement noch durch die Konfiguration
MANAGED machbar ist, bereitet die DataSource Probleme.Glücklicherweise ist das Environment in der XML-Konfiguration von iBATIS keine Pflicht, so dass eine Mischkonfiguration gefahren werden kann (Environment programmatisch über Spring, Mapper etc. über XML). Das Bean hat Properties zur Konfiguration, nach der Initialisierung wird dann ein Environment erzeugt und in die aus der XML-Konfiguration gelesenen
Configuration gesetzt. Das Bean implementiert selbst die SqlSessionFactory, indem es an die aus dem XML erzeugte delegiert.public class SqlSessionFactoryBean
implements SqlSessionFactory, InitializingBean
{
private Resource xmlConfiguration;
private DataSource dataSource;
private SqlSessionFactory delegate;
public void afterPropertiesSet()
throws IOException
{
Reader reader = new InputStreamReader(xmlConfiguration.getInputStream(), Resources.getCharset());
delegate = new SqlSessionFactoryBuilder().build(reader);
Configuration config = delegate.getConfiguration();
if (config.getEnvironment() == null) {
if (dataSource == null) {
throw new IllegalStateException("Neither data source property nor environment in configuration set");
}
config.setEnvironment(new Environment("spring", new ManagedTransactionFactory(), dataSource));
}
}
// setter for xmlConfiguration and dataSource
// implementation of SqlSessionFactory by delegation
}
