Hi.

I'm currently looking at the 0-10 transport layer in more detail, and
want to add a (currently) MINA based VM mechanism to the existing
socket based one, and eventually I envisage pluggable OSGi modules
that implement Netty or Grizzly transports for both the client and the
broker, using any AMQP protocol.

Anyway, I came across the following snippet in
AMQConnectionDelegate_8_0#makeBrokerConnection and wondered what the
"UseTransportIo" property was for:

    // TODO: use system property thingy for this
    if (System.getProperty("UseTransportIo", "false").equals("false"))
    {
        
TransportConnection.getInstance(brokerDetail).connect(_conn._protocolHandler,
brokerDetail);
    }
    else
    {
        _conn.getProtocolHandler().createIoTransportSession(brokerDetail);
    }

See viewvc for when the change was made:

    http://svn.apache.org/viewvc?view=revision&revision=684016

As far as I can tell, the code that would be called if this property
is set (for instance IoTransport.connect_0_9() and some associated
classes that seem to be 0-9 specific) is not tested, *or* used, and I
have difficulty understanding the purpose. It looks very much to me
like an attempt at another transport layer, but only implemented for
the 0-9 protocol? Interestingly, it uses a Binding<X,Y> object, which
also crops up in the Toy* classes and their associated MinaHandler
that I mentioned in a previous message. The reason for my interest in
this is that I am looking at harmonising the transport mechanisms and
introducing a mechanism to allow different transport layers (MINA,
Java NIO, Netty, and so forth) to be used independantly of the
protocol (0-8, 0-10, maybe even 1-0 eventually!) or underlying
transport mechanism (TCP, UDP, VM) and I keep discovering classes that
appear to do the same thing, but subtly different, or are just not
used. I will probably be able to use some of the logic from these
classes but I see no benefit from introducing a 0-9 only (apparently)
transport layer that is completely untested.

Additionally, I have been looking at the ProtocolEngine class, and I
discovered that the getWrittedBytes/getReadBytes pair of methods that
are present there are not exposed through the MBean (although they are
commented out) - I think that the ProtocolEngine class could be
removed entirely, and its usage replaced with Receiver<ByteBuffer> in
all cases, and the extra methods can be added to a network transport
interface instead. I also found what I consider pointless redundancy
around thois class, where the following relationships hold:

    ProtocolEngine_0_10 <<extends>> InputHandler <<implements>>
Receiver<ByteBuffer>
    ProtocolEngine_0_10 <<implements>> ProtocolEngine <<extends>>
Receiver<ByteBuffer>

The relevant JIRA for most of this is QPID-2812
[https://issues.apache.org/jira/browse/QPID-2812] although see also
QPID-2811, QPID-2813, QPID-2814, QPID-2815, QPID-2816, and, eventually
QPID-2818 and QPID-2819. If anyone has any questions about what I'm
trying to achieve here, I can try and explain a bit more, and I'd
appreciate any comments or feedback...

Thanks,
Andrew.
--
-- andrew d kennedy ? edinburgh : +44 7941 197 134

---------------------------------------------------------------------
Apache Qpid - AMQP Messaging Implementation
Project:      http://qpid.apache.org
Use/Interact: mailto:dev-subscr...@qpid.apache.org

Reply via email to