views:

88

answers:

2

I have a growing web application which now needs to be able to store user and system preferences / settings. In the past I've always rolled my own preferences system for web applications but I was wondering what other people do to solve this problem? Are there any preference libraries for web applications that people could recommend?

Ideally user preferences should have a default value which the user can then override. Not all preferences should be exposed to the user though as some will be for things such as the last position of a dialog box.

If I go the roll-my-own route I think it will be a separate preferences table with all the preferences stored as strings converted to their true, primitive, data type as required. e.g. a table something like key,user_key,setting_name,setting_value. I favour this approach to a column per data type because it stops a setting from accidently ending up with two values and the consumer of a setting should know what data type they want.

+1  A: 

One approach we use is:

  • all non-mandatory properties have defaults in code
  • deliver a properties file with the web application in which we define the technical oriented properties
  • query a SQL table on application startup to load mainly functional oriented properties

The properties from the database have a higher priority than those from the included property file. If your requirement is to prevent functional managers from changing techical properties you can add a context column to the properties table which is checked in the management UI.

All the application code gets to see is one globally used properties collection.

rsp
A: 

There's a JDK API for that: java.util.prefs

http://java.sun.com/j2se/1.4.2/docs/guide/lang/preferences.html

Claude Vedovini
Thanks, I was aware of the preference system and I've used it in a few desktop applications. It could probably be made to do what I want but I think it's a fairly poor choice for a web application. I see it's two biggest failings as no out of the box database storage of settings and no concept of user sessions (it supports per user settings but not in the manner a web application needs).
wobblycogs