For me that approach has been helpful. I started off a year ago with servicemix and as I learned more I moved down to karaf. I still use karaf for deployments but I also mix in custom build capabilities built on bndtools, enroute components and custom classes. I am still learning about the tools out there for OSGI. I read the code and documentation for the tools they suggest because they are almost all open source and I have found the developers very helpful and willing to answer questions and troubleshoot bugs. I do find that people feel very strongly about what they feel the correct way to do things is but if you work on an open library that takes a different approach I find everyone very helpful and sometimes they are willing to contribute. I think that is part of the reason why there are 5 different good libraries to do service injection and they all bring something different.
On Sat, Apr 16, 2016 at 9:46 AM, Milen Dyankov <milendyan...@gmail.com> wrote: > 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 >
_______________________________________________ OSGi Developer Mail List osgi-dev@mail.osgi.org https://mail.osgi.org/mailman/listinfo/osgi-dev