Tak toto je vcelku slusna sprostarna, diky za tip!

Property som supol do podadresara a vsetko zda sa funguje ako ma.

Dakujem.

--
Dusan

Pozor na jeden velky zadrhel s classpath*: ak su properties v koreni JARu, nemusi to fungovat, vid upozornenie v dokumentacii Springu. Je tam nejaky problem s classloadermi, kde hviezdicka v roote nefunguje pre JARy.

http://static.springsource.org/spring/docs/3.1.x/spring-framework-reference/html/resources.html#resources-wildcards-in-path-other-stuff

Riesenie je davat konfiguraky do META-INF:

myepicproject-configs.jar
  |- META-INF
          |- applicationContext.xml

a vyraz potom moze byt

|classpath*:META-INF/*.xml|"

On 23. 8. 2012 9:59, Dusan Zatkovsky wrote:
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





Odpovedet emailem