jsr343-experts@jms-spec.java.net

[jsr343-experts] Re: (JMS_SPEC-64) Define simplified JMS API

From: <reza_rahman_at_lycos.com>
Date: Thu, 29 Mar 2012 22:57:56 +0000 (GMT)

I don't think it's that important.

Mar 29, 2012 07:56:56 AM, jsr343-experts_at_jms-spec.java.net wrote:

===========================================

I have spotted one further possible change that we may want to consider making to the simplified API. This is the
"subscribe" method, for creating a durable subscription but not a consumer.

    context.subscribe(inboundTopic, "mysub", messageSelector, noLocal);

I added this initially because the only alternative was to use createSyncConsumer to create a SyncMessageConsumer and
immediately close it.

    SyncMessageConsumer consumer = context.createSyncDurableSubscriber(inboundTopic, "mysub");
    consumer.close();

I thought this was particularly inappropriate because an application which subsequently intended to consume messages
asynchronously would need to create a SyncMessageConsumer.

However following the recent changes, an application which wants to create a durable subscription but not actually
consume messages from it can do the following:

    JMSConsumer consumer = context.createDurableSubscriber(inboundTopic, "mysub");
    consumer.close();

This is identical to how this would be done using the standard JMS 1.1 API.

This suggests that perhaps we don't need

    void subscribe(Topic topic, String name, String messageSelector, boolean noLocal);

after all. Applications have managed without it for a decade, and in any case this caters for a pretty rare use case
anyway: in most cases, an application which created a durable subscription would want to go on and consume messages from it.

So: is the subscribe method on JMSContext unnecessary bloat? Or is it a useful addition to the API? I'm not sure.

Any views?

Nigel