public void distributeBefore ( ) { if ( tc . isEntryEnabled ( ) ) Tr . entry ( tc , "distributeBefore" , this ) ; boolean setRollback = false ; try { coreDistributeBefore ( ) ; } catch ( Throwable exc ) { // No FFDC Code Needed. Tr . error ( tc , "WTRN0074_SYNCHRONIZATION_EXCEPTION" , new Object [ ] { "before_completion" , exc } ) ; // PK19059 starts here _tran . setOriginalException ( exc ) ; // PK19059 ends here setRollback = true ; } // Finally issue the RRS syncs - z/OS always issues these even if RBO has occurred // during previous syncs. Need to check with Matt if we need to do these even if the // overall transaction is set to RBO as we bypass distributeBefore in this case. final List RRSsyncs = _syncs [ SYNC_TIER_RRS ] ; if ( RRSsyncs != null ) { for ( int j = 0 ; j < RRSsyncs . size ( ) ; j ++ ) // d162354 array could grow { final Synchronization sync = ( Synchronization ) RRSsyncs . get ( j ) ; if ( tc . isEventEnabled ( ) ) Tr . event ( tc , "driving RRS before sync[" + j + "]" , Util . identity ( sync ) ) ; try { sync . beforeCompletion ( ) ; } catch ( Throwable exc ) { // No FFDC Code Needed. Tr . error ( tc , "WTRN0074_SYNCHRONIZATION_EXCEPTION" , new Object [ ] { "before_completion" , exc } ) ; setRollback = true ; } } // If RRS syncs, one may be DB2 type 2, so issue thread switch // NativeJDBCDriverHelper.threadSwitch(); /* @367977A*/ } //---------------------------------------------------------- // If we've encountered an error, try to set rollback only //---------------------------------------------------------- if ( setRollback && _tran != null ) { try { _tran . setRollbackOnly ( ) ; } catch ( Exception ex ) { if ( tc . isDebugEnabled ( ) ) Tr . debug ( tc , "setRollbackOnly raised exception" , ex ) ; } } if ( tc . isEntryEnabled ( ) ) Tr . exit ( tc , "distributeBefore" ) ; }
Distributes before completion operations to all registered Synchronization objects . If a synchronization raises an exception mark transaction for rollback .