Container on WebSphere 5.1
Sovellus saa claspathiin serverin hakemiston, josta sovelluksen pitäis hakea kuvia. Toimii ihan jees silleen, että classloafer löytää ne kamat sieltä.
Nyt jos sovelluksen ollessa käynnissä lisään hakemistoon alihakemiston, niin eipä löydä sovellus sen sisältä kamoja.
Saako tota classpathia refreshattua jotenkin runtime?
Lukeeko JVM classpathissa annettujen hakemistojen alihakemistotkin ja käyttää sitten niitä (tää selittäis miksi uusi hakemiston ei löydy)
Onko ainoo ratkaisu korvata kuvien haku classloaderilla suoralla haulla tiedostojärjestelmään vaikka fileinputstreamillä?
Sovellus saa claspathiin serverin hakemiston, josta sovelluksen pitäis hakea kuvia. Toimii ihan jees silleen, että classloafer löytää ne kamat sieltä.
Nyt jos sovelluksen ollessa käynnissä lisään hakemistoon alihakemiston, niin eipä löydä sovellus sen sisältä kamoja.
Saako tota classpathia refreshattua jotenkin runtime?
Lukeeko JVM classpathissa annettujen hakemistojen alihakemistotkin ja käyttää sitten niitä (tää selittäis miksi uusi hakemiston ei löydy)
Onko ainoo ratkaisu korvata kuvien haku classloaderilla suoralla haulla tiedostojärjestelmään vaikka fileinputstreamillä?
Vastaukset 2
Vanhimmat
Minkälaisella hakupolulla haet kuvia uudesta hakemistosta? Classloaderilla haettavat resurssit pitää ilmoittaa "binary name"-muodossa (kts. http://java.sun.com/j2se/1.5.0/docs/api/java/lang/ClassLoader.html#name)
Eli jos olet määrittänyt luokkapoluksi jonkin hakemiston ja luot sen alle uuden hakemiston "alihakemisto", ja sen alle tiedoston "kuva.jpg", Classloaderilla tuon tiedoston saa haettua nimellä "/alihakemisto.kuva.jpg" (tai jotain sinnepäin, en jaksa nyt kokeilla miten tuo tarkalleen ottaen menisi).
Siihen, osaako jvm löytää tuon alihakemiston, jos se luodaan jvm:n käynnistyksen jälkeen, en osaa sanoa. Jos ei, niin toteuta oma classloaderi, joka osaa. Classloaderin kirjoittaminen on hyvin helppoa..
classpathissa on polku /opt/jotain/jotain/pictures
classloaderille annan /alihakemisto/kuva.jpg
ja se löytää kuvan, jos hakemisto oli olemassa kun JVM käynnistettiin.
Taidan tehdä vain luokan, joka hakee kuvahakemiston jostain sovellus.properties-tiedostosta ja luokan metodi ottaa alihakemiston ja kuvan nimen. Sitten vaan tiedosto auki vaikka
OutputStream out = resp.getOutputStream();
RandomAccessFile raf = new RandomAccessFile( filename, "r" );
byte [] loader = new byte [ (int) raf.length() ];
while ( (raf.read( loader )) > 0 ) {
out.write( loader );