Jay is correct, Castor loads the castor.properties in the following
order:

1. From classpath (usually from the jar file)
2. From {java.home}/lib (if present)
3. From the local working directory


Each one overrides the previous. So you don't have to come up with a
properties file with all the properties and values, just the ones you
want to change.

You can also use LocalConfiguration#getProperties() to change the
properties values programatically.

--Keith

Jay Goldman wrote:
> 
> Castor first loads the castor.properties file it finds by package name using
> the classpath (i.e., the one in the jar), it then looks for an additional
> castor.properties file in a few places (I don't remember the exact order but
> it looks for castor.properties (no package name) (a) using the classpath,
> (b) in the user's home directory, and maybe a 3rd place) and the values in
> this 2nd properties file (if found) override the values set in the first
> one.
> 
> jay goldman
> 
> -----Original Message-----
> From: Werner Guttmann [mailto:[EMAIL PROTECTED]
> Sent: Monday, June 21, 2004 5:57 AM
> To: [EMAIL PROTECTED]
> Subject: Re: [castor-dev] Easier way to configure castor...
> 
> Hi CLaude,
> 
> just a couple of random remarks inline. Please bear in mind that I have not
> looked at the patch below, and will defer doing so until later.
> 
> Werner
> 
> PS Please no HTML email to this mailing list as per
> http://castor.exolab.org/lists.html#A-note-about-HTML-formatted-e-mail.
> 
> --Original Message Text---
> From: Claude Vedovini
> Date: Fri, 18 Jun 2004 16:42:38 +0200
> 
> Hi,
> 
> We went through this problem and were not satisfied with "classpath"
> solution, first because it a bit more tricky for a on site consultant to
> change a
> classpath in Websphere ...
> 
> werner --> Hmm, that is a difficult statement per se .. ;-). First off, I
> didn't mean to imply that the CLASSPATH should be changed for this to work.
> In
> general, it is a very bad idea to have to change the CLASSPATH of a
> Websphere instance at all ... Assuming that you are deploying a web
> application,
> by definition the web app should be self-contained, i.e. everything required
> to run the web app should be part of it. Having said that, this could and
> should include any castor.properties file to override the system defaults.
> By nature, such a file (when placved eg. in WEB-INF/classes of a web
> appllication will 'override' the castor.properties file stored in
> castor-0.9.5.3.jar stored in WEB-INF/lib of your web app.
> 
> . than a system property and because the property file override all the
> properties defined in this of the jar file.
> werner --> Afaik, you do not have to specify all properties in this file,
> just  the ones you actually want to override.
> 
> We wanted something our consultants were already familiar with and the
> possibility to override existing properties, but only those we actually want
> to
> change.
> 
> Consultant were familiar with log4j so we decided to add some lines of code
> to Castor to consider a "castor.configuration" system property and if it
> exist
> use the defined url to override the defaults.
> 
> Here is the patch (it is not against the current code base but I'd be
> surprise it changed a lot since then):
> 
> Index: org/exolab/castor/util/Configuration.java
> ===================================================================
> RCS file:
> /cvs/castor/castor/src/main/org/exolab/castor/util/Configuration.java,v
> retrieving revision 1.3
> diff -u -r1.3 Configuration.java
> --- org/exolab/castor/util/Configuration.java   26 Sep 2003 05:36:07 -0000
> 1.3
> +++ org/exolab/castor/util/Configuration.java   17 Dec 2003 14:57:56 -0000
> @@ -97,6 +97,16 @@
>  public abstract class Configuration
>  {
> 
> +       /**
> +        * String specifying the name of the system property defining
> +        * an URL for the castor.properties file
> +        * <pre>
> +        * castor.configuration
> +        * </pre>
> +        */
> +       public static final String castorPropertiesURL =
> "castor.configuration";
> +
> +
>      /**
>       * Names of properties used in the configuration file.
>       */
> Index: org/exolab/castor/util/LocalConfiguration.java
> ===================================================================
> RCS file:
> /cvs/castor/castor/src/main/org/exolab/castor/util/LocalConfiguration.java,v
> 
> retrieving revision 1.6
> diff -u -r1.6 LocalConfiguration.java
> --- org/exolab/castor/util/LocalConfiguration.java      26 Sep 2003 05:36:07
> -0000      1.6
> +++ org/exolab/castor/util/LocalConfiguration.java      17 Dec 2003 14:57:51
> -0000
> @@ -699,6 +699,33 @@
>                  //-- do nothing
>              }
>          }
> +
> +               // -------------------------------
> +               // Get the overriding configuration from the system property
> 
> +               // ignore if not found. If found, merge any existing
> +               // properties.
> +               try {
> +                       // get the system property
> +                       String configurationStringURL =
> +                               System.getProperty(castorPropertiesURL);
> +                       // If we do have the url, we try to load it
> +                       if (configurationStringURL != null) {
> +                               URL confURL = new
> URL(configurationStringURL);
> +                               // open stream from URL
> +                               InputStream uis = confURL.openStream();
> +                               if (uis != null) {
> +                                       _props = new Properties(_props);
> +                                       // load new properties
> +                                       _props.load(uis);
> +                                       uis.close();
> +                                       // we do not set up the found var
> +                               }
> +                       }
> +               } catch (Exception except) {
> +                       //Ignore
> +               }
> 
> 
> 
> 
> Cheers,
> Claude
> 
> > -----Original Message-----
> > From: Nick Stuart [mailto:[EMAIL PROTECTED]
> > Sent: 17 June 2004 16:30
> > To: [EMAIL PROTECTED]
> > Subject: Re: [castor-dev] Easier way to configure castor..
> >
> >
> > Ya, that's what I figured the case would be. And for the most
> > part this
> > isn't a big deal as you say, stick it in the lib folder for
> > web-apps and
> > you're good to go.  Thanks for the reply!
> >
> > -Nick
> >
> > -------Original Message-----
> > --From: Leo Joncas [mailto:[EMAIL PROTECTED]
> > --Sent: Thursday, June 17, 2004 9:14 AM
> > --To: [EMAIL PROTECTED]
> > --Subject: Re: [castor-dev] Easier way to configure castor...
> > --
> > --We use an external castor.properties file and never mess
> > with the jar.
> > --
> > --The only catch is that the directory containing the
> > --properties file needs to be known to the classloader.
> > --
> > --In the case of using Castor with our JBoss-based web app,
> > --that just means putting the castor.properties file in the
> > --same location as the castor.jar file for loading by JBoss,
> > --i.e. in the directory JBOSS_HOME\server\yourservername\lib.
> > --
> > --For a stand-alone Java app, that just means that your
> > --CLASSPATH should include both the castor.jar file path AND
> > --the path of the directory containing the castor.properties
> > file, i.e.
> > --
> > --
> > CLASSPATH=%CLASSPATH%;yourcastorpath\castor-xml.jar;yourcastorpath
> > --
> > --
> > --Leo Joncas
> > --
> > --
> > -------Original Message-----
> > --From: Nick Stuart [mailto:[EMAIL PROTECTED]
> > --Sent: Thursday, June 17, 2004 8:37 AM
> > --To: [EMAIL PROTECTED]
> > --Subject: [castor-dev] Easier way to configure castor...
> > --
> > --
> > --I was just wondering if there would be an easier way to setup
> > --Castor so that people could configure it from outside the
> > --jar. I find that it can be a little annoying (all though not
> > --all that difficult) to open up the jar file, edit the
> > --properties file, and then repackage it or update it.
> > --
> > --If there is a way to do this just yell at me. :)  But my idea
> > --was to possibly setup up an external properties file that
> > --would get read in first. And any properties in it would
> > --override what ever is in the internal one. (Kind of like how
> > --Ant does it currently). Currently I'm not sure how castor
> > --reads the property file and uses it, i.e.. Does it read it in
> > --all at once, or only when it needs to find out a setting when
> > --running. Guess I'll have to take a look at this, if it's the
> > --first case I would imagine this change wouldn't be all that
> > --difficult, if it's the second I'm not sure what would be involved.
> > --
> > ---Nick
> > --
> > --
> > --
> >
> >
> __________________________________________________________________________
> . This email and any files transmitted with it are CONFIDENTIAL and intended
> solely for the use of the individual or entity to which they are addressed.
> 
> . Any unauthorized copying, disclosure, or distribution of the material
> within
> this email is strictly forbidden.
> . Any views or opinions presented within this e-mail are solely those of the
> author and do not necessarily represent those of Odyssey Asset Management
> Systems SA unless otherwise specifically stated.
> . An electronic message is not binding on its sender.  Any message referring
> to
> a binding engagement must be confirmed in writing and duly signed.
> . If you have received this email in error, please notify the sender
> immediately
> and delete the original.
> 
>   ------------------------------------------------------------------------
> -----------------------------------------------------------
> If you wish to unsubscribe from this mailing, send mail to
> [EMAIL PROTECTED] with a subject of:
>         unsubscribe castor-dev



----------------------------------------------------------- 
If you wish to unsubscribe from this mailing, send mail to
[EMAIL PROTECTED] with a subject of:
        unsubscribe castor-dev

Reply via email to