iBatis in einem Eclipse-Plugin verwenden

Für ein kleines privates Projekt wollte ich ein Eclipse-Plugin erstellen, welches via iBatis auf eine Derby Datenbank zugreift. Hierfür habe ich 3 Plugins erstellt:

  1. Data-Plugin (iBatis Konfiguration, Valueklassen und Daos)
  2. derbyWrapper
  3. ibatisWrapper

Laut iBatis-Dokumentation kann man durch folgenden Codeblock den SqlMapClient initialisieren.

  1. String resource = “com/ibatis/example/sqlMap-config.xml”;
  2. Reader reader = Resources.getResourceAsReader (resource);
  3. sqlMap =  SqlMapClientBuilder.buildSqlMapClient(reader);

Allerdings funktioniert das aufgrund des ClassLoaders von Eclipse nicht. Man muss sich hierfür den Stream auf die Resource selbst erstellen und damit den SqlMapClient erstellen. (Die sqlMap.xml liegt im Source-Ordner im Package de.thirsch.sample)

  1. String resource = "de/thirsch/sample/sqlMap.xml";
  2. URL url = context.getBundle().getResource(resource);
  3. InputStream reader = url.openStream();
  4. this.sqlMap = SqlMapClientBuilder.buildSqlMapClient(reader);

Damit das Plugin ibatisWrapper auch die weiteren referenzierten SqlMaps findet, muss man im ibatisWrapper-Plugin in der Datei MANIFEST.MF den Eintrag Eclipse-BuddyPolicy auf dependent setzen.

  1. Eclipse-BuddyPolicy: dependent

Ein weiterer Vorteil an dependent ist der Zugriff auf die vom Data-Plugin referenzierten Bibliotheken/Plugins. In diesem Falle das Plugin derbyWrapper. Denn eigentlich möchte ich meinem ibatisWrapper ohnehin nicht im Vorfeld sagen müssen, mit welcher Datenbank ich arbeite.

Vielen Dank an Martin für die Hilfe bei der Suche nach dieser Lösung.