Hi,

Simon J Archer schrieb:
> 
> Yes, it is. The challenge is that the provider of the Network service
> needs to then use ConfigurationAdmin to change its own isConnected
> component property as the connection state changes, which while possible
> is more complicated than you'd hope it to be.

Oh yeah, that is true ...

> In the days before DS
> where we used the programmatic service APIs to register services and
> their properties it was actually easier to do this by simply using the
> ServiceRegistration's setProperties(Dictionary) API.

That's probably why I initially proposed to do the service registration
of the Network service "manually" through BundleContext.registerService
in this special use case.

Regards
Felix

> 
> 
> From:         Felix Meschberger <[email protected]>
> To:   OSGi Developer Mail List <[email protected]>
> Date:         09/29/2009 02:24 AM
> Subject:      Re: [osgi-dev] Activate component only after another      
>  component's        state is set
> Sent by:      [email protected]
> 
> 
> ------------------------------------------------------------------------
> 
> 
> 
> Hi,
> 
> Isn't Marcel's proposal possible with the reference target property ?
> Something like:
> 
>    <scr:reference name="xyz"
>          interface="Network"
>          target="(isConnected=true)" />
> 
> My understanding of the target property is to be able to define the
> service reference filter (in addition the target property is supported
> to be configurable through Configuration Admin.
> 
> Regards
> Felix
> 
> Simon J Archer schrieb:
>>
>> Marcel
>>
>> While DS supports component properties that are registered with every
>> provided service, changing the value of such a property programmatically
>> is not supported directly, as it would be via a ServiceRegistration.  In
>> fact, I don't think there's a way to get to the ServiceRegistration that
>> DS creates for registering a component's provided services. The only way
>> I know to change a property of a DS component is using
>> ConfigurationAdmin, but that's likely more complicated than anyone needs.
>>
>> Also see:
>>         [ds] Add support for changing a service's registered properties
>>         _https://www.osgi.org/members/bugzilla/show_bug.cgi?id=596_
>>
>> It appears that there might be some support for this feature request,
>> despite it being RESOLVED/WONTFIX.
>>
>> Regards
>>
>> Simon
>>
>>
>> From:                  Marcel Offermans <[email protected]>
>> To:                  OSGi Developer Mail List <[email protected]>
>> Date:                  09/28/2009 05:28 PM
>> Subject:                  Re: [osgi-dev] Activate component only after
> another
>> component's        state is set
>> Sent by:                  [email protected]
>>
>>
>> ------------------------------------------------------------------------
>>
>>
>>
>> I would add a service property "isConnected" to the Network service  
>> and make a dependency from your Login service to a Network service  
>> with a property isConnected = true.
>>
>> I'm not sure if DS allows this. If not, either manually track it using  
>> a ServiceTracker or use (for example) the Apache Felix Dependency  
>> Manager. Probably iPOJO (also part of Apache Felix) would work too.
>>
>> Greetings, Marcel
>>
>>
>> On Sep 25, 2009, at 21:30 , Luciana Alvite wrote:
>>
>>> Hello dear fellow OSGi devs,
>>>
>>> I have the following simplified scenario in my Declarative Services  
>>> based project:
>>>
>>> 2 Components: Network and Login
>>> Login depends on 1..1 Network component. Network takes care of  
>>> connecting and disconnecting from a given network.
>>>
>>> I would like to make the Login component dependency on Network  
>>> satisfied only when the Network is actually connected, meaning the  
>>> component would only be activated after the "network.connect()"  
>>> method is successfully executed.
>>>
>>> Approaches I have tried:
>>>  - ConfigAdmin > Setting a property "isConnected" for the Network  
>>> component using the ConfigAdmin when the "connect" method is  
>>> successfully executed
>>> Result: Does not work, since changing the properties will require a  
>>> reactivation of the Network component, therefore recreating the  
>>> component and losing the connection.
>>>
>>> - Events > Make login implement EventHandler and listen to Network  
>>> events. When event is "connected", react accordingly. the problem  
>>> here is that the component must be enabled to be able to actually  
>>> receive events. and this goes against the goal of only activating  
>>> the component AFTER the network is connected..
>>>
>>> I have tried google, read the specs several times but could not yet  
>>> think of any suitable implementation , any ideas of how I could  
>>> solve this?
>>>
>>> Thanks in advance for any help or pointers!
>>>
>>> --
>>> Best Regards
>>>
>>> Luciana Alvite _______________________________________________
>>> OSGi Developer Mail List
>>> [email protected]
>>> https://mail.osgi.org/mailman/listinfo/osgi-dev
>>
>> _______________________________________________
>> OSGi Developer Mail List
>> [email protected]
>> https://mail.osgi.org/mailman/listinfo/osgi-dev
>>
>>
>>
>> ------------------------------------------------------------------------
>>
>> _______________________________________________
>> OSGi Developer Mail List
>> [email protected]
>> https://mail.osgi.org/mailman/listinfo/osgi-dev
> _______________________________________________
> OSGi Developer Mail List
> [email protected]
> https://mail.osgi.org/mailman/listinfo/osgi-dev
> 
> 
> 
> ------------------------------------------------------------------------
> 
> _______________________________________________
> OSGi Developer Mail List
> [email protected]
> https://mail.osgi.org/mailman/listinfo/osgi-dev
_______________________________________________
OSGi Developer Mail List
[email protected]
https://mail.osgi.org/mailman/listinfo/osgi-dev

Reply via email to