I've been studying the invokers while working on the xid-based transaction
propagation and plan to do some refactoring if there are no strong
objections.

1. I plan to make both the client (sending) and server (receiving) halves
of the invokers layered with aspects or interceptors.  This will enable
reuse of everything except the transport layer across most invokers.

2. I have not yet tried performance tests on these, but have noticed that
the principal structural difference between the pooled invoker and the
trunk invoker is that the trunk invoker multiplexes simultaneous requests
asynchronously over the same socket, whereas the pooled invoker ties up the
socket for the entire duration of server-side request processing.  I would
expect this would translate into slightly better performance for the pooled
invoker with a single threaded client, due to the lack of the
synchronization and queueing between requests and responses, but enormously
better performance for the trunk invoker with a multithreaded client (and
perhaps multi-processor server).  I may not understand all that is going on
in the pooled invoker: my assumption is that each client obtains a single
socket connection to the server, and it is reused for all requests from a
single client, and that it is served by a single server thread.  If I'm
wrong I'd welcome correction.

3. In order to use the work import contracts, I plan to make all the
invokers asynchronous, as the trunk invoker is today.  The Work object will
include both the code to call the mbean target (i.e. ejb) and the
information necessary to return the result back through the transport
mechanism.  It's possible that separate inbound and outbound
interceptor/aspect stacks may be desirable.

4. There has been some discussion about two way transport, as implemented
in the trunk invoker.  It seems to me that any way of calling an ejb has in
it 2 communication channels, one in each direction.  If these are based on
accessible sockets, the channels can be used in the opposite direction and
order, thus providing two way transport.  I propose to provide this two way
transport when the underlying transport supports these separable transport
directions (for instance, my impression is that rmi does not).  If there
are problems with this approach I'd like to know about them.  If you
disagree with this approach please explain why the in and out streams from
a socket should not be used in both directions for this purpose and explain
in at least a little detail an alternative approach.

Thanks
david jencks


-------------------------------------------------------
This sf.net email is sponsored by:ThinkGeek
Welcome to geek heaven.
http://thinkgeek.com/sf
_______________________________________________
Jboss-development mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/jboss-development

Reply via email to