public void waitUntilUnlocked(long timeToWaitBeforeVerify) throws InterruptedException { if (isLocked()) { long n = timeToWaitBeforeVerify / 100; for (int i = 0; i < n && isLocked(); i++) { if (isStateEnabled(UNLOCKED_BY_SOURCE_SESSION)) { // source session remote connection has been removed if (sourceSession .getCommandManager() .getTransportManager() .getConnectionsToExternalServices() .isEmpty()) { // the following line unlocks, unless UNLOCKED_BY_SOURCE_SESSION state is disabled unlock(UNLOCKED_BY_SOURCE_SESSION); } } if (isLocked()) { Thread.sleep(100); } } if (isLocked()) { unlock(UNLOCKED_BY_TIMER); } else if (state == UNLOCKED_BY_TARGET_LISTENER) { Thread.sleep(100); } } }
/** * PUBLIC: Processes the received RCM messaged from a JMS provider for cache coordination. This * will use the local connection from the configured TransportManager from the session's * RemoteCommandManager. * * @param message * @param session */ public static void processJMSMessage(javax.jms.Message message, AbstractSession session) { RemoteCommandManager rcm = (RemoteCommandManager) session.getCommandManager(); if (rcm.isStopped()) { throw RemoteCommandManagerException.remoteCommandManagerIsClosed(); } JMSTopicRemoteConnection connection = (JMSTopicRemoteConnection) rcm.getTransportManager().getConnectionToLocalHost(); connection.onMessage(message); }