# JBoss und Classloader



## Verjigorm (9. Jun 2011)

Hallo,

ich habe grade folgendes Problem:
Wir deployen ein WAR-File im JBoss und ich möchte auf eine Datei in diesem WAR zugreifen.

Aus einer Klasse in eben diesem WAR-File mache ich folgendes:

```
String fileName = "client-config.xml";
			final URL resource = getClass().getClassLoader().getResource(fileName);
```
dann greift der ClassLoader auf das Verzeichnis <JBOSS>/server/default/conf zu. Ich frage mich jetzt natürlich wieso dieses conf-Verzeichnis? Ich hätte persönlich auf irgendein lib-verzeichnis getippt. Leider finde ich dazu keine weiteren Infos, wieso genau das so ist.

Das Problem ist mir nur zufällig über den Weg gelaufen beim durchprobieren. Eigentlich möchte ich ja auf die Datei im selben WAR zugreifen. Deswegen hier das eigentlich Problem.
Die Datei "client-config.xml" liegt im WAR unter WEB-INF. Ich mache also nun folgenden Aufruf:

```
String fileName = "client-config.xml";
			final InputStream resource = getClass().getResourceAsStream("../../../../"+fileName);
```
das funktioniert soweit auch ohne Probleme, ich frage mich hierbei aber persönlich:
Geht es nicht einfacher als "../../../../" voranzustellen? Kann ich nicht z.B. direkt auf WEB-INF zugreifen, wie das z.B. der ServletContext machen würde?
Da sieht das relativ einfach so aus:


```
getServletContext().getRealPath("WEB-INF");
```

mfg Verjigorm


----------



## maki (9. Jun 2011)

> Die Datei "client-config.xml" liegt im WAR unter WEB-INF.


Hm.. meinst du unter WEB-INF/classes? Oder liegt die Datei gar nicht im classpath?


----------



## Verjigorm (9. Jun 2011)

Die Datei liegt zur Zeit direkt unter WEB-INF, nicht WEB-INF/classes


----------



## FArt (10. Jun 2011)

Leg die Datei in den Klassenpfad und lade sie dann über den Classloader mit getResourceAsStream.

Zugriffe auf das Filesystem solltest du grundsätzlich vermeiden. Bei Versionen des JBoss ab 5 wirst du mit der URL auf "herkömmlichen Umweg" nichts mehr anfangen können: JBoss verwendet ein virtuelles Filesystem mit eigenem Protokoll. Dann müsstest du das nutzen.


----------



## Verjigorm (10. Jun 2011)

Gibt es denn nicht die Möglichkeit irgendwelche config-files beim Start vom JBoss zu "laden", wie z.B. eine oracle-ds.xml oder eine mail-service.xml.
Ich brauche einfach ein config-file welches offen editierbar ist und nicht in einem war-file "versteckt" ist


----------



## Verjigorm (14. Jun 2011)

*schieb*


----------



## FArt (14. Jun 2011)

Es gibt den Properties-Service, der allerdings alles als Systemproperties setzt.

So ein Service ist aber selber schnell geschrieben. Und die Dateien müssen nicht im WAR liegen um über den CL geladen zu werden.

Überlege dir aber, ob denn die Applikation sinnvoll damit umgehen kann, dass sich Propeties zur Laufzeit ändern, wärend die Applikation weiter läuft und evtl. Änderungen nicht sinnvoll mitbekommt, weil die Deployzyklen von beiden unterschiedlich sind.


----------

