You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@commons.apache.org by Srinivas Jonnalagadda <sr...@yahoo.com> on 2011/09/03 07:48:06 UTC

get the properties object loaded after the delayed refresh

Hi,

Below is the code for i wrote and seems at the propsConfig object gets refreshd after the delay but the result object has the old values still. How do i get the new values into the result object after the refresh. I am trying to create a Configuration listener as well and that alos seems not to work.  The main objective for me is to get the properties object loaded with new values without JBOSS server restart. Any help is appreciated.


Regards,
Srinivas J

Properties result = null;
Configuration config = null;
URL resourceURL = null;
FileChangedReloadingStrategy refreshStrategy = new FileChangedReloadingStrategy();
refreshStrategy.setRefreshDelay(refreshDelay);

PropertiesConfiguration propsConfig = new PropertiesConfiguration(); 
propsConfig.setFileName(name);
propsConfig.load();
propsConfig.setReloadingStrategy(refreshStrategy); 
result = ConfigurationConverter.getProperties(propsConfig);

Re: configuration --- get the properties object loaded after the delayed refresh

Posted by Ralph Goers <ra...@dslextreme.com>.
Even the listener is triggered by something retrieving a property. There is no thread doing polling.

However, if you are using this with JBoss 5+ I'm not sure the code below will work. I've had developers reporting that JBoss is returning vfsfile as the protocol when the name is turned into a URL and then ConfigurationUtil.fileFromURL fails.  They have reported that using VFSFileChangedReloadingStrategy works fine with JBoss, although it isn't clear to me why since it doesn't explicitly support the vfsfile protocol.

Ralph

On Sep 7, 2011, at 12:07 PM, Srinivas Jonnalagadda wrote:

> Oliver,
>  
> Thanks so i misunderstood the reload startegies. But what about the listeners. Can we trigger signal to reload. I wanted to use ConfigurationChangedListener. But that still doesnt solve the purpose right. For more clarity i am pasting the unit test i wrote:
>  
> Regards,
> srinivas jonnalagadda
>  
> @Test
>  public  void  testGetBuiltPropertyFileName() throws Exception {
>   PropertiesConfiguration config = new PropertiesConfiguration(); 
>   Properties props = null;
>   config.setFileName(TEST_FILE);    
>   config.load(); 
>   FileChangedReloadingStrategy strategy = new FileChangedReloadingStrategy(); 
>   strategy.setRefreshDelay(500); 
>   config.setReloadingStrategy(strategy);       
>   assertEquals(config.getString("JEDI_ENVIRONMENT"),"TEST");
>   props = ConfigurationConverter.getProperties(config);
>   assertEquals(props.getProperty("JEDI_ENVIRONMENT"),"TEST");
>   Thread.sleep(200000); 
>   assertEquals(config.getString("JEDI_ENVIRONMENT"),"TEST");
>   System.out.println("Test");
>   assertEquals(props.getProperty("JEDI_ENVIRONMENT"),"TEST");
>  }
> 
> From: Oliver Heger <ol...@oliver-heger.de>
> To: Commons Users List <us...@commons.apache.org>
> Sent: Wednesday, September 7, 2011 1:05 PM
> Subject: Re: configuration --- get the properties object loaded after the delayed refresh
> 
> Am 07.09.2011 19:03, schrieb Srinivas Jonnalagadda:
>> Oliver,
>> 
>> Thanks for the reply. I wrote a JUNIT test and Below is the code. My aim was that when i set the refresh delay to 500 and after the initial test passed i put a thread.sleep for 2 minutes. when  the thread sleeps i am changing the value of the  JEDI_ENVIRONMENT to some thing else. When the thread wakes up I wanted to see the props refreshed with new values so that the tes tcase fails which means the program runs as expected. Pls help me.
>> 
> Hi Srinivas,
> 
> somehow your code got mangled, so it is hardly readable.
> 
> But if I understand correctly, you obtain a Properties object from the 
> configuration using something like
> 
> Properties props = ConfigurationConverter.getProperties(config);
> 
> Then you expect that the properties are automatically refreshed by the 
> reloading strategy without any further action from your side, correct?
> 
> Well, the reloading strategies do not work that way unfortunately. 
> Currently, there is no implementation which actively monitors a 
> configuration file. Rather, the reloading strategy is only triggered 
> when the configuration object is accessed, e.g. if a property is 
> queried. FileChangedReloadingStrategy then checks the timestamp of the 
> configuration file. If it has changed, it reloads the configuration. So 
> you will only see new values if you query the configuration again.
> 
> HTH
> Oliver
> 
>> 
>> sincerely,
>> Srinivas Jonnalagadda
>>   @TestPropertiesConfiguration config =
>> Properties props =
>> config.setFileName(
>> config.load();
>> FileChangedReloadingStrategy strategy =
>> strategy.setRefreshDelay(500);
>> config.setReloadingStrategy(strategy);
>> assertEquals(config.getString(
>> props = ConfigurationConverter.getProperties(config);
>> assertEquals(props.getProperty(
>> Thread.sleep(200000);
>> assertEquals(config.getString(
>> System.
>> assertEquals(props.getProperty(
>> }
>> 
>>   publicvoidtestGetBuiltPropertyFileName() throwsException {newPropertiesConfiguration(); null;TEST_FILE); newFileChangedReloadingStrategy(); "JEDI_ENVIRONMENT"),"TEST");"JEDI_ENVIRONMENT"),"TEST");"JEDI_ENVIRONMENT"),"TEST");out.println("Test");"JEDI_ENVIRONMENT"),"TEST");
>> 
>> From: Oliver Heger<ol...@oliver-heger.de>
>> To: Commons Users List<us...@commons.apache.org>
>> Sent: Saturday, September 3, 2011 11:05 AM
>> Subject: Re: configuration --- get the properties object loaded after the delayed refresh
>> 
>> Hi,
>> 
>> Am 03.09.2011 07:59, schrieb Srinivas Jonnalagadda:
>>> Hi,
>>> 
>>> Below is the code for i wrote and seems at the propsConfig object gets refreshd after the delay but the result object has the old values still. How do i get the new values into the result object after the refresh. I am trying to create a Configuration listener as well and that alos seems not to work.  The main objective for me is to get the properties object loaded with new values without JBOSS server restart. Any help is appreciated.
>>> 
>>> 
>>> Regards,
>>> Srinivas J
>> 
>> your code looks good, therefore I am not sure whether I fully understand
>> your problem.
>> 
>> How can you tell that the properties configuration object is refreshed
>> correctly when the result object still has the old values? Do you get
>> other results if you access the configuration object directly, e.g. by
>> calling propsConfig.getString("someKey") ? (If so, this would indicate a
>> bug in the ConfigurationConverter.getProperties() implementation.)
>> 
>> Oliver
>> 
>>> 
>>> Properties result = null;
>>> Configuration config = null;
>>> URL resourceURL = null;
>>> FileChangedReloadingStrategy refreshStrategy = new FileChangedReloadingStrategy();
>>> refreshStrategy.setRefreshDelay(refreshDelay);
>>> 
>>> PropertiesConfiguration propsConfig = new PropertiesConfiguration();
>>> propsConfig.setFileName(name);
>>> propsConfig.load();
>>> propsConfig.setReloadingStrategy(refreshStrategy);
>>> result = ConfigurationConverter.getProperties(propsConfig);
>> 
>> 
>> ---------------------------------------------------------------------
>> 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 --- get the properties object loaded after the delayed refresh

Posted by Srinivas Jonnalagadda <sr...@yahoo.com>.
Oliver,
 
Thanks so i misunderstood the reload startegies. But what about the listeners. Can we trigger signal to reload. I wanted to use ConfigurationChangedListener. But that still doesnt solve the purpose right. For more clarity i am pasting the unit test i wrote:
 
Regards,
srinivas jonnalagadda
 
@Test
 public  void  testGetBuiltPropertyFileName() throws Exception {
  PropertiesConfiguration config = new PropertiesConfiguration(); 
  Properties props = null;
  config.setFileName(TEST_FILE);    
  config.load(); 
  FileChangedReloadingStrategy strategy = new FileChangedReloadingStrategy(); 
  strategy.setRefreshDelay(500); 
  config.setReloadingStrategy(strategy);       
  assertEquals(config.getString("JEDI_ENVIRONMENT"),"TEST");
  props = ConfigurationConverter.getProperties(config);
  assertEquals(props.getProperty("JEDI_ENVIRONMENT"),"TEST");
  Thread.sleep(200000); 
  assertEquals(config.getString("JEDI_ENVIRONMENT"),"TEST");
  System.out.println("Test");
  assertEquals(props.getProperty("JEDI_ENVIRONMENT"),"TEST");
 }

From: Oliver Heger <ol...@oliver-heger.de>
To: Commons Users List <us...@commons.apache.org>
Sent: Wednesday, September 7, 2011 1:05 PM
Subject: Re: configuration --- get the properties object loaded after the delayed refresh

Am 07.09.2011 19:03, schrieb Srinivas Jonnalagadda:
> Oliver,
>
> Thanks for the reply. I wrote a JUNIT test and Below is the code. My aim was that when i set the refresh delay to 500 and after the initial test passed i put a thread.sleep for 2 minutes. when  the thread sleeps i am changing the value of the  JEDI_ENVIRONMENT to some thing else. When the thread wakes up I wanted to see the props refreshed with new values so that the tes tcase fails which means the program runs as expected. Pls help me.
>
Hi Srinivas,

somehow your code got mangled, so it is hardly readable.

But if I understand correctly, you obtain a Properties object from the 
configuration using something like

Properties props = ConfigurationConverter.getProperties(config);

Then you expect that the properties are automatically refreshed by the 
reloading strategy without any further action from your side, correct?

Well, the reloading strategies do not work that way unfortunately. 
Currently, there is no implementation which actively monitors a 
configuration file. Rather, the reloading strategy is only triggered 
when the configuration object is accessed, e.g. if a property is 
queried. FileChangedReloadingStrategy then checks the timestamp of the 
configuration file. If it has changed, it reloads the configuration. So 
you will only see new values if you query the configuration again.

HTH
Oliver

>
> sincerely,
> Srinivas Jonnalagadda
>  @TestPropertiesConfiguration config =
> Properties props =
> config.setFileName(
> config.load();
> FileChangedReloadingStrategy strategy =
> strategy.setRefreshDelay(500);
> config.setReloadingStrategy(strategy);
> assertEquals(config.getString(
> props = ConfigurationConverter.getProperties(config);
> assertEquals(props.getProperty(
> Thread.sleep(200000);
> assertEquals(config.getString(
> System.
> assertEquals(props.getProperty(
> }
>
>  publicvoidtestGetBuiltPropertyFileName() throwsException {newPropertiesConfiguration(); null;TEST_FILE); newFileChangedReloadingStrategy(); "JEDI_ENVIRONMENT"),"TEST");"JEDI_ENVIRONMENT"),"TEST");"JEDI_ENVIRONMENT"),"TEST");out.println("Test");"JEDI_ENVIRONMENT"),"TEST");
>
> From: Oliver Heger<ol...@oliver-heger.de>
> To: Commons Users List<us...@commons.apache.org>
> Sent: Saturday, September 3, 2011 11:05 AM
> Subject: Re: configuration --- get the properties object loaded after the delayed refresh
>
> Hi,
>
> Am 03.09.2011 07:59, schrieb Srinivas Jonnalagadda:
>> Hi,
>>
>> Below is the code for i wrote and seems at the propsConfig object gets refreshd after the delay but the result object has the old values still. How do i get the new values into the result object after the refresh. I am trying to create a Configuration listener as well and that alos seems not to work.  The main objective for me is to get the properties object loaded with new values without JBOSS server restart. Any help is appreciated.
>>
>>
>> Regards,
>> Srinivas J
>
> your code looks good, therefore I am not sure whether I fully understand
> your problem.
>
> How can you tell that the properties configuration object is refreshed
> correctly when the result object still has the old values? Do you get
> other results if you access the configuration object directly, e.g. by
> calling propsConfig.getString("someKey") ? (If so, this would indicate a
> bug in the ConfigurationConverter.getProperties() implementation.)
>
> Oliver
>
>>
>> Properties result = null;
>> Configuration config = null;
>> URL resourceURL = null;
>> FileChangedReloadingStrategy refreshStrategy = new FileChangedReloadingStrategy();
>> refreshStrategy.setRefreshDelay(refreshDelay);
>>
>> PropertiesConfiguration propsConfig = new PropertiesConfiguration();
>> propsConfig.setFileName(name);
>> propsConfig.load();
>> propsConfig.setReloadingStrategy(refreshStrategy);
>> result = ConfigurationConverter.getProperties(propsConfig);
>
>
> ---------------------------------------------------------------------
> 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 --- get the properties object loaded after the delayed refresh

Posted by Oliver Heger <ol...@oliver-heger.de>.
Am 07.09.2011 19:03, schrieb Srinivas Jonnalagadda:
> Oliver,
>
> Thanks for the reply. I wrote a JUNIT test and Below is the code. My aim was that when i set the refresh delay to 500 and after the initial test passed i put a thread.sleep for 2 minutes. when  the thread sleeps i am changing the value of the  JEDI_ENVIRONMENT to some thing else. When the thread wakes up I wanted to see the props refreshed with new values so that the tes tcase fails which means the program runs as expected. Pls help me.
>
Hi Srinivas,

somehow your code got mangled, so it is hardly readable.

But if I understand correctly, you obtain a Properties object from the 
configuration using something like

Properties props = ConfigurationConverter.getProperties(config);

Then you expect that the properties are automatically refreshed by the 
reloading strategy without any further action from your side, correct?

Well, the reloading strategies do not work that way unfortunately. 
Currently, there is no implementation which actively monitors a 
configuration file. Rather, the reloading strategy is only triggered 
when the configuration object is accessed, e.g. if a property is 
queried. FileChangedReloadingStrategy then checks the timestamp of the 
configuration file. If it has changed, it reloads the configuration. So 
you will only see new values if you query the configuration again.

HTH
Oliver

>
> sincerely,
> Srinivas Jonnalagadda
>   @TestPropertiesConfiguration config =
> Properties props =
> config.setFileName(
> config.load();
> FileChangedReloadingStrategy strategy =
> strategy.setRefreshDelay(500);
> config.setReloadingStrategy(strategy);
> assertEquals(config.getString(
> props = ConfigurationConverter.getProperties(config);
> assertEquals(props.getProperty(
> Thread.sleep(200000);
> assertEquals(config.getString(
> System.
> assertEquals(props.getProperty(
> }
>
>   publicvoidtestGetBuiltPropertyFileName() throwsException {newPropertiesConfiguration(); null;TEST_FILE); newFileChangedReloadingStrategy(); "JEDI_ENVIRONMENT"),"TEST");"JEDI_ENVIRONMENT"),"TEST");"JEDI_ENVIRONMENT"),"TEST");out.println("Test");"JEDI_ENVIRONMENT"),"TEST");
>
> From: Oliver Heger<ol...@oliver-heger.de>
> To: Commons Users List<us...@commons.apache.org>
> Sent: Saturday, September 3, 2011 11:05 AM
> Subject: Re: configuration --- get the properties object loaded after the delayed refresh
>
> Hi,
>
> Am 03.09.2011 07:59, schrieb Srinivas Jonnalagadda:
>> Hi,
>>
>> Below is the code for i wrote and seems at the propsConfig object gets refreshd after the delay but the result object has the old values still. How do i get the new values into the result object after the refresh. I am trying to create a Configuration listener as well and that alos seems not to work.  The main objective for me is to get the properties object loaded with new values without JBOSS server restart. Any help is appreciated.
>>
>>
>> Regards,
>> Srinivas J
>
> your code looks good, therefore I am not sure whether I fully understand
> your problem.
>
> How can you tell that the properties configuration object is refreshed
> correctly when the result object still has the old values? Do you get
> other results if you access the configuration object directly, e.g. by
> calling propsConfig.getString("someKey") ? (If so, this would indicate a
> bug in the ConfigurationConverter.getProperties() implementation.)
>
> Oliver
>
>>
>> Properties result = null;
>> Configuration config = null;
>> URL resourceURL = null;
>> FileChangedReloadingStrategy refreshStrategy = new FileChangedReloadingStrategy();
>> refreshStrategy.setRefreshDelay(refreshDelay);
>>
>> PropertiesConfiguration propsConfig = new PropertiesConfiguration();
>> propsConfig.setFileName(name);
>> propsConfig.load();
>> propsConfig.setReloadingStrategy(refreshStrategy);
>> result = ConfigurationConverter.getProperties(propsConfig);
>
>
> ---------------------------------------------------------------------
> 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 --- get the properties object loaded after the delayed refresh

Posted by Srinivas Jonnalagadda <sr...@yahoo.com>.
Oliver,
 
Thanks for the reply. I wrote a JUNIT test and Below is the code. My aim was that when i set the refresh delay to 500 and after the initial test passed i put a thread.sleep for 2 minutes. when  the thread sleeps i am changing the value of the  JEDI_ENVIRONMENT to some thing else. When the thread wakes up I wanted to see the props refreshed with new values so that the tes tcase fails which means the program runs as expected. Pls help me.
 
 
sincerely,
Srinivas Jonnalagadda
 @TestPropertiesConfiguration config = 
Properties props = 
config.setFileName(
config.load(); 
FileChangedReloadingStrategy strategy = 
strategy.setRefreshDelay(500); 
config.setReloadingStrategy(strategy); 
assertEquals(config.getString(
props = ConfigurationConverter.getProperties(config);
assertEquals(props.getProperty(
Thread.sleep(200000); 
assertEquals(config.getString(
System.
assertEquals(props.getProperty(
}
 
 publicvoidtestGetBuiltPropertyFileName() throwsException {newPropertiesConfiguration(); null;TEST_FILE); newFileChangedReloadingStrategy(); "JEDI_ENVIRONMENT"),"TEST");"JEDI_ENVIRONMENT"),"TEST");"JEDI_ENVIRONMENT"),"TEST");out.println("Test");"JEDI_ENVIRONMENT"),"TEST");

From: Oliver Heger <ol...@oliver-heger.de>
To: Commons Users List <us...@commons.apache.org>
Sent: Saturday, September 3, 2011 11:05 AM
Subject: Re: configuration --- get the properties object loaded after the delayed refresh

Hi,

Am 03.09.2011 07:59, schrieb Srinivas Jonnalagadda:
> Hi,
>
> Below is the code for i wrote and seems at the propsConfig object gets refreshd after the delay but the result object has the old values still. How do i get the new values into the result object after the refresh. I am trying to create a Configuration listener as well and that alos seems not to work.  The main objective for me is to get the properties object loaded with new values without JBOSS server restart. Any help is appreciated.
>
>
> Regards,
> Srinivas J

your code looks good, therefore I am not sure whether I fully understand 
your problem.

How can you tell that the properties configuration object is refreshed 
correctly when the result object still has the old values? Do you get 
other results if you access the configuration object directly, e.g. by 
calling propsConfig.getString("someKey") ? (If so, this would indicate a 
bug in the ConfigurationConverter.getProperties() implementation.)

Oliver

>
> Properties result = null;
> Configuration config = null;
> URL resourceURL = null;
> FileChangedReloadingStrategy refreshStrategy = new FileChangedReloadingStrategy();
> refreshStrategy.setRefreshDelay(refreshDelay);
>
> PropertiesConfiguration propsConfig = new PropertiesConfiguration();
> propsConfig.setFileName(name);
> propsConfig.load();
> propsConfig.setReloadingStrategy(refreshStrategy);
> result = ConfigurationConverter.getProperties(propsConfig);


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

Re: configuration --- get the properties object loaded after the delayed refresh

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

Am 03.09.2011 07:59, schrieb Srinivas Jonnalagadda:
> Hi,
>
> Below is the code for i wrote and seems at the propsConfig object gets refreshd after the delay but the result object has the old values still. How do i get the new values into the result object after the refresh. I am trying to create a Configuration listener as well and that alos seems not to work.  The main objective for me is to get the properties object loaded with new values without JBOSS server restart. Any help is appreciated.
>
>
> Regards,
> Srinivas J

your code looks good, therefore I am not sure whether I fully understand 
your problem.

How can you tell that the properties configuration object is refreshed 
correctly when the result object still has the old values? Do you get 
other results if you access the configuration object directly, e.g. by 
calling propsConfig.getString("someKey") ? (If so, this would indicate a 
bug in the ConfigurationConverter.getProperties() implementation.)

Oliver

>
> Properties result = null;
> Configuration config = null;
> URL resourceURL = null;
> FileChangedReloadingStrategy refreshStrategy = new FileChangedReloadingStrategy();
> refreshStrategy.setRefreshDelay(refreshDelay);
>
> PropertiesConfiguration propsConfig = new PropertiesConfiguration();
> propsConfig.setFileName(name);
> propsConfig.load();
> propsConfig.setReloadingStrategy(refreshStrategy);
> result = ConfigurationConverter.getProperties(propsConfig);


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


configuration --- get the properties object loaded after the delayed refresh

Posted by Srinivas Jonnalagadda <sr...@yahoo.com>.
Hi,

Below is the code for i wrote and seems at the propsConfig object gets refreshd after the delay but the result object has the old values still. How do i get the new values into the result object after the refresh. I am trying to create a Configuration listener as well and that alos seems not to work.  The main objective for me is to get the properties object loaded with new values without JBOSS server restart. Any help is appreciated.


Regards,
Srinivas J

Properties result = null;
Configuration config = null;
URL resourceURL = null;
FileChangedReloadingStrategy refreshStrategy = new FileChangedReloadingStrategy();
refreshStrategy.setRefreshDelay(refreshDelay);

PropertiesConfiguration propsConfig = new PropertiesConfiguration(); 
propsConfig.setFileName(name);
propsConfig.load();
propsConfig.setReloadingStrategy(refreshStrategy); 
result = ConfigurationConverter.getProperties(propsConfig);