I have a web-interface to edit the property files. Through this JSP the user first selects a property file, I then display all the kesy for this file with checkboxes, user can select the key(s) and then change the values for these if he so wishes. I am able to save the changes rightly to the property file. However when I select the same key for the same file again the old property shows up. I have to restart the application to get the changed property. I have disallowed caching of my JSP. I religiously set all objects (including the property file objects) to null in the JSP everytime. How come the property file object is still being cached?
I'll add my own question as well: How does the application know to reload the properties after you change them? Typically a .properties file is read all-at-once into a java.util.Properties instance. If that loading sequence doesn't contain logic to reload when the file changes, the properties will never be updated.
Joined: Jan 30, 2003
Thanks Bill and David, I am loading the Properties file using a static method of a custom class called PropertyLoader, this is an opensource code that I am using, which laods the file as Resource bundle as follows. I call this static method from my JSP to get the Properties file.
The files are located inside package hierarchy. In my JSP I get the Properties file object using this said static method. Once I am done using the Properties file I set it to null. I have also disabled caching of my JSP. Infact my single JSP does the following: 1. Displays a list of property files available (read from another property file), set this properties file obejct to null after populating the combolist. 2. When use select a file display below (frame like fashion, but actually done without using frames and in the same JSP using query strings) the properties with checkboxes; set this properties file object to null. 3. Display the form with editable values for chosen property, ; set this properties file object to null. 4. Submit this form to a servlet that modifies the property file, confirm changes and give a back-hyperlink to (1) page. The property file names are passed as hidden form field. After I edit the file the changes are saved however the new property file is not loaded. [ December 15, 2003: Message edited by: Yash Sharma ]
Author and all-around good cowpoke
Joined: Mar 22, 2000
I am guessing that the ClassLoader is somehow caching the data. Is there some reason you are going through the bit with the ResourceBundle instead of reading a file? Bill
Joined: Jan 30, 2003
The main reason to go with loading the properties as ResourceBundle (or even other wise using the ClassLoader) is to avoid giving absolute paths. I worked as per the advice given here. My properties file will be located inside a package structure (com.mypkg.myclasses) in WEB-INF/classes. When I try using the following code I get a FileNotFoundException (whether I prefix the package hierarchy or not). I am testing the app on Tomact as of now however the application would be hosted on Websphere finally and I don't want to specify to the user: put the Properties file inside bin or there or that. I want that my files should be where I want them to be.
Is there any way I can provide the absolute path, when loading using IO to avoid the classloader (without hardcoding it) to the PropertyLoader class? [ December 15, 2003: Message edited by: Yash Sharma ]