AMQP 1.0 JMS Client Requirements and DesignPage edited by Phil HarveyChanges (32)
Full ContentThis page describes the requirements and initial design of the new Qpid JMS Client that supports AMQP 1.0 (simply referred to as the "Qpid JMS Client" below). RequirementsFunctional requirements
The following sub-sections allocate the functional requirements to several sequential project phases. Phase 0This is the initial set-up of the basics.
This will implicitly require work on:
Phase 1
Phase 2
Non-functional requirements
Out of scope
DesignLayers+================================+
|
| JMS
|
| Implementations of javax.jms
|
+================================+
|
|
\|/
+================================+
|
| AMQP
|
| Wrappers around Proton's engine
| classes, primarily to add locking
|
+================================+
| |
| |
\|/ |
+======================+ |
| Proton | |
| | |
| Message | Engine | |
| | | |
+=========+============+ |
/|\ |
| |
| \|/
+====================
|
| JMS Driver interface
|
+=====================
/|\
|
+--------------+
| |
| |
| |
+===========+ +==============
| |
| Socket |
| driver | Another driver,
| (might use | e.g. in-VM
| Proton's Driver) |
| |
+===========+ +==============
|
| TCP/IP
|
\|/
+================================+
|
| Broker
|
+================================+Public API
The public API consists of:
Note that the logging output and logging category names also constitute a public interface. In the future, the public API may need to be extended or more precisely specified (e.g. to include details of the mapping between JMS and AMQP when using MapMessage and ObjectMessage etc). Locking
Threads fall into two categories:
For a given connection:
Synchronous operations must follow the locking scheme indicated by the following pseudo-code:
Where operations need to wait for a "remote" operation to complete, they must follow the scheme indicated by the following pseudo-code:
This ensures that when the predicate object is invoked the thread will already possess both the JmsConnection lock and the AmqpConnection lock. I/O layer
TODO - design I/O Logging
TODO Testing strategyGoals:
Test typesWe will write a number of each of the following tests.
Module testsThe following diagram shows how module tests will work: +================================+ | | JUnit test | | 1. Create an in-process TestAmqpPeer | 2. Set up TestAmqpPeer behaviour and expectations | 3. Call some JMS methods | +================================+ | | | | | | | | \|/ | | +================================+ | | | | | | JMS client | | | | | +================================+ | | | | | | | | | | \|/ | | | +======================+ | | | | Proton | | | | | | | | | | Message | Engine | | | | | | | | | | +=========+============+ | | | /|\ | | | | | | \|/ \|/ \|/ | +======================================= | | | | In-process Driver | | | +======================================= | /|\ | | | | Bytes | | \|/ \|/ +===================================+ | | TestAmqpPeer | +===================================+ In-process Driver implementation
TestAmqpPeer implementationEach test will give behaviour to a TestAmqpPeer. This behaviour will mostly be expressed in terms of AMQP frames. Here are prose examples (we don't yet know how these will be expressed in code)
In order to increase our confidence in the AMQP interoperabilty of the JMS client, we want to avoid using the same Proton stack in the test peer as in the client. Therefore, Decoding and encoding will be done using proton-api's Data class. The AmqpTestPeer will minimise its use of other Proton classes. SASLMost tests will perform minimal SASL negotiation, simulating simple, successful SASL authentication. We will write specific SASL tests to exercise more complex scenarios.
Stop watching space
|
Change email notification preferences
View Online
|
View Changes
|
Add Comment
|
- [CONF] Apache Qpid > AMQP 1.0 JMS Client Re... confluence
- [CONF] Apache Qpid > AMQP 1.0 JMS Clie... confluence
- [CONF] Apache Qpid > AMQP 1.0 JMS Clie... confluence
- [CONF] Apache Qpid > AMQP 1.0 JMS Clie... Phil Harvey (Confluence)
- [CONF] Apache Qpid > AMQP 1.0 JMS Clie... Phil Harvey (Confluence)
- [CONF] Apache Qpid > AMQP 1.0 JMS Clie... Phil Harvey (Confluence)
- [CONF] Apache Qpid > AMQP 1.0 JMS Clie... Phil Harvey (Confluence)
- [CONF] Apache Qpid > AMQP 1.0 JMS Clie... Robbie Gemmell (Confluence)
