ROLB
The advantage of using ROLB
is that IMS returns control to the program after executing ROLB
, so the program can
continue processing.
ROL
are: - The call function
ROLB
- The name of the I/O PCB or AIB
ROLB
call depends on the type of IMS application that issued it. - For current IMS application programs:
After IMS backout is complete, the original transaction is represented to the IMS application program. Any resources that cannot be rolled back by IMS are ignored. For example, output sent to an express alternate PCB and a
PURG
call is issued before theROLB
. - For modified IMS application programs:
The same consideration for the current IMS application programs applies. It is the responsibility of the application program to notify any spawned conversations that a
ROLB
was issued. - For CPI-C driven IMS application programs:
Only IMS resources are affected. All database changes are backed out. Any messages inserted to nonexpress alternate PCBs are discarded. Also, any messages inserted to express PCBs that have not had a
PURGE
call are discarded. It is the responsibility of the application program to notify the originating remote program and any spawned conversations that aROLB
call was issued.
In MPPs and transaction-oriented BMPs
If the program supplies the address of an I/O area as one of the ROLB
parameters, the ROLB
call acts as a message retrieval call and returns the first
segment of the first input message since the most recent commit point. This is true only if the
program has issued a GU
call to the message queue since the last commit point; it
if has not, it was not processing a message when it issued the ROLB
call.
If the program issues a GN
to the message queue after issuing the
ROLB
, IMS returns the next segment of the
message that was being processed when ROLB
was issued. If there are no more
segments for that message, IMS returns a QD status code.
If the program issues a GU
to the message queue after the ROLB
call, IMS returns the first segment of the next message to the
application program. If there are no more messages on the message queue for the program to process,
IMS returns a QC status code to the program.
If you include the I/O area parameter, but you have not issued a successful GU
call to the message queue since the last commit point, IMS
returns a QE status code to your program.
If you do not include the address of an I/O area in the ROLB
call, IMS does the same things for you. If the program has issued a
successful GU
in the commit travel, and then issues a GN
, IMS returns a QD status code. If the program issues a
GU
after the ROLB
, IMS
returns the first segment of the next message, or a QC status code if there are no more messages for
the program.
If you have not issued a successful GU
since the last commit point, and you do
not include an I/O area parameter on the ROLB
call, IMS backs out the database updates and cancels the output messages created since the last
commit point.
In batch programs
If your system log is on direct access storage, and if dynamic backout has been specified through
the use of the BKO execution parameter, you can use the ROLB
call in a batch
program. The ROLB
call does not process messages as it does for message processing
programs (MPPs); it backs out the database updates since the last commit point and returns control
to your program. You cannot specify the address of an I/O area as one of the parameters on the call;
if you do, an AD status code is returned to your program. You must, however, have an I/O PCB for
your program. Specify CMPAT=YES on the CMPAT keyword in the PSBGEN statement for your program’s
PSB.
Related Reading: For more information on using the CMPAT keyword, see IMS Version 15.4 System Utilities. For information on coding the
ROLB
call, see the topic "ROLB Call" in IMS Version 15.4 Application Programming APIs.