Hallo Community,
bei folgendem Problem benötige ich eure Hilfe:
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.
Ich würde mich freuen wenn ihr mir bei meinem Problem helfen könntet!
Hier noch der dazugehörige Code:
Inhalt der plugin.jarTerminal.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.