# getResourceAsStream() aus EJB



## Felli (11. Apr 2012)

Hallo,

ich möchte in einen Singleton-Session-Bean eine XML-Datei mittels getResourceAsStream() laden, die innerhalb einer EJB-Jar verpackt ist. Allerdings bin ich mir unsicher, ob dies gegen die EJB-Spezifikation verstößt, da die Verwendung von Klassen aus dem Paket java.io problematisch ist. Ist dies möglich und wird dies in der Praxis angewandt?

Gäbe es auch andere Möglichkeiten, den Inhalt von XML-Dateien oder Properties-Dateien innerhalb einer EJB zu verwenden (etwa über @Resource)?

Danke


----------



## maki (11. Apr 2012)

Was genau aus [c]java.io[/c] würdest du denn verwenden?


----------



## Felli (11. Apr 2012)

maki hat gesagt.:


> Was genau aus [c]java.io[/c] würdest du denn verwenden?



Ich dachte ja an so etwas: 


```
Thread.currentThread().getContextClassLoader().getResourceAsStream("meinexml.xml")
```

Und da kommt ja ein java.io.InputStream zurück.


----------



## Felli (13. Apr 2012)

Hach, was für eine rege Diskussion hier...

Hat denn noch nie jemand das Problem gehabt, Properties- oder XML-Dateien aus einer Session-Bean zu laden? Zurzeit bin ich eine wenig verwirrt; ich wollte ja einen Classloader dafür verwenden, bin aber dann in der EJB-Spezifikation auf Folgendes gestoßen:



> The enterprise bean must not attempt to create a class loader;
> obtain the current class loader; set the context class loader;



Demnach darf man den Classloader nicht beziehen. In der aktuellen JEE-Spezifikation finde ich jedoch diesen Eintrag:



> In addition to allowing access to referenced classes,
> as described above, any resources contained in the referenced JAR files must
> also be accessible using the Class and ClassLoader getResource methods,
> as allowed by the security permissions of the application.
> ...



Also darf man doch den Classloader und die getResource-Methode verwenden? Untermauert wird dies durch eine Aussage auf http://java.sun.com/blueprints/qanda/ejb_tier/restrictions.html:



> Read-only data can, however, be stored in files in a deployment JAR, and accessed with
> the getResource() or getResourceAsStream() methods of java.lang.Class.



Inzwischen habe ich getResource mit JBoss AS 7 ohne Probleme getestest und werde wohl diese Variante verwenden, um XML-Daten aus einem JAR-Paket zu laden.


----------



## mvitz (13. Apr 2012)

Da dürfte auch eigentlich in diesem Falle nichts gegensprechen.

Primär sind zugriffe auf das Filesystem verboten, da man in dann nicht mehr Clustern kann. Da aber bei dir sich die Resourcen in einem JAR befinden, dass in jedem Falle auf jedem Knoten liegt, kann dir da ja nichts passieren.


----------

