CICS deviates from the APPC architecture in a small number of detailed
respects.
CICS® allows
EXEC CICS commands to be issued on APPC conversations
when a backout (rollback) is required but the conversation is not in rollback
state (state 13).
When a session is being allocated, the back-end CICS system checks the
incoming bind request for valid combinations of CNOS (change number of sessions)
and parallel-sessions indicators. If CICS finds that parallel-sessions is
specified but CNOS is not, it sends a negative response to the bind request.
CICS allows a sync level-2 conversation to be terminated using the SEND
LAST WAIT or SEND LAST CONFIRM commands. However, doing this is a deviation
from the APPC architecture and should be avoided.
Figure 1 illustrates
the problems that can be caused by not syncpointing a sync level-2 conversation.
Figure 1. Losing data integrity on a sync level-2 conversation.
In this example, transaction AAAA in communicating with transaction
BBBB:
- Transaction AAAA issues a CONNECT PROCESS command, specifying SYNCLEVEL(2).
- Transaction AAAA issues a SEND command; the attach header and data is
transmitted, and transaction BBBB is started.
- Transaction BBBB issues a RECEIVE command.
- A serious error occurs in transaction BBBB.
- Transaction BBBB issues an ISSUE ABEND command. The transaction is suspended
pending the receipt of a change direction or end bracket from transaction
AAAA.
- Transaction AAAA issues a SEND LAST WAIT command, with no data. The end
bracket is transmitted to transaction BBBB.
- Transaction BBBB is resumed; the incoming end bracket puts the conversation
into free state.
From this point, the two transactions execute
independently.
- Transaction AAAA frees its conversation.
- Transaction AAAA ends; its changes are committed.
- Transaction BBBB issues a SYNCPOINT ROLLBACK command. Its changes are
backed out.
Because transaction AAAA ends the conversation using the SEND LAST WAIT
command, transaction BBBB cannot inform it that an error has occurred. The
ISSUE ABEND command causes the backout-required condition to be raised in
transaction BBBB; so a SYNCPOINT ROLLBACK is needed. Transaction AAAA commits
changes to its resources and data integrity is lost.
The resulting state errors may also lead to the session being unbound.