Webapp, resources a classloader

2012-08-22 Thread Dusan Zatkovsky

Ahoj.

Zapasim s nacitavanim resources z classpath webovej aplikacie v tomcat-e 
a nejak neviem prist veci na klb.


Mam klasicku ( mavenom buildenu ) aplikaciu zlozenu z:
  - lib
  - command line client
  - webapp

lib.jar obsahuje:
  ./src/main/resources/libresource.properties

K tomuto suboru pristupujem v cli a webapp pomocou:

URL url = 
ClassLoader.getSystemResource("libresource.properties");


Properties p = new Properties();
p.load(ClassLoader.getSystemResourceAsStream("libresource.properties"));

V cli aplikacii to funguje, vo webapp nie ( getSystemResource vrati null ).

Tomcat v dokumentacii classloader-u pise:

  A class loader is created for each web application that is deployed 
in a single Tomcat instance.
  All unpacked classes and resources in the /WEB-INF/classes directory 
of your web application,
  --> plus classes and resources in JAR files under the /WEB-INF/lib 
directory <-- of your web application,

  are made visible to this web application, but not to other ones.

Co je presne co chcem. Ale zjavne to nefunguje tak ako ocakavam.

Vygooglil som, ze riesenim je skopirovat ten property file pocas buildu 
priamo do webapp/target/WEB-INF/classes,
co samozrejme nechcem, pretoze to ide presne proti cielu mojho snazenia 
( odstranit z projektu nadbytocne rozkopirovavanie ).


V com robim chybu?

Diky

--
Dusan


Re: Webapp, resources a classloader

2012-08-22 Thread Peter Štibraný
Ahoj,

ja bezne vo web aplikaciach pouzivam

URL url = MojaTrieda.getResource("…");

a funguje to bez problemov. Vo vasom pripade by to zrejme malo byt URL url = 
MojaTrieda.getResource("/src/main/resources/libresource.properties"); pripadne 
iba "/libresource.properties".

Preco sa snazite pouzit getSystemResource a tym padom "System classloader"? 
Podla http://tomcat.apache.org/tomcat-7.0-doc/class-loader-howto.html System 
classloader nemoze vidiet resources z webovych aplikacii. Pouzite bud 
getResource z nejakej vasej classy (ta je urcite nacitana webovym 
classloaderom), alebo pouzite classloader zo ServletContext.getClassLoader().

-Peter

On 22.8.2012, at 17:15, Dusan Zatkovsky  wrote:

> Ahoj.
> 
> Zapasim s nacitavanim resources z classpath webovej aplikacie v tomcat-e a 
> nejak neviem prist veci na klb.
> 
> Mam klasicku ( mavenom buildenu ) aplikaciu zlozenu z:
>  - lib
>  - command line client
>  - webapp
> 
> lib.jar obsahuje:
>  ./src/main/resources/libresource.properties
> 
> K tomuto suboru pristupujem v cli a webapp pomocou:
> 
>URL url = ClassLoader.getSystemResource("libresource.properties");
> 
>Properties p = new Properties();
> p.load(ClassLoader.getSystemResourceAsStream("libresource.properties"));
> 
> V cli aplikacii to funguje, vo webapp nie ( getSystemResource vrati null ).
> 
> Tomcat v dokumentacii classloader-u pise:
> 
>  A class loader is created for each web application that is deployed in a 
> single Tomcat instance.
>  All unpacked classes and resources in the /WEB-INF/classes directory of your 
> web application,
>  --> plus classes and resources in JAR files under the /WEB-INF/lib directory 
> <-- of your web application,
>  are made visible to this web application, but not to other ones.
> 
> Co je presne co chcem. Ale zjavne to nefunguje tak ako ocakavam.
> 
> Vygooglil som, ze riesenim je skopirovat ten property file pocas buildu 
> priamo do webapp/target/WEB-INF/classes,
> co samozrejme nechcem, pretoze to ide presne proti cielu mojho snazenia ( 
> odstranit z projektu nadbytocne rozkopirovavanie ).
> 
> V com robim chybu?
> 
> Diky
> 
> --
> Dusan