Table of Contents Previous Next


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.