Hibernate: Klasse aus externer Jar mappen die nicht im Classpath steht

DonChiechot

Grünschnabel
Hallo Community,

ich habe gleiche Frage auch schon im Hibernate Forum gepostet, bisher aber leider keine Antwort bekommen. Ich würde mich freuen wenn mir hier jemand helfen kann!

Also worum geht es:
Ich habe eine Applikation mit Hibernate entworfen deren Funktionalität ich nun um eine Plugin-Schnittstelle erweitern möchte.
Dafür habe ich einen Ordner /plugins angelegt und mir eine kleine Klasse gebaut, welche über einen URLClassLoader alle *.jar Dateien innerhalb dieses Ordners dynamisch nachläd.

Mein Problem ist nun, dass ich es nicht schaffe die Klassen, die sich in der externen jar befinden zu mappen.
Mein Ansatz war der, dass ich zu jeder Klasse auch die passende *.hbm.xml in die Plugin-Jar lege und über conf.addJar("plugin.jar") die Mappings lade.
Leider endet dieser Ansatz in einer ClassNotFoundException, da Hibernate die Klassen aus dem Plugin nicht kennt. Das hinzufügen der plugin.jar in den Classpath kommt für mich nicht in Frage, da die Plugin ja von beliebigen Entwicklern stammen können, die keinen Zugriff auf den Classpath der Hauptapplikation haben.

Hier noch der dazugehörige Code:

Inhalt der plugin.jar
Terminal.java
Terminal.hbm.xml

Inhalt der Terminal.hbm.xml:
Code:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
  "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
  "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
  <class name="Terminal" table="pw_terminals">
    <id name="id" column="terminal_id" type="integer">
      <generator class="native"/>
    </id>
     <property name="name" column="name" type="string" length="100" not-null="true"/>
     <property name="key" column="terminalkey" type="string" not-null="true"/>  
  </class>
</hibernate-mapping>

Schnipsel aus der Hauptapplikation:
Code:
Configuration dbconf = new Configuration().configure();
// read mapping resources of plugins
for (File pluginfile : Plugins.getInstance().listPlugins())
      dbconf.addJar(pluginfile);
SessionFactory fact = dbconf.buildSessionFactory();

Das ganze endet dann in einer ClassNotFoundException für die Klasse Terminal.
 

Neue Beiträge

Zurück