Hi Bernd, pls see my comments inline.

On Thu, Sep 29, 2011 at 9:18 AM, Bernd Fondermann
<bernd.fonderm...@googlemail.com> wrote:
> On Wed, Sep 28, 2011 at 17:22, Eduardo Martins <emmart...@gmail.com> wrote:
>> Comments? It's a very modest starting point, since the module event
>> listeners interfaces and event firing code are the major tasks, but
>> what do you people think about it?
>
> I briefly reviewed the patch. Unfortunately, I'm currently approaching
> multiple deadlines in real life, so my time is limited.
>
> Within the short time I had to review the patch I'd didn't get the
> full idea behind this.
>
> So if you could give me a head-start, what would be a typical use case
> for these event listeners?

There are lots of XMPP Servers out there, covering the XMPP core
functionality, and with more or less extensions. You can say some have
good performance, some are open source, some are Java code, etc. IMHO,
what sets apart Vysper is its ability to be easily integrated in other
systems, such as jee app servers, where out of ordinary service logic
can be added. Advertising is an example of such logic, XMPP users
could receive messages with ads, just as mobile phones today get these
through SMS. Now imagine how this can be done with Vysper today, you
would need to extend/hack each Module, and that is not really useful.

The typical solution for this kind of needs is an event delivery
framework, something that allows registration of listener code, that
reacts to events received. In concrete, we want Vysper (modules) to
publish certain events, so we can have apps that enrich the standard
XMPP server logic, and these apps are represented by the event
listeners.

In my patch I only propose the foundations to connect listeners in
Vysper Modules. Each Module should now decide what events makes sense
to publish, and thus generate its own event and listener interfaces.

I could have opted for having the listeners at XMPPServer level, a
concrete event interface, and an event listener interface with
something like processEvent(Event), but this ends up in a mess of
listener code, trying to decrypt what kind of events it gets. It also
makes much more difficult for Modules to make the decision on whether
an event is really needed, that is, if a Module has no listeners, why
should it bother with making events, a deployment may not be
interested on handling events from certain modules...

> Additionally, I'm asking myself the following questions:
> + Which modules would need to be adopted? Do we require modules to
> implement this?

Ok, this is where the fun starts, I added an empty impl of the method
to add a listener to a module, this means it works as it is now.
Anyway I guess the base method impl should construct a common facility
that manages the set of listeners, and that facility should then be
exposed to Modules, I did not want to go deeper before understanding
if the whole idea is accepted by the Vysper team and community.

To proceed with this, Module developers shall specify its own event
framework, which in concrete are the events and listener interfaces.
We can start by targeting a specific Module, kind of "pilot program".

> + Would JMX be a better means of interacting with modules?

JMX events are mostly useful for "remote" interactions, we could later
add listeners that expose events to JMX too, if there is interest on
that...

> + How are events emmitted? Synch, Async? How do we prevent event
> consumers from stopping the world when doing their thing?

I guess async is better, listeners should not be able to introduce any
overhead to the core XMPP Server function... A draft of a possible
distribution implementation would be a common facility which
efficiently distributes events using a shared thread pool or alike,
and some hash function to pick up the delivering thread, routing
related events in serialized fashion.

I will be on vacation next week, but I will be checking mail frequently.

-- Eduardo
..............................................
http://emmartins.blogspot.com
http://redhat.com/solutions/telco

Reply via email to