@Override public void addDataObserver(Observer<M> observer) { dataObserver.addObserver(observer); }
@Override public void removeDataObserver(Observer<M> observer) { dataObserver.removeObserver(observer); } }
serviceTempusServiceTypeObservableMap.get(serviceTempus).put(serviceDescription.getType(), new MessageObservable(this)); serviceTempusServiceTypeObservableMap.get(serviceTempus).remove(serviceType).shutdown();
@Override protected void notifyDataUpdate(final D data) throws CouldNotPerformException { super.notifyDataUpdate(data); for (final ServiceTempus serviceTempus : ServiceTempus.values()) { final Set<ServiceType> serviceTypeSet = new HashSet<>(); for (final ServiceDescription serviceDescription : getUnitTemplate().getServiceDescriptionList()) { // check if already handled if (!serviceTypeSet.contains(serviceDescription.getType())) { serviceTypeSet.add(serviceDescription.getType()); try { Object serviceData = Services.invokeServiceMethod(serviceDescription.getType(), ServicePattern.PROVIDER, serviceTempus, data); serviceTempusServiceTypeObservableMap.get(serviceTempus).get(serviceDescription.getType()).notifyObservers(serviceData); } catch (CouldNotPerformException ex) { logger.debug("Could not notify state update for service[" + serviceDescription.getType() + "] because this service is not supported by this controller.", ex); } } } } }
/** * Create a communication service. * * @param builder the initial data builder * @throws InstantiationException if the creation fails */ public RSBCommunicationService(final MB builder) throws InstantiationException { logger.debug("Create RSBCommunicationService for component " + getClass().getSimpleName() + "."); this.dataBuilder = builder; try { if (builder == null) { throw new NotAvailableException("builder"); } this.controllerAvailabilityState = ControllerAvailabilityState.OFFLINE; this.dataLock = new ReentrantReadWriteLock(); this.dataBuilderReadLock = dataLock.readLock(); this.dataBuilderWriteLock = dataLock.writeLock(); this.messageClass = detectDataClass(); this.server = new NotInitializedRSBLocalServer(); this.informer = new NotInitializedRSBInformer<>(); this.dataObserver = new MessageObservable(this); this.dataObserver.setExecutorService(GlobalCachedExecutorService.getInstance().getExecutorService()); this.initialized = false; this.destroyed = false; this.shutdownDeamon = registerShutdownHook(this); } catch (CouldNotPerformException ex) { throw new InstantiationException(this, ex); } }
@Override public void shutdown() { super.shutdown(); try { // shutdown registry observer Registries.getUnitRegistry().removeDataObserver(unitRegistryObserver); } catch (final NotAvailableException ex) { // if the registry is not any longer available (in case of registry shutdown) than the observer is already cleared. } catch (final Exception ex) { ExceptionPrinter.printHistory(new CouldNotPerformException("Could not remove unit registry observer.", ex), logger); } // shutdown service observer for (final ServiceTempus serviceTempus : ServiceTempus.values()) { for (final MessageObservable serviceObservable : serviceTempusServiceTypeObservableMap.get(serviceTempus).values()) { serviceObservable.shutdown(); } unitDataObservableMap.get(serviceTempus).shutdown(); } }
try { Object serviceData = Services.invokeServiceMethod(serviceDescription.getType(), ServicePattern.PROVIDER, serviceTempus, data1); serviceTempusServiceTypeObservableMap.get(serviceTempus).get(serviceDescription.getType()).notifyObservers(serviceData); } catch (CouldNotPerformException ex) { logger.debug("Could not notify state update for service[" + serviceDescription.getType() + "] because this service is not supported by this remote controller.", ex);
@Override public void shutdown() { super.shutdown(); try { // shutdown registry observer Registries.getUnitRegistry().removeDataObserver(unitRegistryObserver); } catch (final NotAvailableException ex) { // if the registry is not any longer available (in case of registry shutdown) than the observer is already cleared } catch (final Exception ex) { ExceptionPrinter.printHistory(new CouldNotPerformException("Could not remove unit registry observer.", ex), logger); } for (final ServiceTempus serviceTempus : ServiceTempus.values()) { // shutdown service observer for (final MessageObservable serviceObservable : serviceTempusServiceTypeObservableMap.get(serviceTempus).values()) { serviceObservable.shutdown(); } unitDataObservableMap.get(serviceTempus).shutdown(); } }
@Override public void removeServiceStateObserver(final ServiceTempus serviceTempus, final ServiceType serviceType, final Observer observer) { serviceTempusServiceTypeObservableMap.get(serviceTempus).get(serviceType).removeObserver(observer); }
@Override public void addServiceStateObserver(final ServiceTempus serviceTempus, final ServiceType serviceType, final Observer observer) { serviceTempusServiceTypeObservableMap.get(serviceTempus).get(serviceType).addObserver(observer); }
dataObserver.notifyObservers(newData);
serviceTypeObservableMap.remove(serviceType).shutdown();
@Override public void removeServiceStateObserver(ServiceTempus serviceTempus, ServiceType serviceType, Observer observer) { serviceTempusServiceTypeObservableMap.get(serviceTempus).get(serviceType).removeObserver(observer); }
@Override public void addServiceStateObserver(ServiceTempus serviceTempus, ServiceType serviceType, Observer observer) { serviceTempusServiceTypeObservableMap.get(serviceTempus).get(serviceType).addObserver(observer); }