Application design
Application design
Pseudoconversational and conversational design
Terminal interruptibility
How tasks are started
Which transaction?
Separating business and presentation logic
Multithreading: Reentrant, quasi-reentrant and threadsafe programs
Quasi-reentrant application programs
Threadsafe programs
Threadsafe considerations for statically or dynamically called routines
OPENAPI programs
Obligations of OPENAPI programs
Using the FORCEQR system initialization parameter
Non-reentrant programs
Storing data within a transaction
Transaction work area (TWA)
User storage
COMMAREA in LINK and XCTL commands
Channels in LINK and XCTL commands
Program storage
Temporary storage
Intrapartition transient data
GETMAIN SHARED command
Your own data sets
Lengths of areas passed to CICS commands
LENGTH options
Journal records
Data set definitions
Recommendation
Minimizing errors
Protecting CICS from application errors
Testing applications
Non-terminal transaction security
Design for performance
Program size
Virtual storage
Reducing paging effects
Locality of reference
Working set
Reference set
Exclusive control of resources
Operational control
Operating system waits
The NOSUSPEND option
Efficient data operations
Efficient database operations
Efficient data set operations
VSAM data sets
BDAM data sets
Efficient browsing (in non-RLS mode)
Efficient logging
Efficient sequential data set access
Efficient terminal operations
Length of the data stream sent to the terminal
Basic mapping support considerations
Avoid turning on modified data tags (MDTs) unnecessarily
Use FRSET to reduce inbound traffic
Do not send blank fields to the screen
Address CICS areas correctly
Use the MAPONLY option when possible
Send only changed fields to an existing screen
Design data entry operations to reduce line traffic
Compress data sent to the screen
Use nulls instead of blanks
Use methods that avoid the need for nulls or blanks
Page-building and routing operations
Sending multipage output
Sending messages to destinations other than the input terminal
Sending pages built from multiple maps
Using the BMS page-copy facility
Requests for printed output
Additional terminal control considerations
Use only one physical SEND command per screen
Use the CONVERSE command
Limit the use of message integrity options
Avoid using the DEFRESP option on SEND commands
Avoid using unnecessary transactions
Send unformatted data without maps
Sharing data across transactions
Using the common work area (CWA)
Protecting the CWA
Using the TCTTE user area (TCTUA)
Using the COMMAREA in RETURN commands
Using a channel on RETURN commands
Using the display screen to share data
Enhanced inter-program data transfer: channels as modern-day COMMAREAs
Channels: quick start
Containers and channels
Basic examples
Using channels: some typical scenarios
One channel, one program
One channel, several programs (a component)
Several channels, one component
Multiple interactive components
Creating a channel
The current channel
Current channel example, with LINK commands
Current channel example, with XCTL commands
Current channel: START and RETURN commands
The scope of a channel
Scope example, with LINK commands
Scope example, with LINK and XCTL commands
Discovering which containers a program's been passed
Discovering which containers were returned from a link
CICS read only containers
Designing a channel: best practices
Constructing and using a channel: an example
Channels and BTS activities
Context
Using channels from JCICS
Dynamic routing with channels
Data conversion
Why is data conversion needed?
Preparing for code page conversion with channels
Data conversion with channels
How to cause CICS to convert character data automatically
Using containers to do code page conversion
A SOAP example
Benefits of channels
Migrating from COMMAREAs to channels
Migration of existing functions
Migration to the new function
Migrating LINK commands that pass COMMAREAs
Migrating XCTL commands that pass COMMAREAs
Migrating pseudoconversational COMMAREAs on RETURN commands
Migrating START data
Migrating programs that use temporary storage to pass data
Migrating dynamically-routed applications
Affinity
Types of affinity
Inter-transaction affinity
Transaction-system affinity
Using INQUIRE and SET commands and global user exits
Programming techniques and affinity
Safe techniques
Unsafe techniques
Suspect techniques
Recommendations
Safe programming to avoid affinity
The COMMAREA
The TCTUA
Using the TCTUA in an unsafe way
Using ENQ and DEQ commands with ENQMODEL resource definitions
Overview of sysplex enqueue and dequeue
Benefits
BTS containers
Unsafe programming for affinity
Using the common work area
Using GETMAIN SHARED storage
Using the LOAD PROGRAM HOLD command
Sharing task-lifetime storage
Using the WAIT EVENT command
Using ENQ and DEQ commands without ENQMODEL resource definitions
Suspect programming for affinity
Using temporary storage
Naming conventions for remote queues
Exception conditions for globally accessible queues
Using transient data
Exception conditions for globally accessible queues
Using the RETRIEVE WAIT and START commands
Using the START and CANCEL REQID commands
Using the DELAY and CANCEL REQID commands
Using the POST and CANCEL REQID commands
Detecting inter-transaction affinities
Inter-transaction affinities caused by application generators
Duration and scope of inter-transaction affinities
Affinity transaction groups
Relations and lifetimes
The global relation
The LUname (terminal) relation
The userid relation
The BAPPL relation
Recovery design
Journaling
Journal records
Journal output synchronization
Syncpointing
Dealing with exception conditions
Default CICS exception handling
Handling exception conditions by in-line code
How to use the RESP and RESP2 options
Use of RESP and DFHRESP in COBOL and PL/I
Use of RESP and DFHRESP in C and C++
Use of DFHRESP in assembler
An example of exception handling in C
An example of exception handling in COBOL
Modifying default CICS exception handling
Using the HANDLE CONDITION command
RESP and NOHANDLE options
How CICS keeps track of what to do
Using the HANDLE CONDITION ERROR command
Using the IGNORE CONDITION command
Using the HANDLE ABEND command
Using PUSH HANDLE and POP HANDLE commands
Abnormal termination recovery
Creating a program-level abend exit
Retrying operations
Trace
Trace entry points
System trace entry points
User trace entry points
Exception trace entry points
User exception trace entry points
Monitoring
Dump
The QUERY SECURITY command
Using the QUERY SECURITY command
Security protection at the record or field level
CICS-defined resource identifiers
SEC system initialization parameter
Programming hints
[[
Contents
Previous Page
|
Next Page
Index
]]