You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@bookkeeper.apache.org by "Matthieu Morel (Commented) (JIRA)" <ji...@apache.org> on 2012/01/02 16:48:31 UTC

[jira] [Commented] (BOOKKEEPER-25) Implementation of the JMS specification and API

    [ https://issues.apache.org/jira/browse/BOOKKEEPER-25?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13178429#comment-13178429 ] 

Matthieu Morel commented on BOOKKEEPER-25:
------------------------------------------

I completed a new milestone, and the JMS API is now almost entirely covered.

h3. completed work notably includes:
* message filtering: 
** reuses code from ActiveMQ for parsing and processing SQL-like selector queries
** *modifies the protobuf definition* in order to include filterable properties. I added map-like structures backed by typed lists for implementing it in a generic manner
** filtering is currently implemented on the client side. We'll have to move that to server side, but that will require modifications to hedwig-server subproject
* message expiration
* temporary topics
* support for all JMS message types : StreamMessage, MapMessage, TextMessage, ObjectMessage and BytesMessage (including corresponding serialization/deserialization mechanisms)
* support for all acknowledgement modes as well as transacted mode
* message recovery
* support for both durable and non-durable topic subscriptions

I also updated the API dependencies to Bookkeeper 4.0.0, and kept adding and improving regressions tests


h3. remaining work for a complete coverage:
* authentication
* priorities
* queues
* non-persistent messages

Code is available here: https://github.com/matthieumorel/bookkeeper/tree/BOOKKEEPER-25 

(Note that for clarity I rebased previous changes on top of Bookkeeper 4.0.0 updates)


My plan is now to implement remaining features so that we have a complete API implementation that we can reason about, thoroughly test, and improve. Of course, this is an open process open to suggestions!


                
> Implementation of the JMS specification and API
> -----------------------------------------------
>
>                 Key: BOOKKEEPER-25
>                 URL: https://issues.apache.org/jira/browse/BOOKKEEPER-25
>             Project: Bookkeeper
>          Issue Type: Task
>            Reporter: Matthieu Morel
>             Fix For: 4.1.0
>
>         Attachments: JMS implementation.pdf, JMS implementation.pdf, hedwigjms-milestone1preview.pdf
>
>
> Here is a proposal for implementing JMS on top of Hedwig.
> Overview:
> ---------
> After comparing the JMS spec and Hedwig's current implementation, it appears that Hedwig provides most concepts of the JMS spec. The work will therefore mostly be implementing wrappers around Hedwig's primitives.
> There is no 1 to 1 mapping most of the time though, and there are some subtleties in the JMS spec that we must be cautious about. There are also things that don't exist in Hedwig and that we'll have to add. 
> For instance, "administered objects", the different kinds of standard messages, or a parser for the SQL-like selector queries. These are marked with a triangular flag on the attached mindmap.
> The JMS spec also specifies support for distributed transactions (XA) but this part is optional. I would suggest to leave that for later, if there is any request for it.
> Design:
> -------
> I suggest to separate all JMS-related code in a separate project (as hedwig-client and hedwig-protocol). 
> We'll therefore make sure that Hedwig-server is JMS agnostic, and it will later be possible to use the same approach for implementing AMQP or JMS2, without mixing all concepts.
> Development:
> -----------
> An iterative approach is well suited. We could start with fundamentals, and progressively add some meat: 
> 1. messages, connections and sessions
> 2. basic messaging with selectors
> 3. all cases of messaging models
> 4. validation tests
> 5. performance tests (I checked and unfortunately, there does not seem to be any "free" standard for benchmarking jms implementation...)
> Each iteration would involve adding regression tests and doing a review.
> About the time this would take:
> My rough estimation (not being very familiar with Hedwig's codebase): in the order 1 or 2 weeks for each of these iterations.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira