Ahoj,
zjavne som sa snahou o izolovanie problemu do nejakeho jednoducheho
proof-of-concept zamotal.
Principialne mi ide o to, ze mam web aplikaciu, ktora pri inicializacii
spring kontextu nacitava vsetky .properties subory,
ktore sa nachadzaju vo WEB-INF/classes. Tieto property subory sa do toho
adresara dostanu pocas buildu rozkopirovanim
z roznych maven submodulov.
Vid.
<bean id="fooPropertyPlaceholderConfigurer"
class="cz.company.foo.core.utils.props.fooPropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>classpath:*.properties</value>
</list>
</property>
Mojim cielom bolo zabalit vsetky property subory do jedneho jar-ka a to
pribalit k webapp. Vzhladom na
uz citovane "...plus classes and resources in JAR files under the
/WEB-INF/lib directory..." som ocakaval,
ze spring tam tie property uvidi bez ohladu na to, ci budu vo war-e,
alebo az v nim includovanom jar-e.
Ale zjavne ich nevidi a ja nechapen, kde je ten rozpor.
Jedine co ma prave teraz napada je, ze spring neni schopny evaluovat
vyraz "*.properties", pretoze v pripade,
ked su vo web-inf, tak sa rozbalia priamo na filesystem do
TOMCAT/web-apps/...../WEB-INF, kdezto ked su v jar, tak
ich proste nevidi ako subory a neni schopny ziskat ich zoznam...
--
Dusan
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 <[email protected]> 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