/*
* JBossMQ, the OpenSource JMS implementation
*
* Distributable under LGPL license.
* See terms of license at gnu.org.
*/
package org.jboss.mq;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import javax.jms.Destination;
import javax.jms.IllegalStateException;
import javax.jms.InvalidDestinationException;
import javax.jms.JMSException;
import javax.jms.MessageListener;
import javax.jms.TemporaryTopic;
import javax.jms.Topic;
import javax.jms.TopicPublisher;
import javax.jms.TopicSession;
import javax.jms.TopicSubscriber;
import javax.jms.XATopicSession;
/**
* This class implements javax.jms.TopicSession and
* javax.jms.XATopicSession.
*
* @author Norbert Lataille (Norbert.Lataille@m4x.org)
* @author Hiram Chirino (Cojonudo14@hotmail.com)
* @created August 16, 2001
* @version $Revision: 1.7.2.1 $
*/
public class SpyTopicSession
extends SpySession
implements TopicSession, XATopicSession
{
SpyTopicSession( Connection myConnection, boolean transacted, int acknowledgeMode ) {
this( myConnection, transacted, acknowledgeMode, false );
}
// Constructor ---------------------------------------------------
SpyTopicSession( Connection myConnection, boolean transacted, int acknowledgeMode, boolean xaSession ) {
super( myConnection, transacted, acknowledgeMode, xaSession );
}
/**
* getTopicSession method comment.
*
* @return The TopicSession value
* @exception javax.jms.JMSException Description of Exception
*/
public javax.jms.TopicSession getTopicSession()
throws javax.jms.JMSException {
return this;
}
// Public --------------------------------------------------------
public Topic createTopic( String topicName )
throws JMSException {
if ( closed ) {
throw new IllegalStateException( "The session is closed" );
}
if( topicName == null )
throw new InvalidDestinationException("The topic name cannot be null");
return ( ( SpyConnection )connection ).createTopic( topicName );
}
public TopicSubscriber createSubscriber( Topic topic )
throws JMSException {
if ( closed ) {
throw new IllegalStateException( "The session is closed" );
}
if( topic == null )
throw new InvalidDestinationException("Topic cannot be null");
return createSubscriber( topic, null, false );
}
public TopicSubscriber createSubscriber( Topic topic, String messageSelector, boolean noLocal )
throws JMSException {
if ( closed ) {
throw new IllegalStateException( "The session is closed" );
}
if( topic == null )
throw new InvalidDestinationException("Topic cannot be null");
SpyTopicSubscriber sub = new SpyTopicSubscriber( this, ( SpyTopic )topic, noLocal, messageSelector );
addConsumer( sub );
return sub;
}
public TopicSubscriber createDurableSubscriber( Topic topic, String name )
throws JMSException {
if ( closed ) {
throw new IllegalStateException( "The session is closed" );
}
if( topic == null )
throw new InvalidDestinationException("Topic cannot be null");
if (topic instanceof TemporaryTopic)
throw new InvalidDestinationException("Attempt to create a durable subscription for a temporary topic");
if (name == null || name.trim().length() == 0)
throw new JMSException("Null or empty subscription");
SpyTopic t = new SpyTopic( ( SpyTopic )topic, connection.getClientID(), name, null );
SpyTopicSubscriber sub = new SpyTopicSubscriber( this, t, false, null );
addConsumer( sub );
return sub;
}
public TopicSubscriber createDurableSubscriber( Topic topic, String name, String messageSelector, boolean noLocal )
throws JMSException {
if ( closed ) {
throw new IllegalStateException( "The session is closed" );
}
if( topic == null )
throw new InvalidDestinationException("Topic cannot be null");
if (topic instanceof TemporaryTopic)
throw new InvalidDestinationException("Attempt to create a durable subscription for a temporary topic");
if (name == null || name.trim().length() == 0)
throw new JMSException("Null or empty subscription");
SpyTopic t = new SpyTopic( ( SpyTopic )topic, connection.getClientID(), name, messageSelector );
SpyTopicSubscriber sub = new SpyTopicSubscriber( this, t, noLocal, messageSelector );
addConsumer( sub );
return sub;
}
public TopicPublisher createPublisher( Topic topic )
throws JMSException {
if ( closed ) {
throw new IllegalStateException( "The session is closed" );
}
return new SpyTopicPublisher( this, topic );
}
public TemporaryTopic createTemporaryTopic()
throws JMSException {
if ( closed ) {
throw new IllegalStateException( "The session is closed" );
}
return ( ( SpyConnection )connection ).getTemporaryTopic();
}
public void unsubscribe( String name )
throws JMSException {
//Not yet implemented
DurableSubscriptionID id = new DurableSubscriptionID( connection.getClientID(), name, null );
connection.unsubscribe( id );
}
}