void listenMembershipEvents(Address ownerConnectionAddress) { initialListFetchedLatch = new CountDownLatch(1); try { ClientMessage clientMessage = ClientAddMembershipListenerCodec.encodeRequest(false); Connection connection = connectionManager.getConnection(ownerConnectionAddress); if (connection == null) { throw new IllegalStateException( "Can not load initial members list because owner connection is null. Address " + ownerConnectionAddress); } ClientInvocation invocation = new ClientInvocation(client, clientMessage, connection); invocation.setEventHandler(this); invocation.invoke().get(); waitInitialMemberListFetched(); } catch (Exception e) { if (client.getLifecycleService().isRunning()) { if (LOGGER.isFinestEnabled()) { LOGGER.warning( "Error while registering to cluster events! -> " + ownerConnectionAddress, e); } else { LOGGER.warning( "Error while registering to cluster events! -> " + ownerConnectionAddress + ", Error: " + e.toString()); } } } }
private void invoke(ClientRegistrationKey registrationKey, Address address) throws Exception { ListenerMessageCodec codec = registrationKey.getCodec(); ClientMessage request = codec.encodeAddRequest(true); EventHandler handler = registrationKey.getHandler(); handler.beforeListenerRegister(); ClientInvocation invocation = new ClientInvocation(client, request, address); invocation.setEventHandler(handler); String serverRegistrationId = codec.decodeAddResponse(invocation.invoke().get()); handler.onListenerRegister(); int correlationId = request.getCorrelationId(); ClientEventRegistration registration = new ClientEventRegistration(serverRegistrationId, correlationId, address, codec); Map<Address, ClientEventRegistration> registrationMap = registrations.get(registrationKey); registrationMap.put(address, registration); }