Record and Replay
Record and Replay
Record and Replay
Note Before using this information and the product it supports, read the information in Notices on page 25.
This edition applies to version 8, release 0, modification 0 of IBM WebSphere Message Broker and to all subsequent releases and modifications until otherwise indicated in new editions. Copyright IBM Corporation 2011. US Government Users Restricted Rights Use, duplication or disclosure restricted by GSA ADP Schedule Contract with IBM Corp.
Contents
About this topic collection. . . . . . . v Chapter 1. Recording, viewing, and replaying data . . . . . . . . . . . . 1
Record and replay . . . . . . . . Enabling security for record and replay . . . . . . . . 1 . 1
Notices . . . . . . . . . . . . . . 25
Trademarks . . . . . . . . . . . . . . 27
iii
iv
vi
permitted to complete actions on the broker. When you create an execution group on a broker for which administrative security is enabled, the queue SYSTEM.BROKER.AUTH.executionGroupName is created. Populate the queue with the appropriate user authorization. To enable security for a broker, complete the following steps. 1. To use a web administration server to view and replay data, you must create a user called ibmuser on your system. The user ibmuser cannot be a member of the mqm or mqbrkrs groups. You do not need to create this user if you are not enabling security. You will use the user ID ibmuser to log in to the web administration server. 2. Enable administrative security by setting the -s parameter to active. v To enable administrative security when you create the broker, run the mqsicreatebroker, as shown in the following example:
mqsicreatebroker brokerName -q brokerQueueManagerName -s active
(If you run this command on Windows, you must also set the -i parameter. For details, see mqsicreatebroker command in the information center.) v To enable administrative security for a broker that you have already created, stop the broker, then run the mqsichangebroker, as shown in the following example:
mqsichangebroker brokerName -s active
For more information, see Activating broker administration security in the information center. 3. To allow the user ibmuser to run record and replay queries on the execution group, ensure that they have inquire (inq) administration authority on the queues SYSTEM.BROKER.AUTH and SYSTEM.BROKER.AUTH.executionGroupName. For more information, see Granting and revoking authority for broker administration security in the information center. 4. In addition to setting administrative security, you must also set security for data capture. The queue SYSTEM.BROKER.DC.AUTH controls the record and replay actions that user ibmuser can complete on the broker. Ensure that the user has the appropriate authorization to complete the following actions on this queue:
Action To view data To view bit streams and exception lists To replay data Authority required Inquire (+inq) Write (+put) Execute (+set)
To change these authorizations, you can use WebSphere MQ commands or the WebSphere Message Broker Explorer. To use WebSphere MQ commands, see Granting and revoking authority on Linux, UNIX, and Windows systems in the information center. To use the WebSphere Message Broker Explorer, complete the following steps. a. In the MQ Explorer - Navigator view, navigate to IBM WebSphere MQBrokers > Quene Managers, expand your queue manage, and select Queues. b. Right-click the queue SYSTEM.BROKER.DC.AUTH, then click Object Authorities > Manage Authority Records.
c. Expand Specific Profiles and click SYSTEM.BROKER.DC.AUTH. d. On the Users tab, select ibmuser and click Edit. e. Set the appropriate authorizations and click OK, then close the Manage Authority Records dialog box. 5. If you change authorizations, restart your broker and broker queue manager to ensure that changes take effect. To disable security, set the -s parameter to inactive on the mqsichangebroker command. Next: To view data that has been recorded, see Chapter 3, Viewing recorded data, on page 15. To replay data that has been recorded, see Chapter 4, Replaying data, on page 21.
2. Create an ODBC definition for the database. If you have used the supplied script to create your database without modifications, create an ODBC definition for the database called MBRECORD, with MBRECORD as the data source name (DSN). For more information, see Enabling ODBC connections to the database in the information center. 3. Use the mqsisetdbparms command to set a user identifier and password for the broker to use when connecting to the database; for example:
mqsisetdbparms brokerName -n dataSourceName -u userID -p password
v brokerName is the name of your broker. v dataSourceName identifies the database to which you want to record data. v userID and password specify the user identifier and the password that the broker uses to connect to the database. 4. To ensure that the changes to the mqsisetdbparms command take effect, restart the broker. For more information, see Starting and stopping a broker in the information center. 5. Test the connection to your database by using the mqsicvp command. For more information, see mqsicvp command in the information center. 6. Specify the runtime properties for data capture by creating the appropriate configurable services. To specify data processing information and connection information for the database, create a DataCaptureStore configurable service. To identify the monitoring topic and the data capture store to use for processing event data for this topic, create a DataCaptureSource configurable service. Multiple instances of the DataCaptureSource configurable service can use the same DataCaptureStore configurable service. a. Configure the DataCaptureStore configurable service. You can use the provided DefaultCaptureStore configurable service or create your own configurable service of type DataCaptureStore. You can use the WebSphere Message Broker Explorer to create the configurable service; for more information, see Using the WebSphere Message Broker Explorer to work with configurable services in the information center. Alternatively, use the mqsicreateconfigurableservice command; for more information, see mqsicreateconfigurableservice command in the information center. For descriptions of properties of this configurable service, see DataCaptureStore configurable service properties on page 8. For example, enter the following command on a command line:
mqsicreateconfigurableservice brokerName -c DataCaptureStore -o dataCaptureStoreName -n dataSourceName,egForRecord -v dataSource,executionGroup
v brokerName is the name of your broker. v dataCaptureStoreName is the name of your configurable service object. v dataSource is the name of your data source. v executionGroup is the name of the execution group that processes data for recording. b. Configure the DataCaptureSource configurable service. Create a configurable service of type DataCaptureSource. You can use the WebSphere Message Broker Explorer or the mqsicreateconfigurableservice command to create the configurable service. If you use the DataCaptureSourceTemplate in WebSphere Message Broker Explorer, you must create a new configurable service based on the template. If you edit the template without creating a new configurable service, an error is issued
at run time. For information about the properties of this configurable service, see DataCaptureSource configurable service properties on page 10. For example, on UNIX systems, enter the following command on a command line:
mqsicreateconfigurableservice brokerName -c DataCaptureSource -o dataCaptureSourceName -n dataCaptureStore,topic -v dataCaptureStoreName,$SYS/Broker/myBroker/Monitoring/executionGroupName/msgFlowName
v brokerName is the name of your broker. v dataCaptureSourceName is the name of the configurable service object. v dataCaptureStoreName is the name of the DataCaptureStore configurable service that you want to use for this subscription. v myBroker, executionGroupName, and msgFlowName are the names of the broker, execution group, and message flow from which you want to capture data. These values are part of a topic string, which is used to subscribe to events that you set up by using business monitoring. You can use topic wildcards in this topic string. On UNIX systems, enclose the topic string in single quotation marks when you enter it on a command line. On Windows systems, use double quotation marks. No quotation marks are required if you create the configurable service by using the WebSphere Message Broker Explorer. Test that you have successfully subscribed to the topic specified for the topic property by displaying the subscriptions on the queue manager for brokerName. Use WebSphere Message Broker Explorer or the runmqsc command. To check the subscriptions by using the WebSphere Message Broker Explorer, complete the following steps: 1) Expand the queue manager under the Queue Managers folder 2) To open the Subscriptions pane, click Subscriptions. 3) Click Refresh and check that a subscription with a topic string of $SYS/Broker/myBroker/Monitoring/executionGroupName/msgFlowName exists To check the subscription by using runmqsc, complete the following steps: 1) At a command prompt, type runmqsc qmName, where qmName is your queue manager name. 2) To display all the queue manager subscriptions, type dis sub(*) 3) Check that the topic string $SYS/Broker/myBroker/Monitoring/ executionGroupName/msgFlowName is returned in the list of subscription topics 4) To exit the runmqsc environment, type end 7. To configure monitoring on a message flow to emit events for capture, use one of the following methods. v Configure and enable event sources, and activate monitoring for the message flow, by completing the steps in Business-level monitoring in the information center. You do not need to subscribe to the monitoring topic; the broker manages the subscription to the topic specified in the DataCaptureSource configurable service. v Configure monitoring event sources by using the sample monitoring profile that is provided at install_dir/sample/RecordReplay/ basicMonitoringProfile.xml.
Chapter 2. Recording data
The sample monitoring profile works for a single input node. You must update the profile to replace NODENAME with the name of your input node. To enable this monitoring profile, run the mqsicreateconfigurableservice, mqsichangeproperties, and mqsichangeflowmonitoring commands against the broker where you have deployed the flow. For details about running these commands, see Configuring monitoring event sources using a monitoring profile in the information center. The subscription to the monitoring events is durable, which results in messages being put to the queue specified in the queueName property of the DataCaptureStore configurable service. Messages can be put to this queue even when the broker is not running. For more information about how you can monitor the queue depth and tune data capture, see Tuning data capture on page 11. Next: v You can enable security for recording data by following the instructions in Enabling security for record and replay on page 1. v After you have recorded data, you can view it. For more information, see Chapter 3, Viewing recorded data, on page 15. v You might want to turn off recording for a particular execution group temporarily (for performance reasons, for example). For more information, see Disabling and enabling data capture on page 10. v For more information about tuning data capture, see Tuning data capture on page 11.
Description of properties This property identifies the name of the backout queue used for data capture. Messages that cannot be processed (for example, because the specified database does not exist) are sent to this queue. The default value for the property is SYSTEM.BROKER.DC.BACKOUT. The queue SYSTEM.BROKER.DC.BACKOUT is created when the broker is created. If a data capture source refers to this data capture store, and no backoutQueue has been specified, an error occurs. The same backoutQueue can be specified for multiple data capture stores. This property identifies the number of input messages that are processed on a data capture thread before a sync point is taken. This property identifies the time interval at which a commit is taken when the commitCount property is greater than 1 but the number of messages processed has not reached the value of the commitCount property.
commitCount commitIntervalSecs
Description of properties This property represents the ODBC connection definition for the database to which you want to record data. This property does not have a default value, but you get an error if you do not set it. This property identifies the execution group to use for processing the data that is being recorded. By default, no value is set. If you do not set a value, and a DataCaptureSource configurable service refers to this DataCaptureStore configurable service, you get a runtime error. This property identifies the execution group to use for processing the data that is retrieved from a database for viewing. By default, no value is set. If you do not set a value, this data capture store is not accessible from a web administration server. You must start the execution group in order to view data. This property identifies the name of the queue that holds the data before it is recorded to the database. The default value for this property is SYSTEM.BROKER.DC.RECORD. The queue SYSTEM.BROKER.DC.RECORD is created when the broker is created. Change the value of this property to distribute the data from multiple data capture sources across multiple queues. If you do not use the default value, you must create the corresponding local queue. This property identifies the database schema name to use when recording to a database. This property does not have a default value. If you do not set the property, depending on the database, the default database schema is used, if there is one, or no schema is used. This property identifies the number of threads that are used by the egForRecord execution group to process the monitoring topic subscriptions. The default value is 10.
egForRecord
egForView
queueName
schema
threadPoolSize
useCoordinatedTransaction This property determines whether transactions are globally coordinated across WebSphere MQ and database resources. The default value is false. For more information, see Configuring global coordination of transactions (two-phase commit) in the information center.
Description of properties This property identifies the DataCaptureStore configurable service that is used to configure data capture for the message flows specified in the topic property. Multiple instances of DataCaptureSource configurable services can refer to one instance of DataCaptureStore configurable service. Use the topic property to determine which message flows are processed by the DataCaptureStore configurable service identified in this property. This property identifies a subscription topic that is used for business-level monitoring of a message flow. The value of the property takes the form: $SYS/Broker/brokerName/Monitoring/ executionGroup/msgFlow where brokerName, executionGroup, and msgFlow represent the names of your broker, execution group, and message flow. You can use wildcards in the topic string; for more information about using wildcards in topics, see Special characters in topics in the information center. On Windows platforms, enclose the topic string in double quotation marks; on UNIX platforms, use single quotation marks.
topic
10
Your change takes effect immediately. v If you are using the runtime commands, complete the following steps: 1. Enter the following command on a WebSphere Message Broker command line, where brokerName is the name of your broker and executionGroup is the name of the execution group:
mqsireportproperties brokerName -e executionGroup -o ComIbmDataCaptureManager -a
Your change takes effect immediately. Next: When you are ready to start recording again for your execution group, use the mqsichangeproperties command to change the enabled property to true, and restart the broker.
11
can spread workload by specifying multiple data capture stores with different execution groups for recording and viewing data specified for each one. DataCaptureStore and DataCaptureSource configurable service instances The relationship of the DataCaptureStore configurable service to the DataCaptureSource configurable service is many to one. To use multiple data sources for storing recorded data, you can define several DataCaptureSource configurable services. To increase the numbers of executions groups and queues used to process data for recording and viewing, you can change the ratio of DataCaptureStore to DataCaptureSource configurable services. queueName and backoutQueue These properties are set on the DataCaptureStore configurable service. The queueName property specifies the queue that is used for holding data before it is recorded. The backoutQueue property specifies the queue that is used for backing out messages that cannot be processed. You can use the default queues or you can create new queues so that the data is spread across multiple queues. You can configure WebSphere MQ to warn when queue depths are close to their maximum size. For more information, see the WebSphere MQ documentation about Event monitoring on the WebSphere MQ Library web page.You can also increase the maximum queue depth and the maximum message length for queues by using either the runmqsc command or the WebSphere Message Broker Explorer. To use the runmqsc command, complete the following steps. 1. At a command prompt, enter the following command, where qmName is the name of your queue manager:
runmqsc qmName
2. Confirm the current settings for your queue by running the following command, where qName is the name of the relevant queue; for example, SYSTEM.BROKER.DC.RECORD. If your queue name contains lowercase characters, you must enclose the queue name in single quotation marks.
dis qlocal(qName) maxdepth,maxmsgl
3. Enter the following command, where qName is the name of your queue, newMaxDepth is the new setting for maximum queue depth, and newMaxMsgL is the new setting for maximum message length:
alter qlocal(qName) maxdepth(newMaxDepth) maxmsgl(newMaxMsgL)
4. To exit the runmqsc environment, type end. To use the WebSphere Message Broker Explorer, complete the following steps. 1. Under the Queue Managers folder, right-click the queue manager and select Properties. 2. In the menu tree, select Extended. 3. Edit the values for the Max uncommitted messages or Max message length properties.
12
13
String dataCaptureStore = "MyStore"; // ID of message to replay String replayMsgId = "0123456789ABCDEF"; // DataDestination to replay message to String dataDestination = "ReplayDestination"; // EG to replay String replayEG = "MyExecutionGroupName"; Properties dataCaptureProps = new Properties(); // Set the message to replay dataCaptureProps.setProperty(DataCaptureEntry.PROPERTY_WMBMSG_KEY, replayMsgId); // Set the destination to replay to dataCaptureProps.setProperty(AttributeConstants.DATACAPTURE_REPLAY, dataDestination); DataCaptureEntry dataCaptureEntry = new DataCaptureEntry(dataCaptureProps ); brokerProxy = WebAdminBrokerProxy.getLocalInstance("MB8BROKER"); ExecutionGroupProxy egProxy = brokerProxy.getExecutionGroupByName(replayEG); // Submit request to EG to actually do replay DataCaptureProxy dataCaptureProxy = egProxy.getDataCapture(dataCaptureStore, dataCaptureEntry); dataCaptureProxy.hasBeenPopulatedByBroker(true); String responseBody = dataCaptureProxy.getDataCaptureEntryAsXml(1); } catch (Exception e) { // TODO: Handle Exception } finally { if (brokerProxy != null) { brokerProxy.disconnect(); } }
14
v brokerName is the name of your broker. v dataCaptureStoreName is the name of your DataCaptureStore configurable object. v executionGroupName is the name of the execution group that processes the data for viewing. If you do not want to use the DataCaptureStore and DataCaptureSource configurable services that you set up for recording data, create new ones as described in Chapter 2, Recording data, on page 5. Specify a value for the egForView property. You can specify the same execution group in the egForRecord and the egForView properties, or you might want to spread the workload across two execution groups. For more information about the egForRecord and egForView properties, see DataCaptureStore configurable service properties on page 8. 2. Use one of the following methods to view your data. v Use the Message Broker API. For more information, see Recording and replaying data with a CMP application on page 13. v View recorded data and administer your brokers from a web interface, by configuring a WebSphere Message Broker web administration server. For more information, see Configuring a web administration server for data capture on page 16. v Use the WebSphere Message Broker Representational State Transfer (REST) application programming interface. Documentation for this application programming interface can be found in the WebSphere Message Broker installation directory under the subfolder docs/REST/, for example: /opt/mqsi/8.0.0.0/docs/REST/.
15
- brokerName is the name of your broker - portValue is the HTTP port value that you want to use for web administration If you are using HTTPS, run the following command:
mqsichangeproperties brokerName -b webadmin -o HTTPSConnector -n port,keystoreFile,keystorePass -v portValue,fileName,password
- brokerName is the name of your broker. - portValue is the HTTPS port value that you want to use for web administration. - fileName is your keystore file. - password is the password for the keystore file.
16
For more information about the properties that can be set for the HTTPConnector and HTTPSConnector objects, see webadmin component parameter values on page 18. b. Confirm that the properties are set correctly. If you are using HTTP, run the following command:
mqsireportproperties brokerName -b webadmin -o HTTPConnector -a
This command produces a response similar to this example (for the HTTPConnector):
HTTPConnector uuid=HTTPConnector address= port=7054 allowTrace= maxPostSize= acceptCount= bufferSize= compressableMimeTypes= compression= connectionLinger= connectionTimeout= maxHttpHeaderSize= maxKeepAliveRequests= maxSpareThreads= maxThreads= minSpareThreads= noCompressionUserAgents= restrictedUserAgents= socketBuffer= tcpNoDelay= enableLookups=false
c. Enable the web administration server for the broker. To enable web administration, and to use HTTP as the communication protocol between the broker and the web administration server, run the following command on a WebSphere Message Broker command line, where brokerName is the name of your broker:
mqsichangeproperties brokerName -b webadmin -o server -n enabled,enableSSL -v true,false
To enable web administration, and to use HTTPS as the protocol for communication between the broker and the web administration server, run the following command:
mqsichangeproperties brokerName -b webadmin -o server -n enabled,enableSSL -v true,true
For more information about the properties of the web administration server, see webadmin component parameter values on page 18. d. Confirm that the web administration component is enabled by running the mqsireportproperties command, as shown in the following example.
mqsireportproperties brokerName -b webadmin -o server -a
17
2. To ensure that the changes take effect, restart the broker. For more information, see Starting and stopping a broker in the information center. 3. Open the web administration server interface in a web browser. Use the following URL:protocol://serverAddress:port/ where v protocol has the value http or https, depending on whether you are using an HTTP or an HTTPS connector object v serverAddress identifies the web administration server address specified for the HTTP or HTTPS connector object; for example 127.0.0.1 v port identifies the port that you specified for the HTTP or HTTPS connector object in the preceding steps Click OK to log in as user ibmuser. (You cannot change the user ID or password.) Click the Administration tab to open a view where you can view and administer your broker resources. Click the Data viewer tab to open a view where you can view your recorded data. Select the data store containing the data that you want to view from the Select data store menu. A data store shows in the Select data Store menu only if the egForView property was set in the corresponding DataCaptureStore configurable service. For more information about the fields in this view, see The monitoring event in the information center. Next: To replay a message, see Chapter 4, Replaying data, on page 21.
18
server. You must set this value to true if you need to use HTTPS. If you specify a value of true, you must configure the HTTPSConnector option, ensuring that you set appropriate values in the keystore-related properties. v Value type - Boolean v Initial value - unset (equivalent to false)
19
20
21
4. To view recorded data, click the Data viewer tab. For more information about the fields in this view, see The monitoring event in the information center. 5. Select the data store that contains the data that you want to replay. Only data stores for which the egForView property is set in the corresponding DataCaptureStore configurable service are available. 6. Optional: Each row of data represents a message. To sort these rows into a particular order, click a column heading. To filter data, click Filter ,
. complete the appropriate fields, then click Apply filter Filtering is case sensitive and allows the use of wildcards. To search for an exact match, enclose the search string in quotation marks. You can also search for a sub-string, and you can use an asterisk (*) to match zero or more characters. 7. Optional: You can download a bit stream by clicking the arrow ( Bitstream column. 8. Select one or more rows to replay to a particular destination. . 9. Click Select one or more rows to replay 10. Optional: To replay all selected data at once, ensure that Replay as batch is selected. This check box is selected by default. If you clear this check box, messages are replayed one by one. If you sorted the messages, they are started in the specified order. 11. Optional: To close the view when all data has been replayed successfully, select Close on success. This check box is cleared by default. 12. In the Replay data dialog box, select the destination for your data, then click ) to replay selected data to that destination. the arrow ( The list of available destinations corresponds to the destinations that you defined in instances of the DataDestination configurable service. Results: The selected data is sent to the specified destination. Messages that are not delivered are listed in the Replay data dialog box. You can replay all undelivered messages or a single message. To replay a single message, click Replay ( the Single Replay column. Next: When you have replayed data to a WebSphere MQ queue, you can modify the original message flow, or create a new flow, with an MQInput node that gets messages from the queue. ) in ) in the
22
Description of properties This property identifies the execution group to use for processing data that is replayed to this destination. The default value is default. This property is mandatory. This property identifies the destination to which you want to replay data. The value of the property takes the form: wmq:/msg/queue/queueName@queueManagerName where queueName identifies the destination queue and queueManagerName identifies the queue manager that owns the queue. This property is mandatory. The default value is wmq:/msg/queue/[QUEUE]@[QMGR]. You must replace [QUEUE] and [QMGR] with the names of your queue and queue manager.
endpoint
endpointType
This property identifies the type of the target destination. The default value for the property is WMQDestination. This property must be set to the default value.
23
24
Notices
This information was developed for products and services offered in the U.S.A. IBM may not offer the products, services, or features discussed in this information in other countries. Consult your local IBM representative for information on the products and services currently available in your area. Any reference to an IBM product, program, or service is not intended to state or imply that only that IBM product, program, or service may be used. Any functionally equivalent product, program, or service that does not infringe any IBM intellectual property right may be used instead. However, it is the user's responsibility to evaluate and verify the operation of any non-IBM product, program, or service. IBM may have patents or pending patent applications covering subject matter described in this information. The furnishing of this information does not give you any license to these patents. You can send license inquiries, in writing, to: IBM Director of Licensing IBM Corporation North Castle Drive Armonk, NY 10504-1785 U.S.A. For license inquiries regarding double-byte (DBCS) information, contact the IBM Intellectual Property Department in your country or send inquiries, in writing, to: Intellectual Property Licensing Legal and Intellectual Property Law IBM Japan Ltd. 1623-14, Shimotsuruma, Yamato-shi Kanagawa 242-8502 Japan The following paragraph does not apply to the United Kingdom or any other country where such provisions are inconsistent with local law: INTERNATIONAL BUSINESS MACHINES CORPORATION PROVIDES THIS PUBLICATION "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Some states do not allow disclaimer of express or implied warranties in certain transactions, therefore, this statement may not apply to you. This information could include technical inaccuracies or typographical errors. Changes are periodically made to the information herein; these changes will be incorporated in new editions of the information. IBM may make improvements and/or changes in the product(s) and/or the program(s) described in this information at any time without notice. Any references in this information to non-IBM websites are provided for convenience only and do not in any manner serve as an endorsement of those websites. The materials at those websites are not part of the materials for this IBM product and use of those websites is at your own risk.
Copyright IBM Corp. 2011
25
IBM may use or distribute any of the information you supply in any way it believes appropriate without incurring any obligation to you. Licensees of this program who wish to have information about it for the purpose of enabling: (i) the exchange of information between independently created programs and other programs (including this one) and (ii) the mutual use of the information which has been exchanged, should contact: IBM United Kingdom Laboratories, Mail Point 151, Hursley Park, Winchester, Hampshire, England SO21 2JN Such information may be available, subject to appropriate terms and conditions, including in some cases, payment of a fee. The licensed program described in this information and all licensed material available for it are provided by IBM under terms of the IBM Customer Agreement, IBM International Programming License Agreement, or any equivalent agreement between us. Any performance data contained herein was determined in a controlled environment. Therefore, the results obtained in other operating environments may vary significantly. Some measurements may have been made on development-level systems and there is no guarantee that these measurements will be the same on generally available systems. Furthermore, some measurements may have been estimated through extrapolation. Actual results may vary. Users of this document should verify the applicable data for their specific environment. Information concerning non-IBM products was obtained from the suppliers of those products, their published announcements or other publicly available sources. IBM has not tested those products and cannot confirm the accuracy of performance, compatibility or any other claims related to non-IBM products. Questions on the capabilities of non-IBM products should be addressed to the suppliers of those products. All statements regarding IBM's future direction or intent are subject to change or withdrawal without notice, and represent goals and objectives only. This information includes examples of data and reports used in daily business operations. To illustrate them as completely as possible, the examples include the names of individuals, companies, brands, and products. All of these names are fictitious and any similarity to the names and addresses used by an actual business enterprise is entirely coincidental. COPYRIGHT LICENSE: This information contains sample application programs in source language, which illustrate programming techniques on various operating platforms. You may copy, modify, and distribute these sample programs in any form without payment to IBM, for the purposes of developing, using, marketing or distributing application programs conforming to the application programming interface for the operating platform for which the sample programs are written. These examples have not
26
been thoroughly tested under all conditions. IBM, therefore, cannot guarantee or imply reliability, serviceability, or function of these programs. The sample programs are provided "AS IS", without warranty of any kind. IBM shall not be liable for any damages arising out of your use of the sample programs. Each copy or any portion of these sample programs or any derivative work, must include a copyright notice as follows: (C) (your company name) (year). Portions of this code are derived from IBM Corp. Sample Programs. Copyright IBM Corp. _enter the year or years_. All rights reserved.
Trademarks
IBM, the IBM logo, and ibm.com are trademarks or registered trademarks of International Business Machines Corp., registered in many jurisdictions worldwide. Other product and service names might be trademarks of IBM or other companies. A current list of IBM trademarks is available on the Web at Copyright and trademark information at www.ibm.com/legal/copytrade.shtml. Linux is a registered trademark of Linus Torvalds in the United States, other countries, or both. Microsoft and Windows are trademarks of Microsoft Corporation in the United States, other countries, or both. UNIX is a registered trademark of The Open Group in the United States and other countries. Other company, product, or service names may be trademarks or service marks of others.
Notices
27
28