public void connectToSender(String id, URI uri, List<InvocationChain> chains, ZeroMQMetadata metadata, ClassLoader loader)
throws BrokerException {
SenderHolder holder;
if (ZMQ.equals(uri.getScheme())) {
DelegatingOneWaySender sender = new DelegatingOneWaySender(id, this, metadata);
holder = new SenderHolder(sender);
} else {
holder = senders.get(uri.toString());
}
if (holder == null) {
boolean oneWay = isOneWay(chains, uri);
holder = createSender(uri.toString(), oneWay, metadata);
managementService.registerSender(id, holder.getSender());
}
for (int i = 0, chainsSize = chains.size(); i < chainsSize; i++) {
InvocationChain chain = chains.get(i);
try {
PhysicalOperationDefinition physicalOperation = chain.getPhysicalOperation();
List<DataType<?>> sourceTypes = createTypes(physicalOperation, loader);
Interceptor interceptor = interceptorFactory.createInterceptor(physicalOperation, sourceTypes, TRANSPORT_TYPES, loader, loader);
chain.addInterceptor(interceptor);
chain.addInterceptor(new UnwrappingInterceptor());
} catch (InterceptorCreationException e) {
throw new BrokerException(e);
}
Interceptor interceptor = createInterceptor(holder, i);
chain.addInterceptor(interceptor);
}
holder.getIds().add(id);
}