You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@felix.apache.org by ext2 <xu...@tongtech.com> on 2011/06/27 05:46:00 UTC

Why OSGI Configuration is bound to a admin bundle temporary?

Hi:
	I have my own admin bundle which will deploy properties file as osgi
configuration , then deploy and start a application bundle associate with
the property file;
	Most time, After the admin bundle update the OSGI configuration, the
application bundle will got the configuration's properties immediately at
start up time;.
	But rarely, the application bundle must wait for about 4~5 seconds,
otherwise the application bundle can only get a null configuration
properties.
	
	Why? I have confirmed I have set the Bundle location to NULL in the
admin bundle, before starting the application bundle;
	
	Thanks any suggestion;




---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@felix.apache.org
For additional commands, e-mail: users-help@felix.apache.org


Re: Why OSGI Configuration is bound to a admin bundle temporary?

Posted by Roland <wg...@ids.de>.
Ok, now I know why.

I was not aware that service.pid and service.factoryPid are totally
different things. My fault!

--Solved--

Roland wrote
> I still do not know why that does not work but I have a solution.
> 
> This code does not work...
>     ConfigurationAdmin confAdmin =
> getConfigurationAdminService(bundlecontext);
>     if(confAdmin != null){
>       try{
>         configuration = confAdmin.getConfiguration(
*
> pid
*
> );
>       }catch(IOException e){
>          ...
>       }
>       if(configuration != null){
>         return configuration.getProperties(); //returns null
>       }
>     }
> 
> Workaround...
>     ConfigurationAdmin confAdmin =
> getConfigurationAdminService(bundlecontext);
>     if(confAdmin != null){
>       Configuration[] configs = null;
>       
*
> String filter = "(service.factoryPid=" + pid + *)";
*
>       try{
>         configs = confAdmin.listConfigurations(filter);
>       }catch(IOException e){
>         ...
>       }catch(InvalidSyntaxException e){
>         ...
>       }
>       if(configs != null){
>         for(Configuration conf : configs)
>         {
>           Dictionary&lt;String, Object&gt;properties =
> conf.getProperties();
>           ...
>         }
>       }
> 
> Regards...
> Roland





--
View this message in context: http://apache-felix.18485.x6.nabble.com/OSGI-Configuration-cannot-take-effect-immediately-tp4833849p5004266.html
Sent from the Apache Felix - Users mailing list archive at Nabble.com.

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@felix.apache.org
For additional commands, e-mail: users-help@felix.apache.org


Re: Why OSGI Configuration is bound to a admin bundle temporary?

Posted by Roland <wg...@ids.de>.
I still do not know why that does not work, but I have a problem solution.

This code does not work...
    ConfigurationAdmin confAdmin =
getConfigurationAdminService(bundlecontext);
    if(confAdmin != null){
      try{
        configuration = confAdmin.getConfiguration(*pid*);
      }catch(IOException e){
         ...
      }
      if(configuration != null){
        return configuration.getProperties(); //returns null
      }
    }

Workaround...
    ConfigurationAdmin confAdmin =
getConfigurationAdminService(bundlecontext);
    if(confAdmin != null){
      Configuration[] configs = null;
      *String filter = "(service.pid=" + pid + *)";*
      try{
        configs = confAdmin.listConfigurations(filter);
      }catch(IOException e){
        ...
      }catch(InvalidSyntaxException e){
        ...
      }
      if(configs != null){
        for(Configuration conf : configs)
        {
          Dictionary<String, Object>properties = conf.getProperties();
          ...
        }
      }

Regards...
Roland



--
View this message in context: http://apache-felix.18485.x6.nabble.com/OSGI-Configuration-cannot-take-effect-immediately-tp4833849p5004265.html
Sent from the Apache Felix - Users mailing list archive at Nabble.com.

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@felix.apache.org
For additional commands, e-mail: users-help@felix.apache.org


Re: Why OSGI Configuration is bound to a admin bundle temporary?

Posted by Roland <wg...@ids.de>.
I switched to ManagedServiceFactory and the parameter "properties" of the
callback-function ManagedService::updated() is now valid. But
Configuration::getProperties() still returns null even though I had set some
properties and had updated the service. hm...I'll let you know when I've
figured out why this happens.

Regards...
Roland



--
View this message in context: http://apache-felix.18485.x6.nabble.com/OSGI-Configuration-cannot-take-effect-immediately-tp4833849p5004264.html
Sent from the Apache Felix - Users mailing list archive at Nabble.com.

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@felix.apache.org
For additional commands, e-mail: users-help@felix.apache.org


Re: Why OSGI Configuration is bound to a admin bundle temporary?

Posted by Roland <wg...@ids.de>.
Hello Jan,
Thank for your fast response! Ok, I made a stupid mistake.

Bye
Roland



--
View this message in context: http://apache-felix.18485.x6.nabble.com/OSGI-Configuration-cannot-take-effect-immediately-tp4833849p5004258.html
Sent from the Apache Felix - Users mailing list archive at Nabble.com.

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@felix.apache.org
For additional commands, e-mail: users-help@felix.apache.org


Re: Why OSGI Configuration is bound to a admin bundle temporary?

Posted by Jan Willem Janssen <ja...@luminis.eu>.
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

On 7/9/13 4:18 PM, Roland wrote:
> MyClass ctrl = new MyClass(); Dictionary<String, Object> properties
> = new Hashtable<String, Object>(); 
> properties.put(Constants.SERVICE_PID, MyClass.class.getName()); 
> String[] classnames = {ManagedService.class.getName(), 
> MyClass.class.getName()}; rs =
> bundlecontext.registerService(classnames, ctrl, properties);
> 
> ...
> 
> configuration = 
> configAdmin.createFactoryConfiguration(MyClass.class.getName(),
> null); configuration.update(properties);

You're creating a _factory_ configuration, but you've registered your
service not as ManagedServiceFactory, but as plain ManagedService. Use
ConfigAdmin#getConfiguration() instead (it will create a configuration
for you, if needed).

- -- 
Met vriendelijke groeten | Kind regards

Jan Willem Janssen | Software Architect
+31 631 765 814

/My world is revolving around PulseOn and Amdatu/

Luminis Technologies B.V.
J.C. Wilslaan 29
7313 HK   Apeldoorn
+31 88 586 46 30

http://www.luminis-technologies.com
http://www.luminis.eu

KvK (CoC) 09 16 28 93
BTW (VAT) NL8169.78.566.B.01
-----BEGIN PGP SIGNATURE-----
Version: GnuPG/MacGPG2 v2.0.17 (Darwin)
Comment: GPGTools - http://gpgtools.org
Comment: Using GnuPG with Thunderbird - http://www.enigmail.net/

iQIcBAEBAgAGBQJR3B2NAAoJEKF/mP2eHDc4GKoP/1pwGiUSTLVaO+hyEl/zW4W8
zHCf2CqIBeVHXrAasT5c4YufDwhDGF70iSUKrtillQXVi4bC1+LZ6B93+973+Xz5
nobYSviPSP1ITraUMzj/Lws/EE/loZSirB/S/Jx9SWJz9KIJ3WNfoMfCSvjT6KGM
EEQpHACLGZgNoDPzl5zzNUpPlx5mO2C7sDxFLHqzDByCufsCIqVDwC8nSNg26+RF
wGHhHwjPrpkb/UhuypfY5Q3G57odxMP8UrVHjIZ8g1r/yu3KT2HrJ4U+eBvYQhns
Lg4cbUVTmVVlFnkFkXryCvB5/IjFAqqtkehlDgt8hEfFkp7kbWwk+zSOmLe79y1n
AP24KLIcjH6/DjF5/aMsSQytW0kUXeSvnyRx4wP/RhHPiSeB5S+NvngSZGnt3Fdx
akmBzrZhxlWKoriukMjmX/PYfS0skrHEe8laY9RHE4PZ5t96CiwpC+ROTH0OrYKI
a8yCUrlcNMjYRVzaBto2OeUOcP//U3ZVwnvLUikbDQvwvwF7Sajy2N2qyWLiRo62
g+k9PXZrIKoswvDeFmXEn40ARzB5SVSww2DJgislJRpBe8qgqTEr32JGKzRZiYNB
NhtIfboxoq1oLoxu0gp1V46KltyF7D/Ig/fh0LHjSpicbzv6MUHCq5gzYUhJUJBN
0pxabKAEmmMnd9ZcGa1Z
=UMbt
-----END PGP SIGNATURE-----

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@felix.apache.org
For additional commands, e-mail: users-help@felix.apache.org


Re: Why OSGI Configuration is bound to a admin bundle temporary?

Posted by Roland <wg...@ids.de>.
hi,
I have a similar issue. I get the below debug output if I register the
service and the parameter "properties" of the callback-function 
ManagedService::updated() is null. If I call Configuration::update() no
event is fired.

No SynchronousConfigurationListeners to send {0} event to.



  public void start(BundleContext context) throws NullPointerException {
    bundlecontext = context;
    new Thread() {
      public void run() {

        ...

        MyClass ctrl = new MyClass();
        Dictionary<String, Object> properties = new Hashtable<String,
Object>();
        properties.put(Constants.SERVICE_PID, MyClass.class.getName());
        String[] classnames = {ManagedService.class.getName(),
MyClass.class.getName()};
        rs = bundlecontext.registerService(classnames, ctrl, properties);

        ...

        configuration =
configAdmin.createFactoryConfiguration(MyClass.class.getName(), null);
        configuration.update(properties); 
      }
    }.start();
  }

Does anyone have an idea or a suggestion?

Thanks in advance!
Roland



--
View this message in context: http://apache-felix.18485.x6.nabble.com/OSGI-Configuration-cannot-take-effect-immediately-tp4833849p5004254.html
Sent from the Apache Felix - Users mailing list archive at Nabble.com.

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@felix.apache.org
For additional commands, e-mail: users-help@felix.apache.org


Re: Why OSGI Configuration is bound to a admin bundle temporary?

Posted by ext2 <xu...@tongtech.com>.
I checked the osgi specification again. It seems if bundle location is null,
only ManagedService of the first registered bundle will get the update
event, the others cannot; 

But the specification doesn't define another bundle cannot calling
configAdmin.getConfiguration() to retrieve the configuration's properties;

So why the application bundle invoke
configAdmin.getConfiguration().getProperties() , but return a NULL
properties ? 

I have confirmed application bundle only calling
configAdmin.getConfiguration() just after admin bundle has updated the
configuration.  

Does anyone know about it? Or My usage have offend the rules defined  by the
OSGI ConfigAdmin specification?

Thanks any suggestion




> -----original -----
> Sender: ext2 [mailto:xuhb@tongtech.com]
> Date: 2011/6/27 11:46
> Receiver: users@felix.apache.org
> Subject: Why OSGI Configuration is bound to a admin bundle temporary?
> 
> Hi:
> 	I have my own admin bundle which will deploy properties file as osgi
> configuration , then deploy and start a application bundle associate with
> the property file;
> 	Most time, After the admin bundle update the OSGI configuration, the
> application bundle will got the configuration's properties immediately at
> start up time;.
> 	But rarely, the application bundle must wait for about 4~5 seconds,
> otherwise the application bundle can only get a null configuration
> properties.
> 
> 	Why? I have confirmed I have set the Bundle location to NULL in the
> admin bundle, before starting the application bundle;
> 
> 	Thanks any suggestion;
> 
> 
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@felix.apache.org
> For additional commands, e-mail: users-help@felix.apache.org




---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@felix.apache.org
For additional commands, e-mail: users-help@felix.apache.org