001: /*
002: * JBoss, Home of Professional Open Source.
003: * Copyright 2006, Red Hat Middleware LLC, and individual contributors
004: * as indicated by the @author tags. See the copyright.txt file in the
005: * distribution for a full listing of individual contributors.
006: *
007: * This is free software; you can redistribute it and/or modify it
008: * under the terms of the GNU Lesser General Public License as
009: * published by the Free Software Foundation; either version 2.1 of
010: * the License, or (at your option) any later version.
011: *
012: * This software is distributed in the hope that it will be useful,
013: * but WITHOUT ANY WARRANTY; without even the implied warranty of
014: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
015: * Lesser General Public License for more details.
016: *
017: * You should have received a copy of the GNU Lesser General Public
018: * License along with this software; if not, write to the Free
019: * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
020: * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
021: */
022: package javax.jms;
023:
024: /** A client uses a <CODE>TopicSubscriber</CODE> object to receive messages that
025: * have been published to a topic. A <CODE>TopicSubscriber</CODE> object is the
026: * publish/subscribe form of a message consumer. A <CODE>MessageConsumer</CODE>
027: * can be created by using <CODE>Session.createConsumer</CODE>.
028: *
029: * <P>A <CODE>TopicSession</CODE> allows the creation of multiple
030: * <CODE>TopicSubscriber</CODE> objects per topic. It will deliver each
031: * message for a topic to each
032: * subscriber eligible to receive it. Each copy of the message
033: * is treated as a completely separate message. Work done on one copy has
034: * no effect on the others; acknowledging one does not acknowledge the
035: * others; one message may be delivered immediately, while another waits
036: * for its subscriber to process messages ahead of it.
037: *
038: * <P>Regular <CODE>TopicSubscriber</CODE> objects are not durable. They
039: * receive only messages that are published while they are active.
040: *
041: * <P>Messages filtered out by a subscriber's message selector will never
042: * be delivered to the subscriber. From the subscriber's perspective, they
043: * do not exist.
044: *
045: * <P>In some cases, a connection may both publish and subscribe to a topic.
046: * The subscriber <CODE>NoLocal</CODE> attribute allows a subscriber to inhibit
047: * the
048: * delivery of messages published by its own connection.
049: *
050: * <P>If a client needs to receive all the messages published on a topic,
051: * including the ones published while the subscriber is inactive, it uses
052: * a durable <CODE>TopicSubscriber</CODE>. The JMS provider retains a record of
053: * this durable
054: * subscription and insures that all messages from the topic's publishers
055: * are retained until they are acknowledged by this durable
056: * subscriber or they have expired.
057: *
058: * <P>Sessions with durable subscribers must always provide the same client
059: * identifier. In addition, each client must specify a name that uniquely
060: * identifies (within client identifier) each durable subscription it creates.
061: * Only one session at a time can have a <CODE>TopicSubscriber</CODE> for a
062: * particular durable subscription.
063: *
064: * <P>A client can change an existing durable subscription by creating a
065: * durable <CODE>TopicSubscriber</CODE> with the same name and a new topic
066: * and/or message
067: * selector. Changing a durable subscription is equivalent to unsubscribing
068: * (deleting) the old one and creating a new one.
069: *
070: * <P>The <CODE>unsubscribe</CODE> method is used to delete a durable
071: * subscription. The <CODE>unsubscribe</CODE> method can be used at the
072: * <CODE>Session</CODE> or <CODE>TopicSession</CODE> level.
073: * This method deletes the state being
074: * maintained on behalf of the subscriber by its provider.
075: *
076: * <P>Creating a <CODE>MessageConsumer</CODE> provides the same features as
077: * creating a <CODE>TopicSubscriber</CODE>. To create a durable subscriber,
078: * use of <CODE>Session.CreateDurableSubscriber</CODE> is recommended. The
079: * <CODE>TopicSubscriber</CODE> is provided to support existing code.
080: *
081: * @see javax.jms.Session#createConsumer
082: * @see javax.jms.Session#createDurableSubscriber
083: * @see javax.jms.TopicSession
084: * @see javax.jms.TopicSession#createSubscriber
085: * @see javax.jms.MessageConsumer
086: */
087:
088: public interface TopicSubscriber extends MessageConsumer {
089:
090: /** Gets the <CODE>Topic</CODE> associated with this subscriber.
091: *
092: * @return this subscriber's <CODE>Topic</CODE>
093: *
094: * @exception JMSException if the JMS provider fails to get the topic for
095: * this topic subscriber
096: * due to some internal error.
097: */
098:
099: Topic getTopic() throws JMSException;
100:
101: /** Gets the <CODE>NoLocal</CODE> attribute for this subscriber.
102: * The default value for this attribute is false.
103: *
104: * @return true if locally published messages are being inhibited
105: *
106: * @exception JMSException if the JMS provider fails to get the
107: * <CODE>NoLocal</CODE> attribute for
108: * this topic subscriber
109: * due to some internal error.
110: */
111:
112: boolean getNoLocal() throws JMSException;
113: }
|