@ Override public void meTerminated ( SICoreConnection conn ) { if ( TraceComponent . isAnyTracingEnabled ( ) && tc . isEntryEnabled ( ) ) SibTr . entry ( tc , "meTerminated" ) ; //Remember the fact that the ME has terminated so we don't issue spurious FFDCs final Conversation conversation = conversationTable . get ( conn ) ; //If conversation is null we do nothing. if ( conversation != null ) { final ConversationState convState = ( ConversationState ) conversation . getAttachment ( ) ; convState . setMETerminated ( ) ; } // Right, so the ME that the core connection is connected to // is dead. First of all get the ME Uuid that the connection // refers to String meUuid = conn . getMeUuid ( ) ; if ( TraceComponent . isAnyTracingEnabled ( ) && tc . isDebugEnabled ( ) ) SibTr . debug ( tc , "ME Uuid: " , meUuid ) ; // Have we already sent a notification about this ME terminating // to the client? if ( termNotif . get ( meUuid ) == null ) { // No we have not. So, get the Conversation and send the client // the message about this ME. It will be up to the client to fan // out this message to other clients connected to this ME. if ( TraceComponent . isAnyTracingEnabled ( ) && tc . isDebugEnabled ( ) ) SibTr . debug ( tc , "We have not sent a notification about this ME" ) ; try { sendMeNotificationEvent ( CommsConstants . EVENTID_ME_TERMINATED , conn , null , null ) ; // and save that we have sent a response concerning this ME // Note, just using a Hashtable for fast searching. termNotif . put ( meUuid , new Object ( ) ) ; } catch ( SIException e ) { FFDCFilter . processException ( e , CLASS_NAME + ".meTerminated" , CommsConstants . SERVERSICORECONNECTIONLISTENER_MET_01 , this ) ; if ( TraceComponent . isAnyTracingEnabled ( ) && tc . isDebugEnabled ( ) ) SibTr . debug ( tc , e . getMessage ( ) , e ) ; SibTr . error ( tc , "COMMUNICATION_ERROR_SICO2018" , e ) ; } } else { // Yes we have - so do not do anything more if ( TraceComponent . isAnyTracingEnabled ( ) && tc . isDebugEnabled ( ) ) SibTr . debug ( tc , "Already sent notification about this ME" ) ; } if ( TraceComponent . isAnyTracingEnabled ( ) && tc . isEntryEnabled ( ) ) SibTr . exit ( tc , "meTerminated" ) ; }
This method is called when the ME terminates .