Package org.jboss.test.messaging.jms.stress

Source Code of org.jboss.test.messaging.jms.stress.CorruptMessageStressTest$Sender

/**
* JBoss, Home of Professional Open Source
*
* Distributable under LGPL license.
* See terms of license at gnu.org.
*/
package org.jboss.test.messaging.jms.stress;

import org.jboss.test.messaging.tools.ServerManagement;
import org.jboss.test.messaging.MessagingTestCase;
import org.jboss.logging.Logger;

import javax.naming.InitialContext;
import javax.jms.ConnectionFactory;
import javax.jms.Connection;
import javax.jms.Queue;
import javax.jms.MessageProducer;
import javax.jms.Session;
import javax.jms.Message;
import javax.jms.DeliveryMode;

/**
* A stress test written to investigate http://jira.jboss.org/jira/browse/JBMESSAGING-362
*
* @author <a href="mailto:ovidiu@jboss.org">Ovidiu Feodorov</a>
* @version <tt>$Revision: 1012 $</tt>
* $Id: CorruptMessageStressTest.java 1012 2006-06-28 16:18:15Z ovidiu $
*/
public class CorruptMessageStressTest extends MessagingTestCase
{
   // Constants -----------------------------------------------------

   private static Logger log = Logger.getLogger(CorruptMessageStressTest.class);

   public static int PRODUCER_COUNT = 30;
   public static int MESSAGE_COUNT = 10000;

   // Static --------------------------------------------------------

   // Attributes ----------------------------------------------------

   private InitialContext ic;

   // Constructors --------------------------------------------------

   public CorruptMessageStressTest(String name)
   {
      super(name);
   }

   // Public --------------------------------------------------------

   public void testMultipleSenders() throws Exception
   {
      ConnectionFactory cf = (ConnectionFactory)ic.lookup("/ConnectionFactory");
      Queue queue = (Queue)ic.lookup("/queue/StressTestQueue");
      drainDestination(cf, queue);

      Connection conn = cf.createConnection();

      Session[] sessions = new Session[PRODUCER_COUNT];
      MessageProducer[] producers = new MessageProducer[PRODUCER_COUNT];

      for(int i = 0; i < PRODUCER_COUNT; i++)
      {
         sessions[i] = conn.createSession(false, Session.AUTO_ACKNOWLEDGE);
         producers[i] = sessions[i].createProducer(queue);
         producers[i].setDeliveryMode(DeliveryMode.NON_PERSISTENT);
      }

      Thread[] threads = new Thread[PRODUCER_COUNT];

      for(int i = 0; i < PRODUCER_COUNT; i++)
      {
         threads[i] = new Thread(new Sender(sessions[i], producers[i]), "Sender Thread #" + i);
         threads[i].start();
         log.info(threads[i].getName() + " started");
      }

      // wait for the threads to finish

      for(int i = 0; i < PRODUCER_COUNT; i++)
      {
         threads[i].join();
      }

      conn.close();
   }

   // Package protected ---------------------------------------------

   // Protected -----------------------------------------------------

   protected void setUp() throws Exception
   {
      super.setUp();

      ServerManagement.start("all");
      ic = new InitialContext(ServerManagement.getJNDIEnvironment());
      ServerManagement.deployQueue("StressTestQueue");

      log.debug("setup done");
   }

   protected void tearDown() throws Exception
   {
      ServerManagement.undeployQueue("StressTestQueue");
      ic.close();
      super.tearDown();
   }

   // Private -------------------------------------------------------

   // Inner classes -------------------------------------------------

   private class Sender implements Runnable
   {
      private Session session;
      private MessageProducer producer;
      private int count = 0;

      public Sender(Session session, MessageProducer producer)
      {
         this.session = session;
         this.producer = producer;
      }

      public void run()
      {
         while(true)
         {
            if (count == MESSAGE_COUNT)
            {
               log.info(Thread.currentThread().getName() + " done");
               break;
            }

            try
            {
               Message m = session.createMessage();
               m.setStringProperty("XXX", "XXX-VALUE");
               m.setStringProperty("YYY", "YYY-VALUE");
               producer.send(m);
               count++;
            }
            catch(Exception e)
            {
               log.error("Sender thread failed", e);
               break;
            }
         }
      }
   }
}
TOP

Related Classes of org.jboss.test.messaging.jms.stress.CorruptMessageStressTest$Sender

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.