PDA

View Full Version : Advice on SI usage?



jthomerson
Sep 28th, 2009, 11:29 PM
I just added Spring Integration to an open source web conferencing project (bigbluebutton.org). What I need to accomplish seems very simple, yet my configuration is very verbose. I think that there is probably a much easier (less verbose) way of accomplishing what I need, and I was hoping that an expert here could offer a suggestion or two.

Here's what needs to happen:

1 - gateway method is called, which puts message in channel
2 - message needs to be transformed to string message
3 - message needs to be sent to JMS

Eventually, step number 2 will go away as we'll start actually sending the serialized object over the wire. But for now, we simplify it to a string.

Here are some links to view the code in Fisheye:

Spring Config:
http://fisheye2.atlassian.com/browse/bigbluebutton/trunk/bigbluebutton-apps/webapps/bigbluebutton/WEB-INF/bbb-apps.xml?r=trunk#l157

Gateway:
http://fisheye2.atlassian.com/browse/bigbluebutton/trunk/bigbluebutton-apps/webapps/bigbluebutton/src/org/bigbluebutton/conference/IConferenceEventListener.groovy?r=trunk

Transformer:
http://fisheye2.atlassian.com/browse/bigbluebutton/trunk/bigbluebutton-apps/webapps/bigbluebutton/src/org/bigbluebutton/springintegration/RoomToStringTransformer.groovy?r=trunk

Code that calls the Gateway:
http://fisheye2.atlassian.com/browse/bigbluebutton/trunk/bigbluebutton-apps/webapps/bigbluebutton/src/org/bigbluebutton/conference/RoomsManager.groovy?r=trunk#l44

Any suggestions?

Thanks!
Jeremy Thomerson

Mark Fisher
Sep 28th, 2009, 11:34 PM
My first question after a very quick skim of the config is whether you really need so many queue-based channels. Usually, unless the Messages need to be buffered for some reason (e.g. difference in timing/distribution of load between producer and consumer), the simpler <channel/> element with no sub-elements is a better choice. For one thing, it maintains a transactional boundary spanning from sender to receiver, and it precludes the need for all of the poller configuration as well.

jthomerson
Sep 28th, 2009, 11:49 PM
Mark,
Thanks for such a quick reply!

I started out without them, but encountered issues with it blocking when calling the gateway method. I think that was actually a different issue, so I just switched them back to non-queued channels, and it worked this time. That also eliminated the pollers, and made it an altogether better solution!

I guess the only other question then would be if I could eliminate having so many different channel names? I tried using a chain that listened on conferenceStarted and did the tranform, then sent via JMS, but it seems like the outbound-channel-adapter won't work in a chain. Perhaps there's an equivalent type that can send JMS messages but will work in a chain?

Here's a link to the updated config:

http://fisheye2.atlassian.com/browse/bigbluebutton/trunk/bigbluebutton-apps/webapps/bigbluebutton/WEB-INF/bbb-apps.xml?r=trunk#l157

Or, if you don't see the change on Fisheye:

http://code.google.com/p/bigbluebutton/source/browse/trunk/bigbluebutton-apps/webapps/bigbluebutton/WEB-INF/bbb-apps.xml?spec=svn2660&r=2660#157

Thanks again!
Jeremy Thomerson