private void loadChannel(final String channelId, final ChannelConfiguration configuration) { this.channels.put( channelId, new ChannelInstance( channelId, configuration.getProviderId(), configuration.getConfiguration(), this.providerTracker, this.aspectProcessor, this.eventAdmin, this.manager, this.processorFactoryTracker, this.triggerFactoryTracker)); }
@Override public ChannelId create( final String providerId, final ChannelDetails details, final Map<MetaKey, String> configuration) { final String channelId = UUID.randomUUID().toString(); final String actualProviderId; if (providerId != null) { actualProviderId = providerId; } else { actualProviderId = "apm"; } final ChannelConfiguration cfg = new ChannelConfiguration(); cfg.setProviderId(actualProviderId); cfg.setConfiguration(configuration); cfg.setDescription(details.getDescription()); this.providerTracker.run( actualProviderId, p -> { final ChannelProvider provider = p.orElseThrow( () -> new IllegalStateException( String.format( "Channel provider '%s' is not registered", actualProviderId))); provider.create(channelId, configuration); }); this.manager.accessRun( KEY_STORAGE, ChannelServiceModify.class, channels -> { channels.createChannel(channelId, cfg); }); // FIXME: ensure that we are the only active call to the storage manager model KEY_STORAGE commitCreateChannel(channelId, actualProviderId, configuration); return new ChannelId(channelId); }