My Oracle Support Banner

EAI TRANSACTION SERVICE NOT ROLLING BACK ON DB2 FOR V11.1 LUW WHEN IS ABORT = TRUE (Doc ID 2898123.1)

Last updated on SEPTEMBER 23, 2022

Applies to:

Siebel CRM - Version 22.2 and later
Information in this document applies to any platform.

Symptoms

A script that invokes Transaction Service to start a transaction , then updates a record and invokes Transaction Service to finish the transaction with "Is Abort" , "True" to roll back the transaction fails to roll back the changes.

In Oracle databases, it cancels the account record update .

Users querying for that account later on the same session do not see the record update.

In DB2 for V11.1 LUW databases the expected roll back does not happen.

The issue can be reproduced at will with the following steps:

1. create the following script as a business service (in tools or as a runtime business service)

// just an example of Transaction service + update + rollback.

function Service_PreInvokeMethod (MethodName, Inputs, Outputs)
{

var TransactionSvc = TheApplication().GetService("EAI Transaction Service");
var TrxIn = TheApplication().NewPropertySet();
var TrxOut = TheApplication().NewPropertySet();
TransactionSvc.InvokeMethod("BeginTransaction", TrxIn, TrxOut); // Begin Transaction

//make a change
var bo = TheApplication().GetBusObject("Account");
var bc = bo.GetBusComp("Account");
with(bc){
ClearToQuery();
SetViewMode(AllView);

ActivateField("Main Phone Number");

ActivateField("Account Type Code");

ActivateField("Type");

SetSearchSpec("Id", "88-31N8V7");
ExecuteQuery(ForwardOnly) ;

var soldphone = GetFieldValue("Main Phone Number");
var soldAccntType = GetFieldValue("Account Type Code");
var soldTypeb = GetFieldValue("Type");

SetFieldValue("Main Phone Number", "7777777777");
SetFieldValue("Type", "ODM");

WriteRecord();
}
TrxIn.SetProperty( "Is Abort" , "True" ) ;
TransactionSvc.InvokeMethod("EndTransaction", TrxIn, TrxOut) ; // End Transaction
bc.InvokeMethod("RefreshRecord")
bc = null;
bo = null;

TheApplication().RaiseErrorText(soldphone + soldAccntType + soldTypeb );

return (CancelOperation);
}

2. Create an account record in the user interface and write down its row id

3. update the code to reference the row id from #2.

4. Use BS simulator to run the code (it does not need any inputs as the row id is hard coded).

5. Query for the same account afterwards. Notice when connected to an Oracle Database, the record is unchanged but when connected to DB2 for V11.1 LUW the changes persist.
The changes should not have persisted.

Changes

 Applying any of the patches 21.6 through 22.5

Cause

To view full details, sign in with your My Oracle Support account.

Don't have a My Oracle Support account? Click to get started!


In this Document
Symptoms
Changes
Cause
Solution
References


My Oracle Support provides customers with access to over a million knowledge articles and a vibrant support community of peers and Oracle experts.