<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html lang="en-us" xml:lang="en-us"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta name="security" content="public" /> <meta name="Robots" content="index,follow" /> <meta http-equiv="PICS-Label" content='(PICS-1.1 "http://www.icra.org/ratingsv02.html" l gen true r (cz 1 lz 1 nz 1 oz 1 vz 1) "http://www.rsac.org/ratingsv01.html" l gen true r (n 0 s 0 v 0 l 0) "http://www.classify.org/safesurf/" l gen true r (SS~~000 1))' /> <meta name="DC.Type" content="reference" /> <meta name="DC.Title" content="Java example: Integrating user-defined transactions into Collection Services" /> <meta name="abstract" content="This Java example program shows how to use the Start transaction and End transaction APIs to integrate user-defined transaction performance data into Collection Services." /> <meta name="description" content="This Java example program shows how to use the Start transaction and End transaction APIs to integrate user-defined transaction performance data into Collection Services." /> <meta name="DC.Relation" scheme="URI" content="rzahxcollservusertran.htm" /> <meta name="copyright" content="(C) Copyright IBM Corporation 1998, 2006" /> <meta name="DC.Rights.Owner" content="(C) Copyright IBM Corporation 1998, 2006" /> <meta name="DC.Format" content="XHTML" /> <meta name="DC.Identifier" content="rzahxcollservusertranexjava" /> <meta name="DC.Language" content="en-us" /> <!-- All rights reserved. Licensed Materials Property of IBM --> <!-- US Government Users Restricted Rights --> <!-- Use, duplication or disclosure restricted by --> <!-- GSA ADP Schedule Contract with IBM Corp. --> <link rel="stylesheet" type="text/css" href="./ibmdita.css" /> <link rel="stylesheet" type="text/css" href="./ic.css" /> <title>Java example: Integrating user-defined transactions into Collection Services</title> </head> <body id="rzahxcollservusertranexjava"><a name="rzahxcollservusertranexjava"><!-- --></a> <!-- Java sync-link --><script language="Javascript" src="../rzahg/synch.js" type="text/javascript"></script> <h1 class="topictitle1">Java example: Integrating user-defined transactions into Collection Services</h1> <div><p>This Java™ example program shows how to use the Start transaction and End transaction APIs to integrate user-defined transaction performance data into Collection Services.</p> <div class="section"><div class="note"><span class="notetitle">Note:</span> By using the code examples, you agree to the terms of the <a href="codedisclaimer.htm">Code license and disclaimer information</a>.</div> <pre>import com.ibm.iseries.collectionservices.PerformanceDataReporter; // parameters: // number of TXs per thread // number of threads // log|nolog // enable|disable // transaction seconds public class TestTXApi { static TestTXApiThread[] thread; static private String[] TxTypeString; static private byte[][] TxTypeArray; static private String TxEventString; static private byte[] TxEventArray; static { int i; // initialize transaction type strings and byte arrays TxTypeString = new String[20]; TxTypeString[ 0] = "Transaction type 00"; TxTypeString[ 1] = "Transaction type 01"; TxTypeString[ 2] = "Transaction type 02"; TxTypeString[ 3] = "Transaction type 03"; TxTypeString[ 4] = "Transaction type 04"; TxTypeString[ 5] = "Transaction type 05"; TxTypeString[ 6] = "Transaction type 06"; TxTypeString[ 7] = "Transaction type 07"; TxTypeString[ 8] = "Transaction type 08"; TxTypeString[ 9] = "Transaction type 09"; TxTypeString[10] = "Transaction type 10"; TxTypeString[11] = "Transaction type 11"; TxTypeString[12] = "Transaction type 12"; TxTypeString[13] = "Transaction type 13"; TxTypeString[14] = "Transaction type 14"; TxTypeString[15] = "Transaction type 15"; TxTypeString[16] = "Transaction type 16"; TxTypeString[17] = "Transaction type 17"; TxTypeString[18] = "Transaction type 18"; TxTypeString[19] = "Transaction type 19"; TxTypeArray = new byte[20][]; for ( i = 0; i < 20; i++ ) try { TxTypeArray[i] = TxTypeString[i].getBytes("Cp037"); } catch(Exception e) { System.out.println("Exception \"" + e + "\" when converting"); } }/* static */ public static void main( String[] args ) { int numberOfTXPerThread; int numberOfThreads; boolean log; boolean enable; int secsToDelay; // process parameters if ( args.length >= 5 ) try { numberOfTXPerThread = Integer.parseInt( args[0] ); numberOfThreads = Integer.parseInt( args[1] ); if ( args[2].equalsIgnoreCase( "log" ) ) log = true; else if ( args[2].equalsIgnoreCase( "nolog" ) ) log = false; else { System.out.println( "Wrong value for 3rd parameter!" ); System.out.println( "\tshould be log|nolog" ); return; } if ( args[3].equalsIgnoreCase( "enable" ) ) enable = true; else if ( args[3].equalsIgnoreCase( "disable" ) ) enable = false; else { System.out.println( "Wrong value for 4th parameter!" ); System.out.println( "\tshould be enable|disable" ); return; } secsToDelay = Integer.parseInt( args[4] ); } catch (Exception e) { System.out.println( "Oops! Cannot process parameters!" ); return; } else { System.out.println( "Incorrect Usage." ); System.out.println( "The correct usage is:" ); System.out.println( "java TestTXApi numberOfTXPerThread numberOfThreads log|nolog enable|disable secsToDelay"); System.out.println("\tlog will make the program cut 1 log transaction per start / end pair"); System.out.println("\tdisable will disable performance collection to minimize overhead"); System.out.print("\nExample: \"java TestTXApi 10000 100 log enable 3\" will call " ); System.out.println("cause 10000 transactions for each of 100 threads"); System.out.println("with 3 seconds between start and end of transaction"); System.out.println("Plus it will place additional log call and will enable reporting." ); return; } System.out.println( "Parameters are processed:" ); System.out.println( "\tnumberOfTxPerThread = " + numberOfTXPerThread ); System.out.println( "\tnumberOfThreads = " + numberOfThreads ); System.out.println( "\tlog = " + log ); System.out.println( "\tenable = " + enable ); System.out.println( "\tsecsToDelay = " + secsToDelay ); // cause initialization of a PerformanceDataReporter class { PerformanceDataReporter pReporter = new PerformanceDataReporter(); pReporter.enableReporting(); } TestTXApi t = new TestTXApi( ); System.out.println( "\nAbout to start ..." ); t.prepareTests( numberOfTXPerThread, numberOfThreads, log, enable, secsToDelay ); long startTime = System.currentTimeMillis(); t.runTests( numberOfThreads ); // wait for threads to complete for ( int i = 0; i < numberOfThreads; i++ ) try { thread[i].join( ); } catch(Exception e) { System.out.println( "***Exception \"" + e + "\" while joining thread " + i ); } long endTime = System.currentTimeMillis(); System.out.println( "\nTest runtime for " + ( numberOfTXPerThread * numberOfThreads) + " TXs was " + ( endTime - startTime ) + " msec" ); }/* main() */ private void prepareTests( int numberOfTxPerThread, int numberOfThreads, boolean log, boolean enable, int secsToDelay ) { System.out.println( "Creating " + numberOfThreads + " threads"); thread = new TestTXApiThread[numberOfThreads]; for ( int i = 0; i < numberOfThreads; i++ ) thread[i] = new TestTXApiThread( i, numberOfTxPerThread, log, enable, secsToDelay ); }/* prepareTests() */ private void runTests( int numberOfThreads ) { for ( int i = 0; i < numberOfThreads; i++ ) thread[i].start( ); }/* runTests() */ private class TestTXApiThread extends Thread { private int ordinal; private int numberOfTxPerThread; private boolean log; private boolean enable; private int secsToDelay; private PerformanceDataReporter pReporter; private long timeStamp[]; private long userCounters[]; public TestTXApiThread( int ordinal, int numberOfTxPerThread, boolean log, boolean enable, int secsToDelay ) { super(); this.ordinal = ordinal; this.numberOfTxPerThread = numberOfTxPerThread; this.log = log; this.enable = enable; this.secsToDelay = secsToDelay; pReporter = new PerformanceDataReporter( false ); if ( enable ) pReporter.enableReporting(); timeStamp = new long[1]; userCounters = new long[16]; for ( int i = 0; i < 16; i++ ) userCounters[i] = i; }/* constructor */ public void run() { int i; for ( i = 0; i < numberOfTxPerThread; i++ ) { pReporter.startTransaction( TxTypeArray[i%20], i, TxTypeArray[i%20], 20, timeStamp ); // pReporter.startTransaction( TxTypeArray[i%20], i, TxTypeString[i%20], timeStamp ); if ( log ) pReporter.logTransaction( TxTypeArray[i%20], i, TxTypeArray[i%20], 20 ); // pReporter.logTransaction( TxTypeArray[i%20], i, TxTypeString[i%20] ); if (secsToDelay > 0) try { Thread.sleep(secsToDelay * 1000); } catch(Exception e) { } pReporter.endTransaction( TxTypeArray[i%20], i, TxTypeArray[i%20], 20, timeStamp, userCounters ); // pReporter.endTransaction( TxTypeArray[i%20], i, TxTypeString[i%20], timeStamp, // userCounters ); } }/* run() */ }/* class TestTXApiThread */ }/* class TestTXApi */ </pre> </div> </div> <div> <div class="familylinks"> <div class="parentlink"><strong>Parent topic:</strong> <a href="rzahxcollservusertran.htm" title="Collection Services and performance explorer collect performance data that you define in your applications.">User-defined transactions</a></div> </div> </div> </body> </html>