-->
These old forums are deprecated now and set to read-only. We are waiting for you on our new forums!
More modern, Discourse-based and with GitHub/Google/Twitter authentication built-in.

All times are UTC - 5 hours [ DST ]



Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 2 posts ] 
Author Message
 Post subject: Klasse aus externer Jar mappen welche nicht im Classpath ist
PostPosted: Thu Jun 16, 2011 5:43 am 
Newbie

Joined: Wed Jun 15, 2011 6:49 pm
Posts: 1
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.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.


Top
 Profile  
 
 Post subject: Re: Klasse aus externer Jar mappen welche nicht im Classpath ist
PostPosted: Thu Jun 30, 2011 7:11 am 
Expert
Expert

Joined: Thu Jan 08, 2009 6:16 am
Posts: 661
Location: Germany
Das Problem liegt wohl in den unterschiedlichen Classloadern. Die Klassen des URL-Classloaders sind dem, in dem Hibernate läuft, nicht bekannt. Kannst du sie nicht in den äußeren Loader laden, oder den URL-CL irgendwie als child dem Rootloader hinzufügen?

_________________
-----------------
Need advanced help? http://www.viada.eu


Top
 Profile  
 
Display posts from previous:  Sort by  
Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 2 posts ] 

All times are UTC - 5 hours [ DST ]


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum

Search for:
© Copyright 2014, Red Hat Inc. All rights reserved. JBoss and Hibernate are registered trademarks and servicemarks of Red Hat, Inc.