Hey Alex
From: Alex Karasulu [EMAIL PROTECTED]
Also we have begun to separate out frontend plumbing from LDAP
specific code in Eve's frontend. This code is a TCP specific SEDA
framework.
We're going to make this into a subproject on its own so we can reuse
it for a Eve integrated Kerberos server without tight coupling (it can
also be
standalone). Trustin Lee (guy who did Netty) will be looking into
adding UDP support to this in project.
So what does this all mean for integration? Well we want to write
wrappers for this SEDA framework where Eve just plugs in as another
simple
protocol to be able to benefit from those wrappers. By writing a
geronimo wrapper for SEDA rather than an Eve specific frontend we now
allow any
protocol to be fired up within geronimo without having to
specifically integrate that protocols frontend. WDYT?
So we really want to write a SEDA framework wrapper intead of one
specifically for Eve. This also makes me think if its worth writting
wrappers for the backend of Eve and this raises several questions I
still don't have answers to but these I'll leave for other emails.
I guess it depends what you mean by SEDA. Mostly I tend to think of the
Channel abstraction in the concurrent.jar as being a pretty good
abstraction for SEDA, where the channels can be local in VM or remote
and you can put/take/poll objects - then the rest is just
implementation details. Or some folks like to abstract away the low
level SEDA like protocol of sync/async send behind a dynamic proxy to
make SEDA invisible as it were. e.g.
http://activemq.codehaus.org/maven/apidocs/org/codehaus/activemq/util/
AsyncProxy.html
If what you mean is more of a SEDA based transport framework, well
we've been working for quite some time on one of those on the ActiveMQ
project :). Last benchmark we did was 22,000 messages/second sustained
throughput on 2 2-way linux boxes with producer, broker, consumer all
going across the network for 1-2K message sizes and reasonably low CPU
usage (YMMV).
Currently we've transports for
* VM (in memory both sync true SEDA)
* TCP / SSL
* UDP multicat
* NIO through g-networks and EmberIO
* JGroups
* JRMS
* JXTA
* HTTP (for tunnelling)
* Jabber (experimental)
* AIO4J (experimental)
In addition we have discovery protocols (Zeroconf ActiveCluster) to
make peer-style clusters of auto-discoverying clients servers
(Zeroconf is particularly cute as it works nice with Apple's
Rendezvous), together with load balancing fault tolerance transports
(e.g. auto-fail over to another server in case of failure etc).
Other protocols to come are SOAP-over-TCP, FTP, SMTP, SQL and file
system when we get chance.
Details of the code are here...
http://activemq.codehaus.org/Code+Overview
Basically we have a really simple TransportChannel API which can
represent any kind of transport protocol.
http://activemq.codehaus.org/maven/apidocs/org/codehaus/activemq/
transport/package-summary.html
The minimal contract we support for application protocols is that they
must decide if a method call is sync (requiring a receipt such as a
commit()) or async (fire forget) and for async, whether a flush is
required after the send. Consuming is pluggable based on the transport
- so it decides if there is a thread, is it pull/push or how threads
multiplex such as for NIO / AIO.
Most of the transport channels can be reused as is with a pluggable
WireFormat which dictates how command objects (we use the Packet base
class) get serialized on the wire. e.g. we have a default, fast as
possible, wire format for the JMS Packets, as well as Jabber XStream
based ones etc.
The TransportChannel abstract represents about the 8th or 9th
generation of this kind of abstraction the team have used over the last
5 years or so for implementing high performance messaging SEDA
transport abstractions - so if nothing else, I'd advise you to go down
a similar route of abstraction; then at the very least you'll be able
to reuse our transports easily we can easily plugin into your stuff -
especially if you want to take advantage of our clustering, failover
replication protocols..
James
---
http://radio.weblogs.com/0112098/