You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@commons.apache.org by Andrew Thorburn <nz...@gmail.com> on 2009/09/02 07:13:41 UTC

[CONFIGURATION] Configuration Interpolates when Web Application is run directly under Glassfish, but not when debugging under Eclipse

This is something that doesn't make an awful lot of sense to me:

I've got a web application that uses CommonsConfiguration to configure
the logging (first it loads a configuration file as  base, then loads
a new configuration from the database), and for some reason it will
not interpolate the various parameters when I try and debug it under
Eclipse (using the Glassfish WTP plugin). It just doesn't happen.

I'm using Java 1.5, Commons Configuration 1.6, Commons Lang 2.2,
Eclipse 3.5 and Glassfish 2.1.

I know that it works when I run it under Glassfish directly as I can
see the log file being created in the right directory and such, and I
can also see it printing out the parameters with everything
successfully interpolated and expanded.

I'm not sure exactly why it's not doing anything, but there we go.

It doesn't even interpolate System parameters, including ones that
I've set my self.

I can't provide the code which is actually causing the problem, and
I'm not entirely sure how to replicate it. The best I can do is show
code which behaves in a similar fashion:

	/**
	 * @param args
	 */
	public static void main(String[] args)
	{
		System.setProperty("ProcessID", "pid");
		
		System.out.println("java.io.tmpdir [" +
System.getProperty("java.io.tmpdir") + "]");
		
		Configuration c = new BaseConfiguration();
		c.setProperty("process.default.logfile_directory", "${java.io.tmpdir}");
		c.setProperty("logger.default.filename_prefix", "PREFIX");
		c.setProperty("logger.default.filename_suffix", "log");
		c.setProperty("logger.default.filename",
"${logger.default.filename_prefix}${ProcessID}.${logger.default.filename_suffix}");
		c.setProperty("logger.log4j.rootLogger", "ERROR, APP_ROD, APP_EMAIL");
		c.setProperty("logger.log4j.appender.APP_ROD",
"org.apache.log4j.DailyRollingFileAppender");
		c.setProperty("logger.log4j.appender.APP_ROD.File",
"${process.default.logfile_directory}/${ProcessID}/${logger.default.filename}");
		c.setProperty("logger.log4j.appender.APP_ROD.DatePattern", "'.'yyyyMMdd");
		
		CompositeConfiguration cc = new CompositeConfiguration();

		cc.addConfiguration((AbstractConfiguration)c.subset("logger"));
		
		System.out.println(cc.getString("log4j.appender.APP_ROD.File"));
		
		printProperties(ConfigurationConverter.getProperties(cc));
		printProperties(ConfigurationConverter.getProperties(c));
	}
	
	
	private static void printProperties(Properties props)
	{
		
		for(Entry<Object, Object> ent : props.entrySet())
		{
			System.out.println("[" + ent.getKey() + "] [" + ent.getValue() + "]");
		}
	}

And the output from the above:

java.io.tmpdir [/tmp]
${process.default.logfile_directory}/${ProcessID}/${logger.default.filename}

[log4j.rootLogger] [ERROR,APP_ROD,APP_EMAIL]
[log4j.appender.APP_ROD.DatePattern] ['.'yyyyMMdd]
[log4j.appender.APP_ROD] [org.apache.log4j.DailyRollingFileAppender]
[log4j.appender.APP_ROD.File]
[${process.default.logfile_directory}/${ProcessID}/${logger.default.filename}]
[default.filename_prefix] [PREFIX]
[default.filename_suffix] [log]
[default.filename]
[${logger.default.filename_prefix}${ProcessID}.${logger.default.filename_suffix}]

[process.default.logfile_directory] [${java.io.tmpdir}]
[logger.default.filename_prefix] [PREFIX]
[logger.default.filename_suffix] [log]
[logger.log4j.appender.APP_ROD.File]
[${java.io.tmpdir}/${ProcessID}/PREFIX${ProcessID}.log]
[logger.default.filename] [PREFIX${ProcessID}.log]
[logger.log4j.appender.APP_ROD.DatePattern] ['.'yyyyMMdd]
[logger.log4j.appender.APP_ROD] [org.apache.log4j.DailyRollingFileAppender]
[logger.log4j.rootLogger] [ERROR,APP_ROD,APP_EMAIL]

Which seems a little... odd... since it left
process.default.logfile_directory as ${java.io.tmpdir} despite the
property definitely being set.

This differs from my actual problem in that *no* interpolation is
performed when converting to a Properties Object. None at all. Also,
the properties are loaded from an XML file, and then from a
CombinedConfiguration constructed from the XMLFile, System Properties
and a Database Table.

I *know* that it works normally, as a temporary log winds up /tmp.

Having said the above, if I stop Glassfish in Eclipse and then start
it from the command line, I get the same issue (of no interpolation).

There's a variety of issues that could be the problem here. It could
be something funny about the Glassfish plugin. It could be something
to do with how I've got the web project set up - prior to this, it was
built via Ant and deployed directly. It could be something to do with
Eclipse's compiler/classpath/whatever settings.

However, I really don't have a clue where to begin here - has anyone
seen this sort of problem before and been able to find a solution? Any
hints would be most welcome, as I'm not even certain that this is
actually a commons-configuration problem. It's just that
commons-configuration is the visible symptom.

Apologies if the above seems disjointed or unclear.

Thanks,

- Andrew Thorburn

---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@commons.apache.org
For additional commands, e-mail: user-help@commons.apache.org


Re: [CONFIGURATION] Configuration Interpolates when Web Application is run directly under Glassfish, but not when debugging under Eclipse

Posted by Andrew Thorburn <nz...@gmail.com>.
Yeah, you know what? I was wrong. I had just loaded up a second copy
of my application into Glassfish without realising it. Go me?

- Andrew

On Thu, Sep 3, 2009 at 1:18 PM, Andrew Thorburn<nz...@gmail.com> wrote:
> Thanks Oliver.
>
> I have no idea why, but it's suddenly started working. I messed about
> with a few things, including dumping the combined configuration (but
> nothing was interpolated), and removing breakpoints which I had set on
> several different copies of my Configurator class.
>
> Absolutely bizarre. All I can do now is hope that it doesn't recur...
>
> Thanks,
>
> - Andrew Thorburn
>
> On Thu, Sep 3, 2009 at 5:05 AM, Oliver
> Heger<ol...@oliver-heger.de> wrote:
>> Hi Andrew,
>>
>> what you describe seems really complicated. I am not sure whether I fully
>> understand the problem, but I hope at least to give you some hints. Comments
>> inline...
>>
>> Andrew Thorburn schrieb:
>>>
>>> This is something that doesn't make an awful lot of sense to me:
>>>
>>> I've got a web application that uses CommonsConfiguration to configure
>>> the logging (first it loads a configuration file as  base, then loads
>>> a new configuration from the database), and for some reason it will
>>> not interpolate the various parameters when I try and debug it under
>>> Eclipse (using the Glassfish WTP plugin). It just doesn't happen.
>>>
>>> I'm using Java 1.5, Commons Configuration 1.6, Commons Lang 2.2,
>>> Eclipse 3.5 and Glassfish 2.1.
>>>
>>> I know that it works when I run it under Glassfish directly as I can
>>> see the log file being created in the right directory and such, and I
>>> can also see it printing out the parameters with everything
>>> successfully interpolated and expanded.
>>>
>>> I'm not sure exactly why it's not doing anything, but there we go.
>>>
>>> It doesn't even interpolate System parameters, including ones that
>>> I've set my self.
>>>
>>> I can't provide the code which is actually causing the problem, and
>>> I'm not entirely sure how to replicate it. The best I can do is show
>>> code which behaves in a similar fashion:
>>>
>>>        /**
>>>         * @param args
>>>         */
>>>        public static void main(String[] args)
>>>        {
>>>                System.setProperty("ProcessID", "pid");
>>>
>>>                System.out.println("java.io.tmpdir [" +
>>> System.getProperty("java.io.tmpdir") + "]");
>>>
>>>                Configuration c = new BaseConfiguration();
>>>                c.setProperty("process.default.logfile_directory",
>>> "${java.io.tmpdir}");
>>>                c.setProperty("logger.default.filename_prefix", "PREFIX");
>>>                c.setProperty("logger.default.filename_suffix", "log");
>>>                c.setProperty("logger.default.filename",
>>>
>>> "${logger.default.filename_prefix}${ProcessID}.${logger.default.filename_suffix}");
>>>                c.setProperty("logger.log4j.rootLogger", "ERROR, APP_ROD,
>>> APP_EMAIL");
>>>                c.setProperty("logger.log4j.appender.APP_ROD",
>>> "org.apache.log4j.DailyRollingFileAppender");
>>>                c.setProperty("logger.log4j.appender.APP_ROD.File",
>>>
>>> "${process.default.logfile_directory}/${ProcessID}/${logger.default.filename}");
>>>                c.setProperty("logger.log4j.appender.APP_ROD.DatePattern",
>>> "'.'yyyyMMdd");
>>>
>>>                CompositeConfiguration cc = new CompositeConfiguration();
>>>
>>>
>>>  cc.addConfiguration((AbstractConfiguration)c.subset("logger"));
>>>
>>>
>>>  System.out.println(cc.getString("log4j.appender.APP_ROD.File"));
>>>
>>>                printProperties(ConfigurationConverter.getProperties(cc));
>>>                printProperties(ConfigurationConverter.getProperties(c));
>>>        }
>>>
>>>
>>>        private static void printProperties(Properties props)
>>>        {
>>>
>>>                for(Entry<Object, Object> ent : props.entrySet())
>>>                {
>>>                        System.out.println("[" + ent.getKey() + "] [" +
>>> ent.getValue() + "]");
>>>                }
>>>        }
>>>
>>> And the output from the above:
>>>
>>> java.io.tmpdir [/tmp]
>>>
>>> ${process.default.logfile_directory}/${ProcessID}/${logger.default.filename}
>>>
>>> [log4j.rootLogger] [ERROR,APP_ROD,APP_EMAIL]
>>> [log4j.appender.APP_ROD.DatePattern] ['.'yyyyMMdd]
>>> [log4j.appender.APP_ROD] [org.apache.log4j.DailyRollingFileAppender]
>>> [log4j.appender.APP_ROD.File]
>>>
>>> [${process.default.logfile_directory}/${ProcessID}/${logger.default.filename}]
>>> [default.filename_prefix] [PREFIX]
>>> [default.filename_suffix] [log]
>>> [default.filename]
>>>
>>> [${logger.default.filename_prefix}${ProcessID}.${logger.default.filename_suffix}]
>>>
>>> [process.default.logfile_directory] [${java.io.tmpdir}]
>>> [logger.default.filename_prefix] [PREFIX]
>>> [logger.default.filename_suffix] [log]
>>> [logger.log4j.appender.APP_ROD.File]
>>> [${java.io.tmpdir}/${ProcessID}/PREFIX${ProcessID}.log]
>>> [logger.default.filename] [PREFIX${ProcessID}.log]
>>> [logger.log4j.appender.APP_ROD.DatePattern] ['.'yyyyMMdd]
>>> [logger.log4j.appender.APP_ROD]
>>> [org.apache.log4j.DailyRollingFileAppender]
>>> [logger.log4j.rootLogger] [ERROR,APP_ROD,APP_EMAIL]
>>>
>>> Which seems a little... odd... since it left
>>> process.default.logfile_directory as ${java.io.tmpdir} despite the
>>> property definitely being set.
>>
>> If you work with a plain configuration like BaseConfiguration, system
>> properties are not interpolated out of the box. You need to prefix the
>> variable with the "sys:" prefix. There is an example in the user guide:
>> http://commons.apache.org/configuration/userguide/howto_basicfeatures.html#Variable_Interpolation
>>
>> However, when using a CombinedConfiguration that includes a
>> SystemConfiguration the situation is different as the SystemConfiguration
>> should make all its properties available.
>>
>>>
>>> This differs from my actual problem in that *no* interpolation is
>>> performed when converting to a Properties Object. None at all. Also,
>>> the properties are loaded from an XML file, and then from a
>>> CombinedConfiguration constructed from the XMLFile, System Properties
>>> and a Database Table.
>>>
>>> I *know* that it works normally, as a temporary log winds up /tmp.
>>>
>>> Having said the above, if I stop Glassfish in Eclipse and then start
>>> it from the command line, I get the same issue (of no interpolation).
>>>
>>> There's a variety of issues that could be the problem here. It could
>>> be something funny about the Glassfish plugin. It could be something
>>> to do with how I've got the web project set up - prior to this, it was
>>> built via Ant and deployed directly. It could be something to do with
>>> Eclipse's compiler/classpath/whatever settings.
>>>
>>> However, I really don't have a clue where to begin here - has anyone
>>> seen this sort of problem before and been able to find a solution? Any
>>> hints would be most welcome, as I'm not even certain that this is
>>> actually a commons-configuration problem. It's just that
>>> commons-configuration is the visible symptom.
>>>
>>> Apologies if the above seems disjointed or unclear.
>>
>> I think we can assume that the interpolation features of Commons
>> Configuration work as expected - otherwise we would see lots of bug reports.
>> So if interpolation does not work in your case, the combined configuration
>> probably does not contain the properties you expect.
>>
>> To debug the problem you can dump the complete content of the
>> CombinedConfiguration. An easy way to achieve this is to create an
>> XMLConfiguration from the CombinedConfiguration and store it somewhere, e.g.
>> if cc is the CombinedConfiguration:
>>
>> XMLConfiguration xmlConf = new XMLConfiguration(cc);
>> xmlConf.save(new File("dump.xml"));
>>
>> Maybe, depending on the environment you start the application system
>> properties are not propagated as expected?
>>
>> HTH
>> Oliver
>>
>>>
>>> Thanks,
>>>
>>> - Andrew Thorburn
>>>
>>> ---------------------------------------------------------------------
>>> To unsubscribe, e-mail: user-unsubscribe@commons.apache.org
>>> For additional commands, e-mail: user-help@commons.apache.org
>>>
>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: user-unsubscribe@commons.apache.org
>> For additional commands, e-mail: user-help@commons.apache.org
>>
>>
>

---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@commons.apache.org
For additional commands, e-mail: user-help@commons.apache.org


Re: [CONFIGURATION] Configuration Interpolates when Web Application is run directly under Glassfish, but not when debugging under Eclipse

Posted by Andrew Thorburn <nz...@gmail.com>.
Thanks Oliver.

I have no idea why, but it's suddenly started working. I messed about
with a few things, including dumping the combined configuration (but
nothing was interpolated), and removing breakpoints which I had set on
several different copies of my Configurator class.

Absolutely bizarre. All I can do now is hope that it doesn't recur...

Thanks,

- Andrew Thorburn

On Thu, Sep 3, 2009 at 5:05 AM, Oliver
Heger<ol...@oliver-heger.de> wrote:
> Hi Andrew,
>
> what you describe seems really complicated. I am not sure whether I fully
> understand the problem, but I hope at least to give you some hints. Comments
> inline...
>
> Andrew Thorburn schrieb:
>>
>> This is something that doesn't make an awful lot of sense to me:
>>
>> I've got a web application that uses CommonsConfiguration to configure
>> the logging (first it loads a configuration file as  base, then loads
>> a new configuration from the database), and for some reason it will
>> not interpolate the various parameters when I try and debug it under
>> Eclipse (using the Glassfish WTP plugin). It just doesn't happen.
>>
>> I'm using Java 1.5, Commons Configuration 1.6, Commons Lang 2.2,
>> Eclipse 3.5 and Glassfish 2.1.
>>
>> I know that it works when I run it under Glassfish directly as I can
>> see the log file being created in the right directory and such, and I
>> can also see it printing out the parameters with everything
>> successfully interpolated and expanded.
>>
>> I'm not sure exactly why it's not doing anything, but there we go.
>>
>> It doesn't even interpolate System parameters, including ones that
>> I've set my self.
>>
>> I can't provide the code which is actually causing the problem, and
>> I'm not entirely sure how to replicate it. The best I can do is show
>> code which behaves in a similar fashion:
>>
>>        /**
>>         * @param args
>>         */
>>        public static void main(String[] args)
>>        {
>>                System.setProperty("ProcessID", "pid");
>>
>>                System.out.println("java.io.tmpdir [" +
>> System.getProperty("java.io.tmpdir") + "]");
>>
>>                Configuration c = new BaseConfiguration();
>>                c.setProperty("process.default.logfile_directory",
>> "${java.io.tmpdir}");
>>                c.setProperty("logger.default.filename_prefix", "PREFIX");
>>                c.setProperty("logger.default.filename_suffix", "log");
>>                c.setProperty("logger.default.filename",
>>
>> "${logger.default.filename_prefix}${ProcessID}.${logger.default.filename_suffix}");
>>                c.setProperty("logger.log4j.rootLogger", "ERROR, APP_ROD,
>> APP_EMAIL");
>>                c.setProperty("logger.log4j.appender.APP_ROD",
>> "org.apache.log4j.DailyRollingFileAppender");
>>                c.setProperty("logger.log4j.appender.APP_ROD.File",
>>
>> "${process.default.logfile_directory}/${ProcessID}/${logger.default.filename}");
>>                c.setProperty("logger.log4j.appender.APP_ROD.DatePattern",
>> "'.'yyyyMMdd");
>>
>>                CompositeConfiguration cc = new CompositeConfiguration();
>>
>>
>>  cc.addConfiguration((AbstractConfiguration)c.subset("logger"));
>>
>>
>>  System.out.println(cc.getString("log4j.appender.APP_ROD.File"));
>>
>>                printProperties(ConfigurationConverter.getProperties(cc));
>>                printProperties(ConfigurationConverter.getProperties(c));
>>        }
>>
>>
>>        private static void printProperties(Properties props)
>>        {
>>
>>                for(Entry<Object, Object> ent : props.entrySet())
>>                {
>>                        System.out.println("[" + ent.getKey() + "] [" +
>> ent.getValue() + "]");
>>                }
>>        }
>>
>> And the output from the above:
>>
>> java.io.tmpdir [/tmp]
>>
>> ${process.default.logfile_directory}/${ProcessID}/${logger.default.filename}
>>
>> [log4j.rootLogger] [ERROR,APP_ROD,APP_EMAIL]
>> [log4j.appender.APP_ROD.DatePattern] ['.'yyyyMMdd]
>> [log4j.appender.APP_ROD] [org.apache.log4j.DailyRollingFileAppender]
>> [log4j.appender.APP_ROD.File]
>>
>> [${process.default.logfile_directory}/${ProcessID}/${logger.default.filename}]
>> [default.filename_prefix] [PREFIX]
>> [default.filename_suffix] [log]
>> [default.filename]
>>
>> [${logger.default.filename_prefix}${ProcessID}.${logger.default.filename_suffix}]
>>
>> [process.default.logfile_directory] [${java.io.tmpdir}]
>> [logger.default.filename_prefix] [PREFIX]
>> [logger.default.filename_suffix] [log]
>> [logger.log4j.appender.APP_ROD.File]
>> [${java.io.tmpdir}/${ProcessID}/PREFIX${ProcessID}.log]
>> [logger.default.filename] [PREFIX${ProcessID}.log]
>> [logger.log4j.appender.APP_ROD.DatePattern] ['.'yyyyMMdd]
>> [logger.log4j.appender.APP_ROD]
>> [org.apache.log4j.DailyRollingFileAppender]
>> [logger.log4j.rootLogger] [ERROR,APP_ROD,APP_EMAIL]
>>
>> Which seems a little... odd... since it left
>> process.default.logfile_directory as ${java.io.tmpdir} despite the
>> property definitely being set.
>
> If you work with a plain configuration like BaseConfiguration, system
> properties are not interpolated out of the box. You need to prefix the
> variable with the "sys:" prefix. There is an example in the user guide:
> http://commons.apache.org/configuration/userguide/howto_basicfeatures.html#Variable_Interpolation
>
> However, when using a CombinedConfiguration that includes a
> SystemConfiguration the situation is different as the SystemConfiguration
> should make all its properties available.
>
>>
>> This differs from my actual problem in that *no* interpolation is
>> performed when converting to a Properties Object. None at all. Also,
>> the properties are loaded from an XML file, and then from a
>> CombinedConfiguration constructed from the XMLFile, System Properties
>> and a Database Table.
>>
>> I *know* that it works normally, as a temporary log winds up /tmp.
>>
>> Having said the above, if I stop Glassfish in Eclipse and then start
>> it from the command line, I get the same issue (of no interpolation).
>>
>> There's a variety of issues that could be the problem here. It could
>> be something funny about the Glassfish plugin. It could be something
>> to do with how I've got the web project set up - prior to this, it was
>> built via Ant and deployed directly. It could be something to do with
>> Eclipse's compiler/classpath/whatever settings.
>>
>> However, I really don't have a clue where to begin here - has anyone
>> seen this sort of problem before and been able to find a solution? Any
>> hints would be most welcome, as I'm not even certain that this is
>> actually a commons-configuration problem. It's just that
>> commons-configuration is the visible symptom.
>>
>> Apologies if the above seems disjointed or unclear.
>
> I think we can assume that the interpolation features of Commons
> Configuration work as expected - otherwise we would see lots of bug reports.
> So if interpolation does not work in your case, the combined configuration
> probably does not contain the properties you expect.
>
> To debug the problem you can dump the complete content of the
> CombinedConfiguration. An easy way to achieve this is to create an
> XMLConfiguration from the CombinedConfiguration and store it somewhere, e.g.
> if cc is the CombinedConfiguration:
>
> XMLConfiguration xmlConf = new XMLConfiguration(cc);
> xmlConf.save(new File("dump.xml"));
>
> Maybe, depending on the environment you start the application system
> properties are not propagated as expected?
>
> HTH
> Oliver
>
>>
>> Thanks,
>>
>> - Andrew Thorburn
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: user-unsubscribe@commons.apache.org
>> For additional commands, e-mail: user-help@commons.apache.org
>>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: user-unsubscribe@commons.apache.org
> For additional commands, e-mail: user-help@commons.apache.org
>
>

---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@commons.apache.org
For additional commands, e-mail: user-help@commons.apache.org


Re: [CONFIGURATION] Configuration Interpolates when Web Application is run directly under Glassfish, but not when debugging under Eclipse

Posted by Oliver Heger <ol...@oliver-heger.de>.
Hi Andrew,

what you describe seems really complicated. I am not sure whether I 
fully understand the problem, but I hope at least to give you some 
hints. Comments inline...

Andrew Thorburn schrieb:
> This is something that doesn't make an awful lot of sense to me:
> 
> I've got a web application that uses CommonsConfiguration to configure
> the logging (first it loads a configuration file as  base, then loads
> a new configuration from the database), and for some reason it will
> not interpolate the various parameters when I try and debug it under
> Eclipse (using the Glassfish WTP plugin). It just doesn't happen.
> 
> I'm using Java 1.5, Commons Configuration 1.6, Commons Lang 2.2,
> Eclipse 3.5 and Glassfish 2.1.
> 
> I know that it works when I run it under Glassfish directly as I can
> see the log file being created in the right directory and such, and I
> can also see it printing out the parameters with everything
> successfully interpolated and expanded.
> 
> I'm not sure exactly why it's not doing anything, but there we go.
> 
> It doesn't even interpolate System parameters, including ones that
> I've set my self.
> 
> I can't provide the code which is actually causing the problem, and
> I'm not entirely sure how to replicate it. The best I can do is show
> code which behaves in a similar fashion:
> 
> 	/**
> 	 * @param args
> 	 */
> 	public static void main(String[] args)
> 	{
> 		System.setProperty("ProcessID", "pid");
> 		
> 		System.out.println("java.io.tmpdir [" +
> System.getProperty("java.io.tmpdir") + "]");
> 		
> 		Configuration c = new BaseConfiguration();
> 		c.setProperty("process.default.logfile_directory", "${java.io.tmpdir}");
> 		c.setProperty("logger.default.filename_prefix", "PREFIX");
> 		c.setProperty("logger.default.filename_suffix", "log");
> 		c.setProperty("logger.default.filename",
> "${logger.default.filename_prefix}${ProcessID}.${logger.default.filename_suffix}");
> 		c.setProperty("logger.log4j.rootLogger", "ERROR, APP_ROD, APP_EMAIL");
> 		c.setProperty("logger.log4j.appender.APP_ROD",
> "org.apache.log4j.DailyRollingFileAppender");
> 		c.setProperty("logger.log4j.appender.APP_ROD.File",
> "${process.default.logfile_directory}/${ProcessID}/${logger.default.filename}");
> 		c.setProperty("logger.log4j.appender.APP_ROD.DatePattern", "'.'yyyyMMdd");
> 		
> 		CompositeConfiguration cc = new CompositeConfiguration();
> 
> 		cc.addConfiguration((AbstractConfiguration)c.subset("logger"));
> 		
> 		System.out.println(cc.getString("log4j.appender.APP_ROD.File"));
> 		
> 		printProperties(ConfigurationConverter.getProperties(cc));
> 		printProperties(ConfigurationConverter.getProperties(c));
> 	}
> 	
> 	
> 	private static void printProperties(Properties props)
> 	{
> 		
> 		for(Entry<Object, Object> ent : props.entrySet())
> 		{
> 			System.out.println("[" + ent.getKey() + "] [" + ent.getValue() + "]");
> 		}
> 	}
> 
> And the output from the above:
> 
> java.io.tmpdir [/tmp]
> ${process.default.logfile_directory}/${ProcessID}/${logger.default.filename}
> 
> [log4j.rootLogger] [ERROR,APP_ROD,APP_EMAIL]
> [log4j.appender.APP_ROD.DatePattern] ['.'yyyyMMdd]
> [log4j.appender.APP_ROD] [org.apache.log4j.DailyRollingFileAppender]
> [log4j.appender.APP_ROD.File]
> [${process.default.logfile_directory}/${ProcessID}/${logger.default.filename}]
> [default.filename_prefix] [PREFIX]
> [default.filename_suffix] [log]
> [default.filename]
> [${logger.default.filename_prefix}${ProcessID}.${logger.default.filename_suffix}]
> 
> [process.default.logfile_directory] [${java.io.tmpdir}]
> [logger.default.filename_prefix] [PREFIX]
> [logger.default.filename_suffix] [log]
> [logger.log4j.appender.APP_ROD.File]
> [${java.io.tmpdir}/${ProcessID}/PREFIX${ProcessID}.log]
> [logger.default.filename] [PREFIX${ProcessID}.log]
> [logger.log4j.appender.APP_ROD.DatePattern] ['.'yyyyMMdd]
> [logger.log4j.appender.APP_ROD] [org.apache.log4j.DailyRollingFileAppender]
> [logger.log4j.rootLogger] [ERROR,APP_ROD,APP_EMAIL]
> 
> Which seems a little... odd... since it left
> process.default.logfile_directory as ${java.io.tmpdir} despite the
> property definitely being set.

If you work with a plain configuration like BaseConfiguration, system 
properties are not interpolated out of the box. You need to prefix the 
variable with the "sys:" prefix. There is an example in the user guide:
http://commons.apache.org/configuration/userguide/howto_basicfeatures.html#Variable_Interpolation

However, when using a CombinedConfiguration that includes a 
SystemConfiguration the situation is different as the 
SystemConfiguration should make all its properties available.

> 
> This differs from my actual problem in that *no* interpolation is
> performed when converting to a Properties Object. None at all. Also,
> the properties are loaded from an XML file, and then from a
> CombinedConfiguration constructed from the XMLFile, System Properties
> and a Database Table.
> 
> I *know* that it works normally, as a temporary log winds up /tmp.
> 
> Having said the above, if I stop Glassfish in Eclipse and then start
> it from the command line, I get the same issue (of no interpolation).
> 
> There's a variety of issues that could be the problem here. It could
> be something funny about the Glassfish plugin. It could be something
> to do with how I've got the web project set up - prior to this, it was
> built via Ant and deployed directly. It could be something to do with
> Eclipse's compiler/classpath/whatever settings.
> 
> However, I really don't have a clue where to begin here - has anyone
> seen this sort of problem before and been able to find a solution? Any
> hints would be most welcome, as I'm not even certain that this is
> actually a commons-configuration problem. It's just that
> commons-configuration is the visible symptom.
> 
> Apologies if the above seems disjointed or unclear.

I think we can assume that the interpolation features of Commons 
Configuration work as expected - otherwise we would see lots of bug 
reports. So if interpolation does not work in your case, the combined 
configuration probably does not contain the properties you expect.

To debug the problem you can dump the complete content of the 
CombinedConfiguration. An easy way to achieve this is to create an 
XMLConfiguration from the CombinedConfiguration and store it somewhere, 
e.g. if cc is the CombinedConfiguration:

XMLConfiguration xmlConf = new XMLConfiguration(cc);
xmlConf.save(new File("dump.xml"));

Maybe, depending on the environment you start the application system 
properties are not propagated as expected?

HTH
Oliver

> 
> Thanks,
> 
> - Andrew Thorburn
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: user-unsubscribe@commons.apache.org
> For additional commands, e-mail: user-help@commons.apache.org
> 


---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@commons.apache.org
For additional commands, e-mail: user-help@commons.apache.org