# Nachladen von unbekannten Class-Files im JAR-Archiv



## Guest (4. Sep 2008)

Hallo erstmal alles zusammen,

Ich weiß weder ob mein Titel so toll ist oder ob das hier das richtige Unterforum ist, dehalb schonmal sorry vor weg  :wink: 

Also folgendes Problem: Ich habe hier eine Art Middleware, die als JAR-File "ausgeliefert" wird und scripte in Form von class files, die an sie gesendet werden, ausführt. Das funzt schon alles wunderbar. Jetzt stehe ich vor dem Problem, dass bereits beim deployment bestimmte class files mit in das JAR-Archiv gepackt werden sollen, damit sie ohne den Umweg des Sendens direkt ausgeführt werden. Das Problem ist, dass es bei jedem Deployment unterschiedliche, benutzerspezifische class files sind, deren einzige Gemeinsamkeit darin liegt ein bestimmtes Interface zu implementieren.

Meine Überlegung war bisher, dem Benutzer/Entwickler ein Verzeichnis zur verfügung zu stellen, in dem er alle seine class files, die beim start der Middleware geladen werden sollen, rein wirft. Dann wollte ich mit einem Ant-Script - blauäugig wie ich bin - alle umbenennen in Class1.class, Class2.class etc. und in das JAR-Archiv packen. Dann beim start der Middleware einfach die Klassen Class* durchiterieren. Aber das klappt natürlich nicht, da JAVA meckert, dass der Class-Name nicht mit der enthaltenen Klasse übereinstimmt.

Nun bräuchte ich eure Hilfe, wie ich an das Problem am besten ran gehe. Mir wär schon ziemlich wichtig, dass man das vorgehen mit dem Ordner, in dem man alles rein wirft beibehält aber für alles andere bin ich für jeden Vorschlag offen und dankbar!


----------



## foobar (4. Sep 2008)

Warum willst du die Classfiles umbennen?

Reicht es nicht alle Classfiles in einen festgelegten Ordner zu legen und von dort aus mit einem UrlClassloader zu laden?


----------



## FArt (4. Sep 2008)

Du könntest alle Klassen laden und schauen (Reflection), ob sie ein bestimmtes Interface implementieren.

... ist aber mehr als unschön...

Schöner: es gibt eine Metainformationsdatei an jeder Deploymentunit, die solche Klassen enthalten kann. Beim Programmstart sammelst du diese alle auf (Klassenpfad durchsuchen) und führst sie aus. Wenn zur Laufzeit welche dazukommen können, musst du halt ein Verzeichnis überwachen usw.

Damit kannst du auch komplexere Abläufe abbilden (z.B. wenn diese Dinger mal Abhängigkeiten untereinander aufweisen)...


----------



## ich3k (4. Sep 2008)

Sorry war grad beim Thread erstellen nicht eingelogt...

Also wie gesagt Laufzeit ist kein Thema, das funzt alles schon so wie es soll ... class-files, jar-archive, native-code alles kein Thema.

@foobar
Ja aber davon weiß ich doch noch nicht welche Klassen er geladen hat, oder doch? Das Problem ist ja, dass ich von jeder geladenen Klasse ein Objekt erzeugen muss, damit es überhaupt zur Ausführung kommen kann.

@FArt
Wenn ich ehrlich bin kenn ich mich mit JAR-Archiven nicht wirklich gut aus. Kann ich die wie ein Normales Dateisystem durchsuchen? Die Idee mit den Meta-Informationen klingt gut. Kann ich denn auf das Metainformationen des JAR-Files ohne größeren Aufwand zur Laufzeit zugreifen? Bin ich bei java.util.jar.Manifest richtig?

Was ich vielleicht noch anmerken sollte, ich würde gerne Arbeiten auf dem Dateisystem bei der Laufzeit vermeiden, da das ganze auch irgendwann auf irgendwelchen eingebetteten Systemen laufen soll, die wahrscheinlich nur ne JVM besitzen und ich weiß nicht ob es da überhaupt sowas wie nen Dateisystem gibt.


----------



## foobar (4. Sep 2008)

Du brauchst ein Osgiframework wie equniox das erledigt all das für dich: http://www.eclipse.org/equinox/


----------

