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 Managing Typed Buffers Overview of Typed Buffers Allocating a Typed Buffer Putting Data in a Buffer Resizing a Typed Buffer Checking for Buffer Type Freeing a Typed Buffer Using a VIEW Typed Buffer Setting Environment Variables for a VIEW Typed Buffer Creating a View Description File Executing the VIEW Compiler Using an FML Typed Buffer Setting Environment Variables for an FML Typed Buffer Creating a Field Table File Creating an FML Header File Using an XML Typed Buffer and the Apache Xerces C++ Parser About the XML Typed Buffer About the Apache Xerces C++ Parser XML Parser Control XML Parser Support for ICU XML Parser Sample Application Xerces Schema Sample Converting XML Data To and From FML/FML32 Buffers Using On-Demand Conversion Using Automatic Conversion Mapping XML To and From FML/FML32 Field Types Conversion Limitations Using an MBSTRING Typed Buffer Multibyte Character Encoding Control Enabling MBSTRING to be Self-describing Implementation Safe/Unsafe Encoding Names Multibyte Character Support Limitations Multibyte Character Encoding Support for libiconv Customizing a Buffer Defining Your Own Buffer Types Coding Switch Element Routines Adding a New Buffer Type to tm_typesw Compiling and Linking Your New tm_typesw Compiling and Linking Your New tm_typesw for a 16-bit Windows Platform Data Conversion Programming Environment Updating the UBBCONFIG Configuration File Setting Environment Variables Including the Required Header Files Starting and Stopping the Application Writing Clients Joining an Application Using Features of the TPINIT Typed Buffer 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 main( ) System-Supplied Server and Services System-Supplied Server: AUTHSVR( ) System-Supplied Services: tpsvrinit( ) Function Receiving Command-line Options Opening a Resource Manager System-Supplied Services: tpsvrdone( ) Function Guidelines for Writing Servers Defining a Service Example: Checking the Buffer Type Example: Checking the Priority of the Service Request 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 Using a C++ Compiler Declaring Service Functions Using Constructors and Destructors Writing Request/Response Clients and Servers Overview of Request/Response Communication Sending Synchronous Messages Example: Using the Same Buffer for Request and Reply Messages Example: Testing for Change in Size of Reply Buffer Example: Sending a Synchronous Message with TPSIGRSTRT Set Example: Sending a Synchronous Message with TPNOTRAN Set Example: Sending a Synchronous Message with TPNOCHANGE Set Sending Asynchronous Messages Sending an Asynchronous Request Example: Sending an Asynchronous Message with TPNOTRAN | TPNOREPLY Example: Sending Asynchronous Requests 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 Subscribing to Events Notification via Unsolicited Message Notification via Service Call or Reliable Queue Unsubscribing from Events Posting Events Example of Event Subscription Writing Global Transactions What Is a Global Transaction? Starting the Transaction Suspending and Resuming a Transaction Suspending a Transaction Resuming a Transaction Example: Suspending and Resuming a 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 Implicitly Defining a Transaction in a Service Routine 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? Auditing 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 Work Phase Completion Phase How Multithreading and Multicontexting Work in Server-Dispatched Threads an on ATMI Server Start-up Phase Work Phase Completion Phase How Multithreading and Multicontexting Work in Application-Created Threads of an ATMI Server Start-Up Phase Work Phase Completion Phase See Also Design Considerations for a Multithreaded and Multicontexted ATMI Application Environment Requirements Design Requirements 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 Server-Dispatched Multicontexting and Multithreading Threads in an ATMI Server Context Attributes Coding Rules for Server-Dispatched Threads in Multicontexted ATMI Server Initializing and Terminating ATMI Servers and Server Threads See Also Writing Code to Enable Multicontexting in Application-Created Threads of an ATMI Server Creating Threads Associating Application Threads with a Context Associating Application Threads with an Existing Server-Dispatched Context Sample Code for Associating Application Thread with an Existing Server-Dispatched Context in a Multicontexted Server Associating Application Threads with Application-Created Context Sample Code for Associating Application Thread with Application-created server Context in a Multicontexted 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 Call Descriptor 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 MIB Error No Entry Errors Operating System Errors Permission Errors Protocol Errors Queuing Error Release Compatibility Error Resource Manager Errors Timeout Errors Transaction Errors Typed Buffer Errors Application Errors Handling Errors Transaction Considerations Communication Etiquette Transaction Errors Non-fatal Transaction Errors Fatal Transaction Errors Heuristic Decision Errors Transaction Timeouts Effect on the tpcommit() Function Effect on the TPNOTRAN Flag tpreturn( ) and tpforward( ) Functions 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 Debugging Application Processes Debugging Application Processes on UNIX Platforms Debugging Application Processes on Windows 2003 Platforms Comprehensive Example
Copyright © 1994, 2017, Oracle and/or its affiliates. All rights reserved.