You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@commons.apache.org by Oliver Heger <Ol...@t-online.de> on 2003/11/06 17:36:11 UTC
[configuration]Read configurations from URLs
I have added a patch to bugzilla which implemnets some new features for
[configuration]. In this posting I will add some comments related to
changes in file loading (to keep things handy I will send another
posting with comments about other areas the patch affects).
As we have already discussed it is problematic that ConfigurationFactory
and some other classes can only load their data from files. I have now
added support for loading from URLs. Unfortunately I had to change a
bunch of classes to achieve this.
At first I had to introduce a new interface BasePathLoader which defines
the setBasePath() and getBasePath() methods. This was necessary because
not all affected classes extend BasePathConfiguration and the
ConfigurationFactory must somehow be able to set the base path.
BasePathConfiguration now implements this interface.
In classes that load data from files (namely DOM4JConfiguration and
PropertiesConfiguration) there was some doublicated code for evaluating
the base path and determining the full path of the file to load. I
refactored this code into a new method getURL() of ConfigurationUtils (I
think this is a good place for it) and adapted it to support URLs, too.
It is a bit tricky to maintain full backwards compatibility. My
implementation (the new getURL() method) interprets the base path (which
is simply a String) as either a URL or a file path. The same is true for
the supplied file name. So old applications (including all unit tests)
will still work: the method finds out that no valid URLs are passed and
then constructs a file object with the full path. If valid URLs are
provided, they are used to locate the data to load. In any case a URL is
returned. The mentioned configuration classes were changed to load their
data from a URL rather than a FileInputStream.
Finally a word about relative file names used for ConfigurationFactory:
ConfigurationFactory uses the current directory "." as a base path if no
other is specified. So relative file names in the XML file processed by
this class are resolved relative to the current directory if not
specified otherwise. In my opinion this is a bit strange because I would
expect the file names to be relative to the location of this XML file.
Especially if the XML is loaded from a URL, the current directory surely
makes no sense. Do you think this should be changed?
My actual implementation uses the following strategy to deal with this
problem: To be backwards compatible the current directory is the default
value for the base path. But if ConfigurationFactory should load its XML
definition file from a URL and no specific base path was set, the URL
itself becomes the base path and file names in the definition file are
resolved relative to this URL.
Oli
---------------------------------------------------------------------
To unsubscribe, e-mail: commons-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: commons-dev-help@jakarta.apache.org