Session.unsubscribe does not clear JMS messages from the database
-----------------------------------------------------------------

         Key: JBAS-1547
         URL: http://jira.jboss.com/jira/browse/JBAS-1547
     Project: JBoss Application Server
        Type: Bug
  Components: JMS service  
    Versions: JBossAS-4.0.1 Final    
 Environment: Windows XP
JDK 1.5.0
MS SQL Server
    Reporter: Plamen Todorov


I am testing durable topic subscription and have the following issue:
session.unsubscribe("") clears the subscription from the database, but does not 
clear the JMS messages stored for this subscription from the JMS_MESSAGES 
table. I am using MS SQL Server 2000 to store the messages. Here is my test 
code:

    public Result testTopic(TopicJMSPerformanceTestSetup setup){
        try{
            boolean guaranteed = setup.isGuaranteed();
            long t = System.currentTimeMillis();
            log("Testing " + (guaranteed ? " guaranteed" : " non-guaranteed") + 
" topic connection delivery...");
            TopicConnectionFactory factory = 
connector.getTopicConnectionFactory();
            TopicConnection conn;
            try{
                conn = factory.createTopicConnection(   
connector.getJMSProperty(ContextJMSConnector.JMS_PROPERTY_CONNECTION_USERNAME),
                                                        
connector.getJMSProperty(ContextJMSConnector.JMS_PROPERTY_CONNECTION_PASSWORD));
                log("Connected as " + 
connector.getJMSProperty(ContextJMSConnector.JMS_PROPERTY_CONNECTION_USERNAME) 
+ " Topic connection: " + conn);
            }catch(JMSConnectorException ex){
                conn = factory.createTopicConnection();
                log("Connected using the default user credentials. Topic 
connection: " + conn);
            }
            conn.start();
            try{
                log("Topic connection: " + conn);
                TopicSession session = conn.createTopicSession(false, 
Session.AUTO_ACKNOWLEDGE);
                log("Topic session: " + session);
                int mode = (guaranteed ? DeliveryMode.PERSISTENT : 
DeliveryMode.NON_PERSISTENT);
                TopicPublisher publisher = 
session.createPublisher(connector.getTopic(TOPIC_INTERNAL_NAME));
                publisher.setDeliveryMode(mode);
                log("Message publisher: " + publisher);
                TopicSubscriber subscriber = null;
                if(guaranteed)
                    subscriber = 
session.createDurableSubscriber(connector.getTopic(TOPIC_INTERNAL_NAME), 
"testDurableSubscriber");
                else
                    subscriber = 
session.createSubscriber(connector.getTopic(TOPIC_INTERNAL_NAME));
                long objectCreationTime = System.currentTimeMillis() - t;
                log("Message subscriber: " + subscriber);
                //flush topic messages
                log("Clearing " + empty(subscriber) + " messages from the test 
topic." );
                long messageSendingTime = 0;
                try{
                    log("Publishing/receiving " + setup.getIterations() + 
(guaranteed? " persistent" : " non-persistent") + " messages, Size = " + 
setup.getMessageSize() + " bytes...");
                    messageSendingTime = work(publisher, subscriber, session, 
setup);
                }finally{
                    try{
                        subscriber.close();
                        publisher.close();
                    }finally{
                        if(guaranteed)
                            session.unsubscribe("testDurableSubscriber");
                    }
                    session.close();
                }
                log("Message publishing finished. Time: " + messageSendingTime 
+ " msec\n");
                return new PerformanceResult(setup, objectCreationTime, 
messageSendingTime);
            }finally{
                conn.close();
            }
        }catch(Exception e){
            String message = "ERROR!\nError executing test. Message: " + e + 
"\nTest setup: " + setup + "\nTime: " + 
SimpleDateFormat.getTimeInstance().format(new Date());
            log(message + "\n", Level.ERROR);
            e.printStackTrace();
            return new ResultImpl(message);
        }
    }


-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://jira.jboss.com/jira/secure/Administrators.jspa
-
If you want more information on JIRA, or have a bug to report see:
   http://www.atlassian.com/software/jira



-------------------------------------------------------
SF email is sponsored by - The IT Product Guide
Read honest & candid reviews on hundreds of IT Products from real users.
Discover which products truly live up to the hype. Start reading now.
http://ads.osdn.com/?ad_id=6595&alloc_id=14396&op=click
_______________________________________________
JBoss-Development mailing list
JBoss-Development@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/jboss-development

Reply via email to