static void rcvCreateUCTransaction ( CommsByteBuffer request , Conversation conversation , int requestNumber , boolean allocatedFromBufferPool , boolean partOfExchange ) { if ( TraceComponent . isAnyTracingEnabled ( ) && tc . isEntryEnabled ( ) ) SibTr . entry ( tc , "rcvCreateUCTransaction" , new Object [ ] { request , conversation , "" + requestNumber , "" + allocatedFromBufferPool } ) ; ConversationState convState = ( ConversationState ) conversation . getAttachment ( ) ; short connectionObjectId = request . getShort ( ) ; // BIT16 ConnectionObjectId int clientTransactionId = request . getInt ( ) ; // BIT32 Client transaction Id // By default subordinates are allowed - however, a FAP version 5 client may specifically // request that a local transaction does not support them. // see the ConnectionProxy.createUncoordinateTransaction(boolean) method javadoc comment // for more details. boolean allowSubordinates = true ; if ( conversation . getHandshakeProperties ( ) . getFapLevel ( ) >= JFapChannelConstants . FAP_VERSION_5 ) { allowSubordinates = ( request . get ( ) & 0x01 ) == 0x01 ; } if ( TraceComponent . isAnyTracingEnabled ( ) && tc . isDebugEnabled ( ) ) { SibTr . debug ( tc , "SICoreConnection Id:" , connectionObjectId ) ; SibTr . debug ( tc , "Client transaction Id:" , clientTransactionId ) ; } CATConnection catConn = ( CATConnection ) convState . getObject ( connectionObjectId ) ; SICoreConnection connection = catConn . getSICoreConnection ( ) ; ServerLinkLevelState linkState = ( ServerLinkLevelState ) conversation . getLinkLevelAttachment ( ) ; SIUncoordinatedTransaction ucTran = null ; try { ucTran = connection . createUncoordinatedTransaction ( allowSubordinates ) ; } // Don't bother with all the different types seeing as we don't throw them back catch ( SIException e ) { //No FFDC code needed //Only FFDC if we haven't received a meTerminated event. if ( ! convState . hasMETerminated ( ) ) { FFDCFilter . processException ( e , CLASS_NAME + ".rcvCreateUCTransaction" , CommsConstants . STATICCATTRANSACTION_CREATE_01 ) ; } if ( TraceComponent . isAnyTracingEnabled ( ) && tc . isDebugEnabled ( ) ) SibTr . debug ( tc , "Failed to create the transaction" , e ) ; // We have to mark this transaction as error now - so as to indicate to everyone that // it should not be used linkState . getTransactionTable ( ) . addLocalTran ( clientTransactionId , conversation . getId ( ) , IdToTransactionTable . INVALID_TRANSACTION ) ; linkState . getTransactionTable ( ) . markAsRollbackOnly ( clientTransactionId , e ) ; } // If transaction creation succeeded then add it to the link level state table of // transactions. if ( ucTran != null ) { linkState . getTransactionTable ( ) . addLocalTran ( clientTransactionId , conversation . getId ( ) , ucTran ) ; } request . release ( allocatedFromBufferPool ) ; if ( TraceComponent . isAnyTracingEnabled ( ) && tc . isEntryEnabled ( ) ) SibTr . exit ( tc , "rcvCreateUCTransaction" ) ; }
Create an SIUncoordinatedTransaction .