> Hi all, > > In our application we noticed, that on each invocation of a > LogService.log method the log event is immediately handled by the > EventAdmin to post the Event asynchronously. This means, that the > EventAdmin EventHandler list for the log event is evaluated during the > call to the LogService.log method. The problem is, that this evaluation > may block the LogService.log call, which should IMHO return as fast as > possible.
It seems the LogService implementation is not following the advice of 101.4 of the spec: "The delivery of LogEntry objects to the LogListener object should be done asynchronously. " It seems that if this is fixed, all the other issues go away? > > The concrete implementation of the LogService is the Apache Sling Log > Bundle, which does not call the EventAdmin itself but only calls the > registered LogListeners. The implementation of the EventAdmin Service is > the Apache Felix EventAdmin which in turn registers a LogListener to get > log events and calls EventAdmin.post to send them to registered handlers > asynchronosly. > > According to Section 101.6.4, Log Events, of the compendium spec, the > interaction with EventAdmin is stated as "Log events must be delivered > to the Event Admin service asynchronously". There is implementation flexibility in how the LogEvents are delivered to EventAdmin. One can put that in the LogService impl, in the EventAdmin impl or in a 3rd bridging bundle which handles the interaction. In your case, you have the EventAdmin register a LogListener. Since the LogService spec only suggests that Log Entries be delivered async, Event Admin cannot be guaranteed of that. So the impl of LogListener in EventAdmin should probably assume it is being delivered sync and "convert" it to async by async making the call to EventAdmin.post. > > According to Section 113.7.2, Asynchronous Event Delivery, asynchronous > events are delivered asynchronously but the list of handlers has to be > built during the call to the EventAdmin.post method. > > My interpretation of Section 101.6.4 is, that the EventAdmin.post or > EventAdmin.send method must not be called during the LogService.log call > but asynchronously, i.e. in a separate thread. On the other hand it is > not stated whether the event should be delivered asynchronously or > synchronously from this separate thread. > I think the intention is that post is used to send the event. > Is this assumption correct ? > > TIA for any help. > > Regards > Felix -- BJ Hargrave Senior Technical Staff Member, IBM OSGi Fellow and CTO of the OSGi Alliance [EMAIL PROTECTED] office: +1 386 848 1781 mobile: +1 386 848 3788
_______________________________________________ OSGi Developer Mail List [email protected] https://mail.osgi.org/mailman/listinfo/osgi-dev
