Re: Barracuda: Automatic creation of ListenerFactories?
Ron Alsobrook <[email protected]>
| Newsgroups | gmane.comp.java.enhydra.barracuda.general |
|---|---|
| Message-ID | <[email protected]> |
Yeah it does. Thanks a lot guys.
Ron
-----Original Message-----
From: Christian Cryder
Sent: Thursday 05 December 2002 12:25 pm
Subject: RE: Barracuda: Automatic creation of ListenerFactories?
> Hi Ron,
>
> > For instance, instead of having a lot of lines like this in my gateways:
> >
> > private ListenerFactory doUpdateAccountFactory = new
> > DefaultListenerFactory()
> > {public BaseEventListener getInstance() {return new
> > DoUpdateAccountHandler();} public String getListenerID() {return
> > getID(DoUpdateAccountHandler.class);}};
>
> Ok, if you are using inner class event handlers, there simply is no way
> around this (that I've been able to think of...and I spent quite a bit of
> time trying too); the problem is that only the containing class has the
> authority to instantiate the inner class, so there must be a "hook" placed
> in the code to provide that instance, and that's what the above code does.
>
> What I like to do is run the whole thing onto one line; even though it
> extends off the right hand side of the page, its basically a declaration
> and it makes the whole thing a bit more readable (IMO).
>
> The only alternative (if you don't like this) is to go away from using
> inner class event handlers. You can certainly do this if you want (I don't
> care for it, personally, because it spreads things out into a lot more
> classes; some people like it though). If you are willing to go with regular
> classes
>
> for you handlers, then you actually can do this:
> > I would love to put something like this into my descriptor instead:
> >
> > <event-interest handler="DoUpdateAccountHandler"
> > factoryClass="DefaultListenerFactory"
> > event="com.eb5.website.events.DoUpdateAccount" />
>
> If you look in DefaultApplicationAssembler, ca. line 440, you will see the
> code where it tries to do this. Basically, it looks to see if factory name
> matches a property (variable) in the current gateway, and if not, it tries
> to instantiate it on the fly. Once it has a handle to the factory, it will
> also invoke specifyLocalEventInterests() on it as well. You can find an
> example in the event-gateway.xml file that comes with Barracuda: look for
> "Junior!" and you'll see it.
>
> Now, the one final issue (and I think this is what Jake was referencing) is
> that if you are listening for a parent event who's child events are not
> explicitly registered anywhere else in the system, you also have to
> manually do a specifyLocalEventAliases() for those events, so that
> Barracuda knows how to map from the first class event object to all the
> possible URL event aliases. I would like to eliminate the need to do
> this...my basic idea at this point is somehow figuring out a way at compile
> time to generate a map of all known events in the system...we could then
> feed this to the EventBroker so that it would be able to create the
> appropriate mappings for them. This would eliminate the need to call
> specifyLocalEventAliases(); it would NOT remove the need to declare a
> factory method and call
> specifyLocalEventInterests() if you are using inner classes.
>
> Does that answer your question?
>
> Christian
> ----------------------------------------------
> Christian Cryder [[email protected]]
> Internet Architect, ATMReports.com
> Barracuda - http://barracuda.enhydra.org
> ----------------------------------------------
> "Coffee? I could quit anytime, just not today"
>
> > -----Original Message-----
> > From: [email protected] [mailto:[email protected]]On
> > Behalf Of Ron Alsobrook
> > Sent: Wednesday, December 04, 2002 3:43 PM
> > To: [email protected]
> > Subject: Barracuda: Automatic creation of ListenerFactories?
> >
> >
> > This may have come up before, but has anyone given any thought to
> > having the
> > ApplicationAssembler automatically create ListenerFactories based on the
> > assembly descriptor file?
> >
> > For instance, instead of having a lot of lines like this in my gateways:
> >
> > private ListenerFactory doUpdateAccountFactory = new
> > DefaultListenerFactory()
> > {public BaseEventListener getInstance() {return new
> > DoUpdateAccountHandler();} public String getListenerID() {return
> > getID(DoUpdateAccountHandler.class);}};
> >
> > I would love to put something like this into my descriptor instead:
> >
> > <event-interest handler="DoUpdateAccountHandler"
> > factoryClass="DefaultListenerFactory"
> > event="com.eb5.website.events.DoUpdateAccount" />
> >
> > ...and have the ApplicationAssembler create the factories for me.
> > Or maybe
> > the factory should be seperate to better support multiple
> > listeners/events
> > like this:
> >
> > <factory name="doUpdateAccountFactory" handler="DoUpdateAccountHandler"
> > factoryClass="DefaultListenerFactory" />
> >
> > Then the <event-interest>s would stay as they are now:
> >
> > <event-interest factory="doUpdateAccountFactory"
> > event="com.eb5.website.events.DoUpdateAccount" />
> >
> > One thing to note, my handler classes are usually inner classes
> > of the gateway
> > and I don't know how that would affect things. Thoughts anyone?
> >
> > Ron
> >
> > _______________________________________________
> > Barracuda mailing list
> > [email protected]
> > http://www.enhydra.org/mailman/listinfo.cgi/barracuda
> > FAQ - http://www.jguru.com/faq/Barracuda
>
> _______________________________________________
> Barracuda mailing list
> [email protected]
> http://www.enhydra.org/mailman/listinfo.cgi/barracuda
> FAQ - http://www.jguru.com/faq/Barracuda
_______________________________________________
Barracuda mailing list
[email protected]
http://www.enhydra.org/mailman/listinfo.cgi/barracuda
FAQ - http://www.jguru.com/faq/Barracuda