@Override public <T> T getService(String serviceName) { final ServiceInfo serviceInfo = getServiceInfo(serviceName); return serviceInfo != null ? (T) serviceInfo.getService() : null; }
@Override public <S> List<S> getServices(Class<S> serviceClass) { final LinkedList<S> result = new LinkedList<S>(); for (ServiceInfo serviceInfo : services.values()) { if (serviceInfo.isInstanceOf(serviceClass)) { final S service = (S) serviceInfo.getService(); if (serviceInfo.isCoreService()) { result.addFirst(service); } else { result.addLast(service); } } } return result; }
/** * Returns a list of services matching provided service class/interface. * <p> * <b>CoreServices will be placed at the beginning of the list.</b> */ @Override public List<ServiceInfo> getServiceInfos(Class serviceClass) { final LinkedList<ServiceInfo> result = new LinkedList<ServiceInfo>(); for (ServiceInfo serviceInfo : services.values()) { if (serviceInfo.isInstanceOf(serviceClass)) { if (serviceInfo.isCoreService()) { result.addFirst(serviceInfo); } else { result.addLast(serviceInfo); } } } return result; } }
public synchronized void registerService(String serviceName, Object service) { if (logger.isFinestEnabled()) { logger.finest("Registering service: '" + serviceName + "'"); } final ServiceInfo serviceInfo = new ServiceInfo(serviceName, service); final ServiceInfo currentServiceInfo = services.putIfAbsent(serviceName, serviceInfo); if (currentServiceInfo != null) { logger.warning("Replacing " + currentServiceInfo + " with " + serviceInfo); if (currentServiceInfo.isCoreService()) { throw new HazelcastException("Can not replace a CoreService! Name: " + serviceName + ", Service: " + currentServiceInfo.getService()); } if (currentServiceInfo.isManagedService()) { shutdownService((ManagedService) currentServiceInfo.getService(), false); } services.put(serviceName, serviceInfo); } }
private void readServiceDescriptors() { Node node = nodeEngine.getNode(); try { ClassLoader classLoader = node.getConfigClassLoader(); Iterator<Class<RemoteServiceDescriptorProvider>> iterator = ServiceLoader.classIterator(RemoteServiceDescriptorProvider.class, PROVIDER_ID, classLoader); while (iterator.hasNext()) { Class<RemoteServiceDescriptorProvider> clazz = iterator.next(); Constructor<RemoteServiceDescriptorProvider> constructor = clazz.getDeclaredConstructor(); RemoteServiceDescriptorProvider provider = constructor.newInstance(); RemoteServiceDescriptor[] services = provider.createRemoteServiceDescriptors(); for (RemoteServiceDescriptor serviceDescriptor : services) { registerService(serviceDescriptor.getServiceName(), serviceDescriptor.getService(nodeEngine)); } } } catch (Exception e) { throw rethrow(e); } }
ServiceNamespacesContext(NodeEngineImpl nodeEngine, PartitionReplicationEvent event) { Collection<ServiceInfo> services = nodeEngine.getServiceInfos(FragmentedMigrationAwareService.class); for (ServiceInfo serviceInfo : services) { FragmentedMigrationAwareService service = serviceInfo.getService(); Collection<ServiceNamespace> namespaces = service.getAllServiceNamespaces(event); if (namespaces != null) { String serviceName = serviceInfo.getName(); allNamespaces.addAll(namespaces); addNamespaceToServiceMappings(namespaces, serviceName); } } allNamespaces.add(NonFragmentedServiceNamespace.INSTANCE); namespaceIterator = allNamespaces.iterator(); }
@Override public void onClusterStateChange(ClusterState newState, boolean isTransient) { ServiceManager serviceManager = node.getNodeEngine().getServiceManager(); List<ClusterStateListener> listeners = serviceManager.getServices(ClusterStateListener.class); for (ClusterStateListener listener : listeners) { listener.onClusterStateChange(newState); } }
public synchronized void registerService(String serviceName, Object service) { if (logger.isFinestEnabled()) { logger.finest("Registering service: '" + serviceName + "'"); } final ServiceInfo serviceInfo = new ServiceInfo(serviceName, service); final ServiceInfo currentServiceInfo = services.putIfAbsent(serviceName, serviceInfo); if (currentServiceInfo != null) { logger.warning("Replacing " + currentServiceInfo + " with " + serviceInfo); if (currentServiceInfo.isCoreService()) { throw new HazelcastException("Can not replace a CoreService! Name: " + serviceName + ", Service: " + currentServiceInfo.getService()); } if (currentServiceInfo.isManagedService()) { shutdownService((ManagedService) currentServiceInfo.getService(), false); } services.put(serviceName, serviceInfo); } }
private void readServiceDescriptors() { Node node = nodeEngine.getNode(); try { ClassLoader classLoader = node.getConfigClassLoader(); Iterator<Class<RemoteServiceDescriptorProvider>> iterator = ServiceLoader.classIterator(RemoteServiceDescriptorProvider.class, PROVIDER_ID, classLoader); while (iterator.hasNext()) { Class<RemoteServiceDescriptorProvider> clazz = iterator.next(); Constructor<RemoteServiceDescriptorProvider> constructor = clazz.getDeclaredConstructor(); RemoteServiceDescriptorProvider provider = constructor.newInstance(); RemoteServiceDescriptor[] services = provider.createRemoteServiceDescriptors(); for (RemoteServiceDescriptor serviceDescriptor : services) { registerService(serviceDescriptor.getServiceName(), serviceDescriptor.getService(nodeEngine)); } } } catch (Exception e) { throw rethrow(e); } }
ServiceNamespacesContext(NodeEngineImpl nodeEngine, PartitionReplicationEvent event) { Collection<ServiceInfo> services = nodeEngine.getServiceInfos(FragmentedMigrationAwareService.class); for (ServiceInfo serviceInfo : services) { FragmentedMigrationAwareService service = serviceInfo.getService(); Collection<ServiceNamespace> namespaces = service.getAllServiceNamespaces(event); if (namespaces != null) { String serviceName = serviceInfo.getName(); allNamespaces.addAll(namespaces); addNamespaceToServiceMappings(namespaces, serviceName); } } allNamespaces.add(NonFragmentedServiceNamespace.INSTANCE); namespaceIterator = allNamespaces.iterator(); }
@Override public <S> List<S> getServices(Class<S> serviceClass) { final LinkedList<S> result = new LinkedList<S>(); for (ServiceInfo serviceInfo : services.values()) { if (serviceInfo.isInstanceOf(serviceClass)) { final S service = (S) serviceInfo.getService(); if (serviceInfo.isCoreService()) { result.addFirst(service); } else { result.addLast(service); } } } return result; }
@Override public <T> T getService(String serviceName) { final ServiceInfo serviceInfo = getServiceInfo(serviceName); return serviceInfo != null ? (T) serviceInfo.getService() : null; }
/** * Returns a list of services matching provided service class/interface. * <p> * <b>CoreServices will be placed at the beginning of the list.</b> */ @Override public List<ServiceInfo> getServiceInfos(Class serviceClass) { final LinkedList<ServiceInfo> result = new LinkedList<ServiceInfo>(); for (ServiceInfo serviceInfo : services.values()) { if (serviceInfo.isInstanceOf(serviceClass)) { if (serviceInfo.isCoreService()) { result.addFirst(serviceInfo); } else { result.addLast(serviceInfo); } } } return result; } }
@Override public void onClusterStateChange(ClusterState newState, boolean isTransient) { ServiceManager serviceManager = node.getNodeEngine().getServiceManager(); List<ClusterStateListener> listeners = serviceManager.getServices(ClusterStateListener.class); for (ClusterStateListener listener : listeners) { listener.onClusterStateChange(newState); } }
final Collection<Operation> createFragmentReplicationOperations(PartitionReplicationEvent event, ServiceNamespace ns) { assert !(ns instanceof NonFragmentedServiceNamespace) : ns + " should be used only for non-fragmented services!"; Collection<Operation> operations = emptySet(); NodeEngineImpl nodeEngine = (NodeEngineImpl) getNodeEngine(); Collection<ServiceInfo> services = nodeEngine.getServiceInfos(FragmentedMigrationAwareService.class); for (ServiceInfo serviceInfo : services) { FragmentedMigrationAwareService service = serviceInfo.getService(); if (!service.isKnownServiceNamespace(ns)) { continue; } operations = prepareAndAppendReplicationOperation(event, ns, service, serviceInfo.getName(), operations); } return operations; }
@Override public void onClusterVersionChange(Version newVersion) { if (!node.getVersion().asVersion().isEqualTo(newVersion)) { systemLogger.info("Cluster version set to " + newVersion); } ServiceManager serviceManager = node.getNodeEngine().getServiceManager(); List<ClusterVersionListener> listeners = serviceManager.getServices(ClusterVersionListener.class); for (ClusterVersionListener listener : listeners) { listener.onClusterVersionChange(newVersion); } // also trigger cluster version change on explicitly registered listeners for (ClusterVersionListener listener : clusterVersionListeners) { listener.onClusterVersionChange(newVersion); } }
final Collection<Operation> createFragmentReplicationOperations(PartitionReplicationEvent event, ServiceNamespace ns) { assert !(ns instanceof NonFragmentedServiceNamespace) : ns + " should be used only for non-fragmented services!"; Collection<Operation> operations = emptySet(); NodeEngineImpl nodeEngine = (NodeEngineImpl) getNodeEngine(); Collection<ServiceInfo> services = nodeEngine.getServiceInfos(FragmentedMigrationAwareService.class); for (ServiceInfo serviceInfo : services) { FragmentedMigrationAwareService service = serviceInfo.getService(); if (!service.isKnownServiceNamespace(ns)) { continue; } operations = prepareAndAppendReplicationOperation(event, ns, service, serviceInfo.getName(), operations); } return operations; }
@Override public void onClusterVersionChange(Version newVersion) { if (!node.getVersion().asVersion().isEqualTo(newVersion)) { systemLogger.info("Cluster version set to " + newVersion); } ServiceManager serviceManager = node.getNodeEngine().getServiceManager(); List<ClusterVersionListener> listeners = serviceManager.getServices(ClusterVersionListener.class); for (ClusterVersionListener listener : listeners) { listener.onClusterVersionChange(newVersion); } // also trigger cluster version change on explicitly registered listeners for (ClusterVersionListener listener : clusterVersionListeners) { listener.onClusterVersionChange(newVersion); } }
private Collection<Operation> createReplicationOperations(PartitionReplicationEvent event, boolean nonFragmentedOnly) { Collection<Operation> operations = new ArrayList<Operation>(); NodeEngineImpl nodeEngine = (NodeEngineImpl) getNodeEngine(); Collection<ServiceInfo> services = nodeEngine.getServiceInfos(MigrationAwareService.class); for (ServiceInfo serviceInfo : services) { MigrationAwareService service = serviceInfo.getService(); if (nonFragmentedOnly && service instanceof FragmentedMigrationAwareService) { // skip fragmented services continue; } Operation op = service.prepareReplicationOperation(event); if (op != null) { op.setServiceName(serviceInfo.getName()); operations.add(op); } } return operations; }
@Override public void run0() { heartbeatPacketsReceived.inc(); long nowMillis = Clock.currentTimeMillis(); updateMemberHeartbeat(nowMillis); final OperationControl opControl = serializationService.toObject(payload); for (long callId : opControl.runningOperations()) { updateHeartbeat(callId, nowMillis); } for (CanCancelOperations service : serviceManager.getServices(CanCancelOperations.class)) { final long[] opsToCancel = opControl.operationsToCancel(); for (int i = 0; i < opsToCancel.length; i++) { if (opsToCancel[i] != -1 && service.cancelOperation(sender, opsToCancel[i])) { opsToCancel[i] = -1; } } } }