Amen!

> Christian,
>
> I consider that to be one of the worst features of Blueprint, so I
> would be very opposed to adding it to DS!
>
> Regards
> Neil
>
> On Fri, Sep 13, 2013 at 11:17 AM, Christian Schneider
> <[email protected]> wrote:
>> I think you can take a look at what aries blueprint does for these
>> cases.
>> They create a proxy for each injected service and switch the service if
>> the
>> original one goes away. If no service is available then I think it
>> waits for some time for a new one to come and throws an exception if a
>> time
>> out happens.
>>
>> Perhaps a similar behaviour can also be added for DS. Not sure if it
>> matches
>> the DS ideas though.
>>
>> Christian
>>
>>
>> On 13.09.2013 12:10, Thomas Diesler wrote:
>>
>> Thank you all for your replies. We ended up with three measures
>>
>> #1 assert that the component is still valid on entry of every public
>> method
>> (AtomicBoolean set by activate/deactivate)
>> #2 Use a ValidatingReference to hold unary references to dependent
>> services
>> (prevents NPE when a dependent service goes away)
>> #3 Throw an InvalidComponentException runtime exception on #1 and #2
>>
>> The idea is that access to a deactivated reference never throws NPE
>> Access to the public API is prevented from deactivated service instances
>>
>> cheers
>> --thomas
>>
>> On Sep 11, 2013, at 11:11 AM, Richard S. Hall <[email protected]>
>> wrote:
>>
>> Resending my reply from yesterday since my original message didn't seem
>> to
>> go through...
>>
>> ----
>>
>> Yes, you can do some of these sorts of things with iPOJO.
>>
>> First, iPOJO has the notion of a service-level service dependency as
>> well as
>> an implementation-level service dependency (which is the level of DS
>> dependencies). Second, iPOJO caches services references within a service
>> method invocation so that a thread calling a method on a service will
>> see
>> the same injected services until the thread exits the invoked service
>> method.
>>
>> It doesn't deal with configuration locking (at least not of which I am
>> aware).
>>
>> -> richard
>>
>> On 9/10/13 06:41 , Thomas Diesler wrote:
>>
>> Hi Folks,
>>
>> in Fabric we have a service model whereby services have
>> interdependencies,
>> are configurable and dynamic by nature - all of which is managed in OSGi
>> with the help of Declarative Services. To illustrate I use a simple
>> example
>>
>> ServiceT {
>>
>> @Reference
>>         ServiceA serviceA;
>>
>> @Reference
>>         ServiceB serviceB;
>>
>> public doStuff() {
>>    // that uses serviceA & serviceB
>> }
>> }
>>
>>
>> The injection is handled by the DS framework - there are various
>> callbacks
>> involved.
>>
>> Lets assume the system is fully configured and a client makes a call on
>> ServiceT
>>
>> ServiceT serviceT = getServiceT();
>> serviceT.doStuff();
>>
>>
>> Due to the dynamic nature of OSGi services and their respective
>> configuration ServiceT must deal with the following possible/likely
>> situations
>>
>> #1 An instance of a referenced service is not available at the point of
>> access (i.e. serviceA is null)
>> #2 In the context of a single call the service instance may change (i.e.
>> call may span multiple instances of serviceA)
>> #3 In the context of a single call the configuration of a service
>> instance
>> may change (i.e. serviceA is not immutable, sequential operations on A
>> may
>> access different configurations)
>>
>> In OSGi there is no notion of global lock for service/configurations nor
>> a
>> notion of lock of a given set of services/configurations - I cannot do
>>
>> lock(T, A, B);
>> try {
>>    ServiceT serviceT = getServiceT();
>>    serviceT.doStuff();
>> } finally {
>>    unlock(T, A, B);
>> }
>>
>> This code is also flawed because it assumes that the caller of doStuff()
>> is
>> aware of the transitive set of services involved in the call and that
>> this
>> set will not change.
>>
>> As a conclusion we can say that the behaviour of doStuff() is only
>> defined
>> when we assume stability in service availability and their respective
>> configuration, which happens to be true most of the time - nevertheless,
>> there are no guarantees for defined behaviour.
>>
>> How about this …
>>
>> The functionality of A and B and its respective configuration is
>> decoupled
>> from OSGi and its dynamicity
>>
>>
>> A {
>>   final Map config;
>>      public doStuffInA() {
>>      }
>> }
>>
>> B {
>>   final Map config;
>>      public doStuffInB() {
>>      }
>> }
>>
>>
>> ServiceA and ServiceB are providers of immutable instances of A and B
>> respectively. There is a notion of CallContext that provides an
>> idempotent
>> set of instances involved in the call.
>>
>> CallContext {
>>      public T get(Class<T> type);
>> }
>>
>> This guarantees that throughout the duration of a call we always access
>> the
>> same instance, which itself is immutable. CallContext also takes care of
>> instance availability and may have appropriate timeouts if a given
>> instance
>> type cannot be provided. It would still be the responsibility of A/B to
>> decide wether an operation is permissible on stale configuration.
>>
>> Changes to the system would be non-trival and before I do any
>> prototyping
>> I'd like to hear what you think.
>>
>> cheers
>> --thomas
>>
>>
>>
>> _______________________________________________
>> 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
>>
>>
>>
>> --
>> Christian Schneider
>> http://www.liquid-reality.de
>>
>> Open Source Architect
>> http://www.talend.com
>>
>>
>> _______________________________________________
>> 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