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
