001: /*
002: * @(#)TopicSubscriber.java 1.28 02/04/09
003: *
004: * Copyright 1997-2002 Sun Microsystems, Inc. All Rights Reserved.
005: *
006: * SUN PROPRIETARY/CONFIDENTIAL.
007: * This software is the proprietary information of Sun Microsystems, Inc.
008: * Use is subject to license terms.
009: *
010: */
011:
012: package javax.jms;
013:
014: /** A client uses a <CODE>TopicSubscriber</CODE> object to receive messages that
015: * have been published to a topic. A <CODE>TopicSubscriber</CODE> object is the
016: * publish/subscribe form of a message consumer. A <CODE>MessageConsumer</CODE>
017: * can be created by using <CODE>Session.createConsumer</CODE>.
018: *
019: * <P>A <CODE>TopicSession</CODE> allows the creation of multiple
020: * <CODE>TopicSubscriber</CODE> objects per topic. It will deliver each
021: * message for a topic to each
022: * subscriber eligible to receive it. Each copy of the message
023: * is treated as a completely separate message. Work done on one copy has
024: * no effect on the others; acknowledging one does not acknowledge the
025: * others; one message may be delivered immediately, while another waits
026: * for its subscriber to process messages ahead of it.
027: *
028: * <P>Regular <CODE>TopicSubscriber</CODE> objects are not durable. They
029: * receive only messages that are published while they are active.
030: *
031: * <P>Messages filtered out by a subscriber's message selector will never
032: * be delivered to the subscriber. From the subscriber's perspective, they
033: * do not exist.
034: *
035: * <P>In some cases, a connection may both publish and subscribe to a topic.
036: * The subscriber <CODE>NoLocal</CODE> attribute allows a subscriber to inhibit
037: * the
038: * delivery of messages published by its own connection.
039: *
040: * <P>If a client needs to receive all the messages published on a topic,
041: * including the ones published while the subscriber is inactive, it uses
042: * a durable <CODE>TopicSubscriber</CODE>. The JMS provider retains a record of
043: * this durable
044: * subscription and insures that all messages from the topic's publishers
045: * are retained until they are acknowledged by this durable
046: * subscriber or they have expired.
047: *
048: * <P>Sessions with durable subscribers must always provide the same client
049: * identifier. In addition, each client must specify a name that uniquely
050: * identifies (within client identifier) each durable subscription it creates.
051: * Only one session at a time can have a <CODE>TopicSubscriber</CODE> for a
052: * particular durable subscription.
053: *
054: * <P>A client can change an existing durable subscription by creating a
055: * durable <CODE>TopicSubscriber</CODE> with the same name and a new topic
056: * and/or message
057: * selector. Changing a durable subscription is equivalent to unsubscribing
058: * (deleting) the old one and creating a new one.
059: *
060: * <P>The <CODE>unsubscribe</CODE> method is used to delete a durable
061: * subscription. The <CODE>unsubscribe</CODE> method can be used at the
062: * <CODE>Session</CODE> or <CODE>TopicSession</CODE> level.
063: * This method deletes the state being
064: * maintained on behalf of the subscriber by its provider.
065: *
066: * <P>Creating a <CODE>MessageConsumer</CODE> provides the same features as
067: * creating a <CODE>TopicSubscriber</CODE>. To create a durable subscriber,
068: * use of <CODE>Session.CreateDurableSubscriber</CODE> is recommended. The
069: * <CODE>TopicSubscriber</CODE> is provided to support existing code.
070: *
071: *
072: * @version 1.1 - February 2, 2002
073: * @author Mark Hapner
074: * @author Rich Burridge
075: * @author Kate Stout
076: *
077: * @see javax.jms.Session#createConsumer
078: * @see javax.jms.Session#createDurableSubscriber
079: * @see javax.jms.TopicSession
080: * @see javax.jms.TopicSession#createSubscriber
081: * @see javax.jms.MessageConsumer
082: */
083:
084: public interface TopicSubscriber extends MessageConsumer {
085:
086: /** Gets the <CODE>Topic</CODE> associated with this subscriber.
087: *
088: * @return this subscriber's <CODE>Topic</CODE>
089: *
090: * @exception JMSException if the JMS provider fails to get the topic for
091: * this topic subscriber
092: * due to some internal error.
093: */
094:
095: Topic getTopic() throws JMSException;
096:
097: /** Gets the <CODE>NoLocal</CODE> attribute for this subscriber.
098: * The default value for this attribute is false.
099: *
100: * @return true if locally published messages are being inhibited
101: *
102: * @exception JMSException if the JMS provider fails to get the
103: * <CODE>NoLocal</CODE> attribute for
104: * this topic subscriber
105: * due to some internal error.
106: */
107:
108: boolean getNoLocal() throws JMSException;
109: }
|