Avatar billede kasseper Nybegynder
29. juli 2003 - 10:06 Der er 14 kommentarer og
1 løsning

tomcat caching xml file

hej.

Jeg har en xml fil, hvor jeg ligger alle mine properties i. Det er så meningen at jeg skal kunne ændre i den runtime og ændringerne skal så slå igennem runtime, altså uden restart.
Men når jeg læser fra filen, er det de gamle properties der læses efter at jeg har rettet dem, warum ???

/Kasseper
Avatar billede arne_v Ekspert
29. juli 2003 - 10:13 #1
Læser du den via classloader resource eller direkte som fil ?

Det sidste bør ihvertfald virke.
Avatar billede kasseper Nybegynder
29. juli 2003 - 10:16 #2
den ligger i web-inf/classes og jeg tilgår den således :

resource = PropertyGetter.class.getResourceAsStream(location);
try {
    Document tmp = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(resource);
    tree = new TreeWalkerImpl(tmp, NodeFilter.SHOW_ALL, null, false);
Avatar billede kasseper Nybegynder
29. juli 2003 - 10:17 #3
location er så "/properties.xml"
Avatar billede arne_v Ekspert
29. juli 2003 - 10:30 #4
Gad vide om class loaderen også cacher den slags.

Kunne du for sjovs skyld prøve at at åbne den som FileInputStream
med absolut path og se om den så registerer rettelserne ?

Ikke fordi det er en god løsning, men bar efor at være helt sikre på
hvor problemet ligger.
Avatar billede kasseper Nybegynder
29. juli 2003 - 10:32 #5
hang on...
Avatar billede kasseper Nybegynder
29. juli 2003 - 10:33 #6
Ja så virker det sq....
Men hvordan for jeg lige lavet det pænt ????
Avatar billede arne_v Ekspert
29. juli 2003 - 10:34 #7
Der er 2 muligheder.

1)  Du spørger din JSP side/servlet om hvor den ligger og beregner så
    den absolutte path udfra det.

2)  Vi finder en måde at få den classloader til ikke at cache den XML fil.
Avatar billede kasseper Nybegynder
29. juli 2003 - 10:37 #8
Jeg ville jo helst arbejde med nummer 2...:)
Avatar billede arne_v Ekspert
29. juli 2003 - 10:37 #9
re 1)

ServletContext har en metode getRealPath som er beregnet til lige præcis det !
Avatar billede arne_v Ekspert
29. juli 2003 - 10:38 #10
re 2)

Jeg prøver lige at lede lidt.
Avatar billede arne_v Ekspert
29. juli 2003 - 10:59 #11
Ikke meget held med #2.

Hvis du smider den foobar.xml i roden af web app'en burde den kunne
accesses som:

application.getRealPath("/foobar.xml");
getServletContext().getRealPath("/foobar.xml");

Hvis den ligger i WEB-INF classes bliver det noget a la:

String s = application.getRealPath("/notexisting.fil");
s = s.substring(0,s.length()-15);
s = s + "WEB-INF\classes\foobar.xml"; // if PC
Avatar billede kasseper Nybegynder
29. juli 2003 - 11:07 #12
hmmmm.
Mit problem er at i vores produktions miljø, kommer skidtet ikke til at ligge under WEB-INF/classes, men i tomcats conf dir.
Så der lever den helt uden for context...hmmm
Måske må jeg bare leve med en absolute reference....

Jeg leder lige lide videre, jeg fandt nogle tyske sider på www.deja.com, der måske havde en løsning...!
Avatar billede arne_v Ekspert
29. juli 2003 - 11:33 #13
Hvis den skal kunne ligge 2 forskellige steder så er det jo vel lige ved at
du skal have en konfigurations-fil (som kan loades med getResource) der
fortæller hvor den egentlige fil ligger henne !?
Avatar billede arne_v Ekspert
10. august 2003 - 18:16 #14
Du kan nok ligeså godt lukke spørgsmålet.
Avatar billede kasseper Nybegynder
04. december 2003 - 09:56 #15
jeg lukker
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester