Why oh why every time someone asks "help me understand something" everyone
seems to be rushing with answering "don't bother, just use X". It's sad. I
wish someone could provide the answers so that even those of us who are
happy with DS (or whatever else components framework) may learn something
new.
15 kwi 2016 22:57 "Paul F Fraser" <pa...@a2zliving.com> napisał(a):

> What we need is a good book :-)
>
> https://www.indiegogo.com/projects/effective-osgi#/
>
> Paul
>
> On 16/04/2016 5:51 AM, chris.g...@kiffer.be wrote:
>
>> Scripsit Raymond:
>>
>> -1% - blueprint (we have a test that fails the build if someone tries to
>>>
>> Personally I would make this -100% :-)
>>
>> I don't regard DS as "magic", because what it does is rather
>> straightforward conceptually and is clearly described in the
>> specification. I only wish I could say the same for all the other
>> annotation-based frameworks in the Java "ecosystem" ... 7 years ago I
>> would have said to concentrate on ServiceTracker and ignore old tutorials
>> which use the low-level interface, and nowadays I would say concentrate on
>> DS and only start messing with ServiceTracker when you really have to.
>>
>> On Fri, Apr 15, 2016 at 1:34 PM, Alexander Klimetschek
>>> <aklim...@adobe.com>
>>> wrote:
>>>
>>>> FWIW: As a long time user of DS I can only say it's awesome, and I
>>>>
>>> personally would never use OSGi without it. Never seen any problems
>> with
>>
>>> it
>>>> because of "too much magic" - in fact, it's straightforward.
>>>> Cheers,
>>>> Alex
>>>>
>>>>> On 15.04.2016, at 08:41, Neil Bartlett <njbartl...@gmail.com> wrote:
>>>>>
>>>> Michael,
>>
>>> I share your aversion to opaque magic, but I'm not entirely in
>>>>>
>>>> agreement. You seem to be arguing that programmers should have full
>>>>
>>> knowledge of all levels of the stack they are building on. If so, can
>> you
>>
>>> explain in detail how, say, the Java garbage collector works?
>>>>
>>>>> In fact I suspect you probably can... but my point is that you don't
>>>>>
>>>> need this knowledge to be a good Java programmer. You only need to know
>>>>
>>> the
>>
>>> contract offered by the JVM. Likewise you can be productive with DS
>>>>
>>> without
>>
>>> understanding the nitty gritty details of a DS implementation.
>>>>
>>>>> Neil
>>>>> On 15 Apr 2016 3:19 pm, "Michael Lipp" <m...@mnl.de> wrote:
>>>>> Thanks to everyone. Especially to Timothy for pointing out the
>>>>>
>>>> problems
>>>> with the simple approach. I didn't find these problems laid out in any
>>>> of
>>>> the examples or tutorials that I came across.
>>>>
>>>>> I know that a newbie's problems are always a bit "been there, done
>>>>>
>>>> that"
>>>> to the experts. But simply using something like DS without further
>>>>
>>> understanding the problems that it solves is a bit like using magic and
>> I
>>
>>> don't think that this is what programming should be like.
>>>>
>>>>>   - Michael
>>>>> Am 13.04.2016 um 22:47 schrieb Michael Lipp:
>>>>>
>>>>>> Hi,
>>>>>> I'm trying to get a clear picture of the ServiceTracker. I've looked
>>>>>>
>>>>> at
>>>> some examples (e.g. http://www.aqute.biz/Snippets/Tracker), but they
>>>>
>>> all
>>
>>> seem rather complicated. I'm especially interested in knowing when I
>>>>
>>> can
>>
>>> assume a service object to exist.
>>>>
>>>>> It is clear to me from the specification that a service object is
>>>>>>
>>>>> available (different from null) when the default implementation of
>>>>
>>> addingService returns. So to avoid constantly calling
>>
>>> myTracker.getService() (and check for null) whenever I want to invoke a
>>>>
>>> method of the service object, I can derive my own ServiceTracker by
>> overriding addingService (using the LogService as an example):
>>
>>>      @Override
>>>>>>      public LogService addingService(ServiceReference<LogService>
>>>>>>
>>>>> reference) {
>>>>
>>>>>           myLogService = super.addingService(reference);
>>>>>>           // Start the thread(s) that refer to (use) myLogService
>>>>>>
>>>>> return myLogService;
>>
>>>      }
>>>>>> ... and use myLogService until the service becomes unavailable
>>>>>>
>>>>> (invalid).
>>>>
>>>>> It is less clear to me how to know when the service becomes
>>>>>>
>>>>> unavailable. The specification says:
>>>>
>>>>>      removedService(ServiceReference,T) - Called whenever a tracked
>>>>>>
>>>>> service is removed from the
>>>>
>>>>>      ServiceTracker object.
>>>>>> IMHO "is removed" is a bit unspecific (before/after?). However, I
>>>>>>
>>>>> found
>>>> in the Apache Felix implementation (which isn't a specification, of
>>>>
>>> course)
>>
>>> that removedService is invoked while handling the UNREGISTERING event:
>>>>
>>>>>      UNREGISTERING - A service object is in the process of being
>>>>>>
>>>>> unregistered. This event is synchro-
>>>>
>>>>>      nously delivered before the service object has completed
>>>>>>
>>>>> unregistering. That is, during the deliv-
>>>>
>>>>>      ery of this event, the service object is still valid.
>>>>>> So I should be on the safe side if I also override removedService:
>>>>>>      @Override
>>>>>>      public void removedService(ServiceReference<LogService>
>>>>>>
>>>>> reference,
>>>>
>>>>>                                 LogService service) {
>>>>>>          // Interrupt and join the thread(s) that refer to (use)
>>>>>>
>>>>> myLogService
>>>>
>>>>>          myLogService = null;
>>>>>>          super.removedService(reference, service);
>>>>>>      }
>>>>>> Doing it this way, using myLogService in the thread(s) started in
>>>>>>
>>>>> addingService and stopped in in removeService should be safe, right?
>>>>
>>>>>   - Michael
>>>>>> _______________________________________________
>>>>>> OSGi Developer Mail List
>>>>>> osgi-dev@mail.osgi.org
>>>>>> https://mail.osgi.org/mailman/listinfo/osgi-dev
>>>>>>
>>>>> _______________________________________________
>>>>> OSGi Developer Mail List
>>>>> osgi-dev@mail.osgi.org
>>>>> https://mail.osgi.org/mailman/listinfo/osgi-dev
>>>>> _______________________________________________
>>>>> OSGi Developer Mail List
>>>>> osgi-dev@mail.osgi.org
>>>>> https://mail.osgi.org/mailman/listinfo/osgi-dev
>>>>>
>>>> _______________________________________________
>>>> OSGi Developer Mail List
>>>> osgi-dev@mail.osgi.org
>>>> https://mail.osgi.org/mailman/listinfo/osgi-dev
>>>>
>>> --
>>> *Raymond Augé* <http://www.liferay.com/web/raymond.auge/profile>
>>>   (@rotty3000)
>>> Senior Software Architect *Liferay, Inc.* <http://www.liferay.com>
>>>   (@Liferay)
>>> Board Member & EEG Co-Chair, OSGi Alliance <http://osgi.org>
>>> (@OSGiAlliance)
>>> _______________________________________________
>>> OSGi Developer Mail List
>>> osgi-dev@mail.osgi.org
>>> https://mail.osgi.org/mailman/listinfo/osgi-dev
>>>
>>
>>
>>
>> _______________________________________________
>> OSGi Developer Mail List
>> osgi-dev@mail.osgi.org
>> https://mail.osgi.org/mailman/listinfo/osgi-dev
>>
>>
> _______________________________________________
> OSGi Developer Mail List
> osgi-dev@mail.osgi.org
> https://mail.osgi.org/mailman/listinfo/osgi-dev
>
_______________________________________________
OSGi Developer Mail List
osgi-dev@mail.osgi.org
https://mail.osgi.org/mailman/listinfo/osgi-dev

Reply via email to