| DefaultRemoteObservationManager closes the JGroups channels as soon as ApplicationStoppedEvent is fired, before the component manager disposes anything. Every remote event produced during the rest of the shutdown (cache invalidations, job events) is lost for the other nodes. Proposal: close the channels in JGroupsNetworkAdapter.dispose() with a dispose priority after the default components but before the stores, and drop incoming remote events while stopping. Also give the mail sender threads' join() a timeout so a stuck SMTP send cannot block the shutdown. |