[jboss-cvs] JBoss Messaging SVN: r4211 - in trunk: examples/jms and 2 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Fri May 16 04:37:02 EDT 2008


Author: ataylor
Date: 2008-05-16 04:37:02 -0400 (Fri, 16 May 2008)
New Revision: 4211

Removed:
   trunk/examples/jms/src/org/jboss/jms/example/PerfTransactionExample.java
Modified:
   trunk/build-messaging.xml
   trunk/examples/jms/build.xml
   trunk/examples/jms/src/org/jboss/jms/example/PerfExample.java
   trunk/examples/jms/src/org/jboss/jms/util/PerfParams.java
Log:
merged transaction perf example into perfexample

Modified: trunk/build-messaging.xml
===================================================================
--- trunk/build-messaging.xml	2008-05-16 06:20:24 UTC (rev 4210)
+++ trunk/build-messaging.xml	2008-05-16 08:37:02 UTC (rev 4211)
@@ -766,7 +766,7 @@
       <java classname="org.jboss.messaging.microcontainer.JBMBootstrapServer" fork="true">
          <jvmarg value="-XX:+UseParallelGC"/>
          <jvmarg value="-Xms512M"/>
-         <jvmarg value="-Xmx1024M"/>
+         <jvmarg value="-Xmx2048M"/>
          <jvmarg value="-Dorg.jboss.logging.Logger.pluginClass=org.jboss.messaging.core.logging.JBMLoggerPlugin"/>
          <jvmarg value="-Djava.library.path=${native.bin.dir}"/>
          <jvmarg value="-Djava.naming.factory.initial=org.jnp.interfaces.NamingContextFactory"/>

Modified: trunk/examples/jms/build.xml
===================================================================
--- trunk/examples/jms/build.xml	2008-05-16 06:20:24 UTC (rev 4210)
+++ trunk/examples/jms/build.xml	2008-05-16 08:37:02 UTC (rev 4211)
@@ -44,6 +44,8 @@
    <property name="message.count" value="200000"/>
    <property name="delivery.mode" value="NON_PERSISTENT"/>
    <property name="sample.period" value="1"/>
+   <property name="sess.trans" value="false"/>
+   <property name="sess.trans.size" value="5000"/>
 
    <path id="compile.classpath">
       <fileset dir="${lib.dir}">
@@ -105,13 +107,24 @@
    <target name="perfListener" depends="compile">
       <java classname="org.jboss.jms.example.PerfExample" fork="true">
          <classpath refid="runtime.classpath"/>
-      	<jvmarg value="-Xmx512M"/>
+      	<jvmarg value="-Xmx1024M"/>
       	<jvmarg value="-XX:+UseParallelGC"/>
          <arg value="-l"/>
       </java>
    </target>
 
+
    <target name="perfSender" depends="compile">
+      <echo>*****************************************************************</echo>
+      <echo>* available parameters (-Dmessage.count=1000)                   *</echo>
+      <echo>*                                                               *</echo>
+      <echo>*     param            description                default       *</echo>
+      <echo>*  message.count    number of messages            200000        *</echo>
+      <echo>*  delivery.mode  PERSISTENT/NON_PERSISTENT    NON_PERSISTENT   *</echo>
+      <echo>*  sample.period  timing period in seconds       1 second       *</echo>
+      <echo>*   sess.trans      Is session transacted          false        *</echo>
+      <echo>* sess.trans.size  batch size to commit            5000         *</echo>
+      <echo>*****************************************************************</echo>
       <java classname="org.jboss.jms.example.PerfExample" fork="true">
          <classpath refid="runtime.classpath"/>
       	<jvmarg value="-Xmx512M"/>
@@ -120,28 +133,9 @@
          <arg value="${message.count}"/>
          <arg value="${delivery.mode}"/>
          <arg value="${sample.period}"/>
+         <arg value="${sess.trans}"/>
+         <arg value="${sess.trans.size}"/>
       </java>
    </target>
 	
-	<target name="perfListenerTransactional" depends="compile">
-      <java classname="org.jboss.jms.example.PerfTransactionExample" fork="true">
-         <classpath refid="runtime.classpath"/>
-      	<jvmarg value="-Xmx512M"/>
-      	<jvmarg value="-XX:+UseParallelGC"/>
-         <arg value="-l"/>
-      </java>
-   </target>
-
-   <target name="perfSenderTransactional" depends="compile">
-      <java classname="org.jboss.jms.example.PerfTransactionExample" fork="true">
-         <classpath refid="runtime.classpath"/>
-      	<jvmarg value="-Xmx512M"/>
-      	<jvmarg value="-XX:+UseParallelGC"/>
-         <arg value="-s"/>
-         <arg value="${message.count}"/>
-         <arg value="PERSISTENT"/>
-         <arg value="${sample.period}"/>
-      </java>
-   </target>
-	
 </project>
\ No newline at end of file

Modified: trunk/examples/jms/src/org/jboss/jms/example/PerfExample.java
===================================================================
--- trunk/examples/jms/src/org/jboss/jms/example/PerfExample.java	2008-05-16 06:20:24 UTC (rev 4210)
+++ trunk/examples/jms/src/org/jboss/jms/example/PerfExample.java	2008-05-16 08:37:02 UTC (rev 4211)
@@ -57,46 +57,72 @@
          int noOfMessages = Integer.parseInt(args[1]);
          int deliveryMode = args[2].equalsIgnoreCase("persistent")? DeliveryMode.PERSISTENT: DeliveryMode.NON_PERSISTENT;
          long samplePeriod = Long.parseLong(args[3]);
-         perfExample.runSender(noOfMessages, deliveryMode, samplePeriod);
+         boolean transacted = Boolean.parseBoolean(args[4]);
+         if(transacted)
+         {
+            deliveryMode = DeliveryMode.PERSISTENT;
+         }
+         int transactionBatchSize = Integer.parseInt(args[5]);
+         PerfParams perfParams = new PerfParams();
+         perfParams.setNoOfMessagesToSend(noOfMessages);
+         perfParams.setDeliveryMode(deliveryMode);
+         perfParams.setSamplePeriod(samplePeriod);
+         perfParams.setSessionTransacted(transacted);
+         perfParams.setTransactionBatchSize(transactionBatchSize);
+         perfExample.runSender(perfParams);
       }
 
    }
 
-   private void init()
+   private void init(boolean transacted)
            throws NamingException, JMSException
    {
       InitialContext initialContext = new InitialContext();
       queue = (Queue) initialContext.lookup("/queue/testPerfQueue");
       ConnectionFactory cf = (ConnectionFactory) initialContext.lookup("/ConnectionFactory");
       connection = cf.createConnection();
-      session = connection.createSession(false, Session.DUPS_OK_ACKNOWLEDGE);
+      session = connection.createSession(transacted, Session.DUPS_OK_ACKNOWLEDGE);
    }
    
-   public void runSender(int noOfMessage, int deliveryMode, long samplePeriod)
+   public void runSender(PerfParams perfParams)
    {
       try
       {
-         init();
+         log.info("params = " + perfParams);
+         init(perfParams.isSessionTransacted());
          MessageProducer producer = session.createProducer(queue);
          producer.setDisableMessageID(true);
          producer.setDisableMessageTimestamp(true);
-         producer.setDeliveryMode(deliveryMode);
+         producer.setDeliveryMode(perfParams.getDeliveryMode());
          ObjectMessage m = session.createObjectMessage();
-         PerfParams perfParams = new PerfParams();
-         perfParams.setNoOfMessagesToSend(noOfMessage);
-         perfParams.setDeliveryMode(deliveryMode);
-         perfParams.setSamplePeriod(samplePeriod);
          m.setObject(perfParams);
          producer.send(m);
          scheduler.scheduleAtFixedRate(command, perfParams.getSamplePeriod(), perfParams.getSamplePeriod(), TimeUnit.SECONDS);
          BytesMessage bytesMessage = session.createBytesMessage();
          byte[] payload = new byte[1024];
          bytesMessage.writeBytes(payload);
-         for (int i = 1; i <= noOfMessage; i++)
+         boolean committed = false;
+         for (int i = 1; i <= perfParams.getNoOfMessagesToSend(); i++)
          {
             producer.send(bytesMessage);
-            messageCount++;            
+            messageCount++;
+            if (perfParams.isSessionTransacted())
+            {
+               if (messageCount % perfParams.getTransactionBatchSize() == 0)
+               {
+                  session.commit();
+                  committed = true;
+               }
+               else
+               {
+                  committed = false;
+               }
+            }
          }
+         if (perfParams.isSessionTransacted() && !committed)
+         {
+            session.commit();
+         }
          scheduler.shutdownNow();
          log.info("average " +  command.getAverage() + " per " + (perfParams.getSamplePeriod()/1000) + " secs" );
       }
@@ -122,7 +148,7 @@
    {
       try
       {
-         init();
+         init(false);
          MessageConsumer messageConsumer = session.createConsumer(queue);
          CountDownLatch countDownLatch = new CountDownLatch(1);
          connection.start();

Deleted: trunk/examples/jms/src/org/jboss/jms/example/PerfTransactionExample.java
===================================================================
--- trunk/examples/jms/src/org/jboss/jms/example/PerfTransactionExample.java	2008-05-16 06:20:24 UTC (rev 4210)
+++ trunk/examples/jms/src/org/jboss/jms/example/PerfTransactionExample.java	2008-05-16 08:37:02 UTC (rev 4211)
@@ -1,272 +0,0 @@
-/*
-   * JBoss, Home of Professional Open Source
-   * Copyright 2005, JBoss Inc., and individual contributors as indicated
-   * by the @authors tag. See the copyright.txt in the distribution for a
-   * full listing of individual contributors.
-   *
-   * This is free software; you can redistribute it and/or modify it
-   * under the terms of the GNU Lesser General Public License as
-   * published by the Free Software Foundation; either version 2.1 of
-   * the License, or (at your option) any later version.
-   *
-   * This software is distributed in the hope that it will be useful,
-   * but WITHOUT ANY WARRANTY; without even the implied warranty of
-   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-   * Lesser General Public License for more details.
-   *
-   * You should have received a copy of the GNU Lesser General Public
-   * License along with this software; if not, write to the Free
-   * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
-   * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
-   */
-package org.jboss.jms.example;
-
-import org.jboss.messaging.core.logging.Logger;
-import org.jboss.jms.util.PerfParams;
-
-import javax.naming.InitialContext;
-import javax.naming.NamingException;
-import javax.jms.*;
-import java.util.concurrent.*;
-
-/**
- * a performance example that can be used to gather simple performance figures.
- * 
- * @author <a href="ataylor at redhat.com">Andy Taylor</a>
- * @author <a href="tim.fox at jboss.com">Tim Fox</a>
- */
-public class PerfTransactionExample
-{
-   private static Logger log = Logger.getLogger(PerfExample.class);
-   private Queue queue;
-   private Connection connection;
-   private int messageCount = 0;
-   private static final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
-   private Session session;
-   private Sampler command = new Sampler();
-   
-   private static final int transactionSize = 5000;
-
-   public static void main(String[] args)
-   {
-      PerfTransactionExample perfExample = new PerfTransactionExample();
-      if (args[0].equalsIgnoreCase("-l"))
-      {
-         perfExample.runListener();
-      }
-      else
-      {
-         int noOfMessages = Integer.parseInt(args[1]);
-         int deliveryMode = args[2].equalsIgnoreCase("persistent")? DeliveryMode.PERSISTENT: DeliveryMode.NON_PERSISTENT;
-         long samplePeriod = Long.parseLong(args[3]);
-         perfExample.runSender(noOfMessages, deliveryMode, samplePeriod);
-      }
-
-   }
-
-   private void init()
-           throws NamingException, JMSException
-   {
-      InitialContext initialContext = new InitialContext();
-      queue = (Queue) initialContext.lookup("/queue/testPerfQueue");
-      ConnectionFactory cf = (ConnectionFactory) initialContext.lookup("/ConnectionFactory");
-      connection = cf.createConnection();
-      session = connection.createSession(true, Session.SESSION_TRANSACTED);
-   }
-   
-   public void runSender(int noOfMessage, int deliveryMode, long samplePeriod)
-   {
-      try
-      {
-         init();
-         MessageProducer producer = session.createProducer(queue);
-         producer.setDisableMessageID(true);
-         producer.setDisableMessageTimestamp(true);
-         producer.setDeliveryMode(deliveryMode);
-         ObjectMessage m = session.createObjectMessage();
-         PerfParams perfParams = new PerfParams();
-         perfParams.setNoOfMessagesToSend(noOfMessage);
-         perfParams.setDeliveryMode(deliveryMode);
-         perfParams.setSamplePeriod(samplePeriod);
-         m.setObject(perfParams);
-         producer.send(m);
-         scheduler.scheduleAtFixedRate(command, perfParams.getSamplePeriod(), perfParams.getSamplePeriod(), TimeUnit.SECONDS);
-         BytesMessage bytesMessage = session.createBytesMessage();
-         byte[] payload = new byte[1024];
-         bytesMessage.writeBytes(payload);
-         boolean committed = false;
-         for (int i = 1; i <= noOfMessage; i++)
-         {
-            producer.send(bytesMessage);
-            messageCount++;
-            if (messageCount % transactionSize == 0)
-            {
-               session.commit();
-               committed = true;
-            }
-            else
-            {
-               committed = false;
-            }
-         }
-         if (!committed)
-         {
-            session.commit();
-         }
-         scheduler.shutdownNow();
-         log.info("average " +  command.getAverage() + " per " + (perfParams.getSamplePeriod()/1000) + " secs" );
-      }
-      catch (Exception e)
-      {
-         e.printStackTrace();
-      }
-      finally
-      {
-         if (connection != null)
-            try
-            {
-               connection.close();
-            }
-            catch (JMSException e)
-            {
-               e.printStackTrace();
-            }
-      }
-   }
-
-   public void runListener()
-   {
-      try
-      {
-         init();
-         MessageConsumer messageConsumer = session.createConsumer(queue);
-         CountDownLatch countDownLatch = new CountDownLatch(1);
-         connection.start();
-         log.info("emptying queue");
-         while (true)
-         {
-            Message m = messageConsumer.receive(500);
-            if (m == null)
-            {
-               break;
-            }
-         }
-         messageConsumer.setMessageListener(new PerfListener(countDownLatch));
-         log.info("READY!!!");
-         countDownLatch.await();
-      }
-      catch (Exception e)
-      {
-         e.printStackTrace();
-      }
-      finally
-      {
-         if (connection != null)
-            try
-            {
-               connection.close();
-            }
-            catch (JMSException e)
-            {
-               e.printStackTrace();
-            }
-      }
-   }
-
-
-
-   /**
-    * a message listener
-    */
-   class PerfListener implements MessageListener
-   {
-      private boolean started = false;
-      private PerfParams params = null;
-      int count = 0;
-      private CountDownLatch countDownLatch;
-
-
-      public PerfListener(CountDownLatch countDownLatch)
-      {
-         this.countDownLatch = countDownLatch;
-      }
-
-      public void onMessage(Message message)
-      {
-         if (!started)
-         {
-            started = true;
-            ObjectMessage m = (ObjectMessage) message;
-            try
-            {
-               params = (PerfParams) m.getObject();
-            }
-            catch (JMSException e)
-            {
-               params = new PerfParams();
-            }
-            log.info("params = " + params);
-            scheduler.scheduleAtFixedRate(command, params.getSamplePeriod(), params.getSamplePeriod(), TimeUnit.SECONDS);
-         }
-         else
-         {
-            try
-            {
-               boolean committed = false;
-               BytesMessage bm = (BytesMessage) message;
-               messageCount++;      
-               if (messageCount % transactionSize == 0)
-               {
-                  session.commit();
-                  committed = true;
-               }
-               if (messageCount == params.getNoOfMessagesToSend())
-               {
-                  if (!committed)
-                  {
-                     session.commit();
-                  }
-                  countDownLatch.countDown();
-                  scheduler.shutdownNow();
-                  log.info("average " +  command.getAverage() + " per " + (params.getSamplePeriod()/1000) + " secs" );
-               }
-            }
-            catch (Exception e)
-            {
-               e.printStackTrace();
-            }
-         }
-      }
-   }
-
-   /**
-    * simple class to gather performance figures
-    */
-   class Sampler implements Runnable
-   {
-      int sampleCount = 0;
-
-      long startTime = 0;
-
-      long samplesTaken = 0;
-
-      public void run()
-      {
-         if(startTime == 0)
-         {
-            startTime = System.currentTimeMillis();
-         }
-         long elapsed = System.currentTimeMillis() - startTime;
-         int lastCount = sampleCount;
-         sampleCount = messageCount;
-         samplesTaken++;
-         log.info(" time elapsed " + (elapsed / 1000) + " secs, message count " + (sampleCount) + " : this period " + (sampleCount - lastCount));
-      }
-
-      public long getAverage()
-      {
-         return sampleCount/samplesTaken;
-      }
-
-   }
-}

Modified: trunk/examples/jms/src/org/jboss/jms/util/PerfParams.java
===================================================================
--- trunk/examples/jms/src/org/jboss/jms/util/PerfParams.java	2008-05-16 06:20:24 UTC (rev 4210)
+++ trunk/examples/jms/src/org/jboss/jms/util/PerfParams.java	2008-05-16 08:37:02 UTC (rev 4211)
@@ -32,6 +32,8 @@
    int noOfMessagesToSend = 1000;
    long samplePeriod = 1000;
    int deliveryMode  = DeliveryMode.NON_PERSISTENT;
+   boolean isSessionTransacted = false;
+   int transactionBatchSize = 5000;
 
    public int getNoOfMessagesToSend()
    {
@@ -63,9 +65,31 @@
       this.deliveryMode = deliveryMode;
    }
 
+   public boolean isSessionTransacted()
+   {
+      return isSessionTransacted;
+   }
+
+   public void setSessionTransacted(boolean sessionTransacted)
+   {
+      isSessionTransacted = sessionTransacted;
+   }
+
+
+   public int getTransactionBatchSize()
+   {
+      return transactionBatchSize;
+   }
+
+   public void setTransactionBatchSize(int transactionBatchSize)
+   {
+      this.transactionBatchSize = transactionBatchSize;
+   }
+
    public String toString()
    {
       return "message to send = " + noOfMessagesToSend + " samplePeriod = " + samplePeriod + "ms" + " DeliveryMode = " +
-              (deliveryMode == DeliveryMode.PERSISTENT?"PERSISTENT":"NON_PERSISTENT");
+              (deliveryMode == DeliveryMode.PERSISTENT?"PERSISTENT":"NON_PERSISTENT") + " session transacted = " + isSessionTransacted +
+              (isSessionTransacted?" transaction batch size = " + transactionBatchSize:"");
    }
 }




More information about the jboss-cvs-commits mailing list