Hi,
What is the current best practice for writing applications using Spring IoC that are configurable at runtime?
For example imagine a CMS application (lol - the mythical Spring based free CMS) that has a Configuration page.
When the admin user goes to this page they would be given the option to choose what authentication mechanism is used:
(*) Jdbc datasource - data source name [jdbc:// ]
( ) Tomcat container managed
( ) CAS
( ) Simple text file
From my currently limited understanding of Spring and Acegi, I can't see how this kind of runtime configuration change can be made easily.
The best solution I can see is having the application's main context XML use:
<import resource="configuration_choices/authtype-beans.xml"/>
...and then in the configuration_choices directory we have authtype-beans.xml which is over-written by the configuration UI when the user changes the options, and contains only:
<import resource="authentication/jdbc-auth-beans.xml"/>
...if for example the user had chosen JDBC authentication.
This allows us to pre-ship bean configs for different config scenarios, without having to copy files / write out XML except for a trivial template-based XML file (shown above) that just has a single filename change in it.
This of course does not cater for:
1. Changing values within the pre-shipped bean config files
2. Reloading
I understand that reloading is slated for 1.3 - is there any clean solution for it now?
Using Spring in a shared hosting environment - a requirement for getting, for something like a free java CMS to get any kind of mass usage - means that we can't restart the container when we want to reload. Also we can't guarantee that we can force a reload our app either.


Reply With Quote