Table of Contents Introduction to Oracle Tuxedo Programming Oracle Tuxedo Distributed Application Programming Communication Paradigms Oracle Tuxedo Clients Oracle Tuxedo Servers Basic Server Operation Servers as Requesters Oracle Tuxedo API: ATMI Programming Environment Updating the UBBCONFIG Configuration File Setting Environment Variables Defining Equivalent Data Types Starting and Stopping the Application Managing Typed Records Overview of Typed Records Defining Typed Records Using a VIEW Typed Record Setting Environment Variables for a VIEW Typed Record Creating a View Description File Executing the VIEW Compiler Using an FML Typed Record Setting Environment Variables for an FML Typed Record Creating a Field Table File Initializing a Typed Record Creating an FML Header File Using an XML Typed Record Writing Clients Joining an Application Using Features of the TPINFDEF-REC Record Client Naming Unsolicited Notification Handling System Access Mode Resource Manager Association Client Authentication Leaving the Application Building Clients See Also Client Process Examples Writing Servers Oracle Tuxedo System Controlling Program System-supplied Server and Services System-supplied Server: AUTHSVR( ) System-supplied Services: TPSVRINIT Routine Receiving Command-line Options Opening a Resource Manager System-supplied Services: TPSVRDONE Routine Guidelines for Writing Servers Defining a Service Terminating a Service Routine Sending Replies Invalidating Descriptors Forwarding Requests Advertising and Unadvertising Services Advertising Services Unadvertising Services Example: Dynamic Advertising and Unadvertising of a Service Building Servers See Also Writing Request/Response Clients and Servers Overview of Request/Response Communication Sending Synchronous Messages Example: Using the Same Record for Request and Reply Messages Example: Sending a Synchronous Message with TPSIGRSTRT Set Example: Sending a Synchronous Message with TPNOTRAN Set Sending Asynchronous Messages Sending an Asynchronous Request Getting an Asynchronous Reply Setting and Getting Message Priorities Setting a Message Priority Getting a Message Priority Writing Conversational Clients and Servers Overview of Conversational Communication Joining an Application Establishing a Connection Sending and Receiving Messages Sending Messages Receiving Messages Ending a Conversation Example: Ending a Simple Conversation Example: Ending a Hierarchical Conversation Executing a Disorderly Disconnect Building Conversational Clients and Servers Understanding Conversational Communication Events Writing Event-based Clients and Servers Overview of Events Unsolicited Events Brokered Events Notification Actions EventBroker Servers System-defined Events Programming Interface for the EventBroker Defining the Unsolicited Message Handler Sending Unsolicited Messages Broadcasting Messages by Name Broadcasting Messages by Identifier Checking for Unsolicited Messages Getting Unsolicited Messages Subscribing to Events Unsubscribing from Events Posting Events Writing Global Transactions What Is a Global Transaction? Starting the Transaction Terminating the Transaction Committing the Current Transaction Prerequisites for a Transaction Commit Two-phase Commit Protocol Aborting the Current Transaction Example: Committing a Transaction in Conversational Mode Example: Testing for Participant Errors Implicitly Defining a Global Transaction Defining Global Transactions for an XA-Compliant Server Group Testing Whether a Transaction Has Started See Also Programming a Multithreaded and Multicontexted ATMI Application Support for Programming a Multithreaded/Multicontexted ATMI Application Platform-specific Considerations for Multithreaded/Multicontexted Applications Planning and Designing a Multithreaded/Multicontexted ATMI Application What Are Multithreading and Multicontexting? What Is Multithreading? What Is Multicontexting? Licensing a Multithreaded or Multicontexted Application Advantages and Disadvantages of a Multithreaded/Multicontexted ATMI Application Advantages of a Multithreaded/Multicontexted ATMI Application Disadvantages of a Multithreaded/Multicontexted ATMI Application How Multithreading and Multicontexting Work in a Client Start-up Phase Client Threads Join Multiple Contexts Client Threads Switch to an Existing Context Work Phase Service Requests Replies to Service Requests Transactions Unsolicited Messages Userlog Maintains Thread-specific Information Completion Phase How Multithreading and Multicontexting Work in an ATMI Server Start-up Phase Work Phase Server-dispatched Threads Are Used Application-created Threads Are Used Bulletin Board Liaison Verifies Sanity of System Processes System Keeps Statistics on Server Threads Userlog Maintains Thread-specific Information Completion Phase Design Considerations for a Multithreaded and Multicontexted ATMI Application Environment Requirements Design Requirements Is the Task of Your Application Suitable for Multithreading and/or Multicontexting? How Many Applications and Connections Do You Want? What Synchronization Issues Need to Be Addressed? Will You Need to Port Your Application? Which Threads Model Is Best for You? Interoperability Restrictions for Workstation Clients Implementing a Multithreaded/ Multicontexted ATMI Application Preliminary Guidelines for Programming a Multithreaded/Multicontexted ATMI Application Prerequisites for a Multithreaded ATMI Application General Multithreaded Programming Considerations Concurrency Considerations Writing Code to Enable Multicontexting in an ATMI Client Context Attributes Setting Up Multicontexting at Initialization Implementing Security for a Multicontexted ATMI Client Synchronizing Threads Before an ATMI Client Termination Switching Contexts Handling Unsolicited Messages Coding Rules for Transactions in a Multithreaded/Multicontexted ATMI Application Writing Code to Enable Multicontexting and Multithreading in an ATMI Server Context Attributes Coding Rules for a Multicontexted ATMI Server Initializing and Terminating ATMI Servers and Server Threads Programming an ATMI Server to Create Threads Creating Threads Associating Threads with a Context Sample Code for Creating an Application Thread in a Multicontexted ATMI Server Writing a Multithreaded ATMI Client Coding Rules for a Multithreaded ATMI Client Initializing an ATMI Client to Multiple Contexts Context State Changes for an ATMI Client Thread Getting Replies in a Multithreaded Environment Using Environment Variables in a Multithreaded and/or Multicontexted Environment Using Per-context Functions and Data Structures in a Multithreaded ATMI Client Using Per-process Functions and Data Structures in a Multithreaded ATMI Client Using Per-thread Functions and Data Structures in a Multithreaded ATMI Client Sample Code for a Multithreaded ATMI Client Writing a Multithreaded ATMI Server Compiling Code for a Multithreaded/Multicontexted ATMI Application Testing a Multithreaded/Multicontexted ATMI Application Testing Recommendations for a Multithreaded/Multicontexted ATMI Application Troubleshooting a Multithreaded/Multicontexted ATMI Application Improper Use of the TPMULTICONTEXTS Flag to tpinit( ) Calls to tpinit( ) Without TPMULTICONTEXTS Insufficient Thread Stack Size Error Handling for a Multithreaded/Multicontexted ATMI Application Managing Errors System Errors Abort Errors Oracle Tuxedo System Errors Communication Handle Errors Limit Errors Invalid Descriptor Errors Conversational Errors Duplicate Object Error General Communication Call Errors TPESVCFAIL and TPESVCERR Errors TPEBLOCK and TPGOTSIG Errors Invalid Argument Errors No Entry Errors Operating System Errors Permission Errors Protocol Errors Queuing Error Release Compatibility Error Resource Manager Errors Timeout Errors Transaction Errors Typed Record Errors Application Errors Handling Errors Transaction Considerations Communication Etiquette Transaction Errors Non-fatal Transaction Errors Fatal Transaction Errors Heuristic Decision Errors Transaction Timeouts TPCOMMIT Call TPNOTRAN TPRETURN and TPFORWAR Calls tpterm( ) Function Resource Managers Sample Transaction Scenarios Called Service in Same Transaction as Caller Called Service in Different Transaction with AUTOTRAN Set Called Service That Starts a New Explicit Transaction Oracle TUXEDO System-supplied Subroutines Central Event Log Log Name Log Entry Format Writing to the Event Log COBOL Language Bindings for the Workstation Component UNIX Bindings Writing Client Programs Building Client Programs Setting Environment Variables Microsoft Windows Bindings Writing Client Programs Building Client Programs Building ACCEPT/DISPLAY Clients
Copyright © 1994, 2017, Oracle and/or its affiliates. All rights reserved.