public void attach(ZeroMQSourceDefinition source, PhysicalTargetDefinition target, Wire wire) throws WiringException { URI uri; if (source.getCallbackUri() != null) { uri = source.getCallbackUri(); } else { uri = target.getUri(); } ClassLoader loader = registry.getClassLoader(target.getClassLoaderId()); List<InvocationChain> chains = ZeroMQAttacherHelper.sortChains(wire); try { ZeroMQMetadata metadata = source.getMetadata(); broker.connectToReceiver(uri, chains, metadata, loader); } catch (BrokerException e) { throw new WiringException(e); } }
/** * Handles adding required parameter data transformers to a wire. * * @param wire the wire * @param definition the physical wire definition * @throws WiringException if there is an error creating a transformer */ private void processTransform(Wire wire, PhysicalWireDefinition definition) throws WiringException { if (!transform) { // short-circuit during bootstrap return; } PhysicalSourceDefinition sourceDefinition = definition.getSource(); PhysicalTargetDefinition targetDefinition = definition.getTarget(); for (DataType<?> sourceType : sourceDefinition.getPhysicalDataTypes()) { if (targetDefinition.getPhysicalDataTypes().contains(sourceType)) { // transform for pass-by-value and not for different datatypes. addTransformer(wire, definition, true); return; } } addTransformer(wire, definition, false); }
PhysicalTargetDefinition targetDefinition = definition.getTarget(); URI sourceId = sourceDefinition.getClassLoaderId(); URI targetId = targetDefinition.getClassLoaderId(); ClassLoader sourceLoader = null; ClassLoader targetLoader = null; List<DataType<?>> targetTypes = targetDefinition.getPhysicalDataTypes(); try { Interceptor interceptor = transformerFactory.createInterceptor(operation, sourceTypes, targetTypes, targetLoader, sourceLoader);
targetDefinition.setClassLoaderId(service.getParent().getDefinition().getContributionUri()); targetDefinition.setCallbackUri(callbackUri); boolean optimizable = sourceDefinition.isOptimizable() && targetDefinition.isOptimizable() && checkOptimization(contract, physicalOperations); pwd.setOptimizable(optimizable); return pwd;
URI targetId = targetDefinition.getClassLoaderId(); ClassLoader targetClassLoader = classLoaderRegistry.getClassLoader(targetId);
targetDefinition.setClassLoaderId(targetComponent.getDefinition().getContributionUri()); targetDefinition.setCallback(true);
public void detach(ZeroMQSourceDefinition source, PhysicalTargetDefinition target) throws WiringException { URI uri; if (source.getCallbackUri() != null) { uri = source.getCallbackUri(); } else { uri = target.getUri(); } try { broker.releaseReceiver(uri); } catch (BrokerException e) { throw new WiringException(e); } }
PhysicalTargetDefinition targetDefinition = targetGenerator.generateServiceBindingTarget(serviceBinding, serviceContract, sourceOperations, targetPolicy); targetDefinition.setClassLoaderId(source.getDefinition().getContributionUri()); if (callbackContract != null) { targetDefinition.setCallbackUri(callbackUri);
public <T extends ResourceReferenceDefinition> PhysicalWireDefinition generateResource(LogicalResourceReference<T> resourceReference) throws GenerationException { T resourceDefinition = resourceReference.getDefinition(); LogicalComponent<?> component = resourceReference.getParent(); // Generates the wire source metadata ComponentGenerator sourceGenerator = getGenerator(component); PhysicalSourceDefinition sourceDefinition = sourceGenerator.generateResourceSource(resourceReference); sourceDefinition.setClassLoaderId(component.getDefinition().getContributionUri()); // Generates the wire target metadata ResourceReferenceGenerator<T> targetGenerator = getGenerator(resourceDefinition); PhysicalTargetDefinition targetDefinition = targetGenerator.generateWireTarget(resourceReference); targetDefinition.setClassLoaderId(resourceReference.getParent().getDefinition().getContributionUri()); boolean optimizable = targetDefinition.isOptimizable(); // Create the wire from the component to the resource List<LogicalOperation> sourceOperations = resourceReference.getOperations(); Set<PhysicalOperationDefinition> operations = operationGenerator.generateOperations(sourceOperations, false, null); PhysicalWireDefinition pwd = new PhysicalWireDefinition(sourceDefinition, targetDefinition, operations); pwd.setOptimizable(optimizable); return pwd; }
@SuppressWarnings({"unchecked"}) private PhysicalWireDefinition generateRemoteWireCallback(LogicalWire wire) throws GenerationException { LogicalReference reference = wire.getSource(); LogicalComponent target = reference.getParent(); ServiceContract referenceContract = reference.getServiceContract(); ServiceContract referenceCallbackContract = referenceContract.getCallbackContract(); if (reference.getCallbackBindings().isEmpty()) { throw new GenerationException("Callback binding not set"); } LogicalBinding<?> referenceBinding = reference.getCallbackBindings().get(0); LogicalService callbackService = target.getService(referenceCallbackContract.getInterfaceName()); List<LogicalOperation> operations = reference.getCallbackOperations(); // resolve policies PolicyResult policyResult = policyResolver.resolveRemoteCallbackPolicies(wire); EffectivePolicy targetPolicy = policyResult.getTargetPolicy(); // generate metadata to attach the physical callback wire to the source transport BindingGenerator bindingGenerator = getGenerator(referenceBinding); PhysicalSourceDefinition sourceDefinition = bindingGenerator.generateSource(referenceBinding, referenceCallbackContract, operations, targetPolicy); URI contributionUri = target.getDefinition().getContributionUri(); sourceDefinition.setClassLoaderId(contributionUri); // generate the metadata used to attach the physical callback wire to the target component (the component containing the forward reference) ComponentGenerator componentGenerator = getGenerator(target); PhysicalTargetDefinition targetDefinition = componentGenerator.generateTarget(callbackService, targetPolicy); targetDefinition.setClassLoaderId(target.getDefinition().getContributionUri()); // generate the metadata for interceptors that are attached to wire invocation chains, e.g. policy implemented by an interceptor Set<PhysicalOperationDefinition> physicalOperations = operationGenerator.generateOperations(operations, true, policyResult); return new PhysicalWireDefinition(sourceDefinition, targetDefinition, physicalOperations); }
targetDefinition.setClassLoaderId(target.getDefinition().getContributionUri()); ServiceContract serviceContract = service.getServiceContract(); ServiceContract callbackContract = serviceContract.getCallbackContract(); targetDefinition.setCallbackUri(callbackUri); new PhysicalWireDefinition(sourceDefinition, sourceDeployable, targetDefinition, targetDeployable, operations); boolean optimizable = sourceDefinition.isOptimizable() && targetDefinition.isOptimizable() && checkOptimization(referenceContract, operations); pwd.setOptimizable(optimizable); return pwd;
public <T extends BindingDefinition> PhysicalWireDefinition generateBoundServiceCallback(LogicalBinding<T> binding) throws GenerationException { checkService(binding); LogicalService service = (LogicalService) binding.getParent(); LogicalComponent<?> component = service.getLeafComponent(); ServiceContract contract = service.getLeafService().getServiceContract(); ServiceContract callbackContract = contract.getCallbackContract(); List<LogicalOperation> operations = service.getCallbackOperations(); // resolve callback policies PolicyResult policyResult = policyResolver.resolveCallbackPolicies(binding); EffectivePolicy sourcePolicy = policyResult.getSourcePolicy(); EffectivePolicy targetPolicy = policyResult.getTargetPolicy(); // generate the metadata used to attach the physical callback wire to the source component ComponentGenerator sourceGenerator = getGenerator(component); PhysicalSourceDefinition sourceDefinition = sourceGenerator.generateCallbackSource(service, sourcePolicy); sourceDefinition.setClassLoaderId(component.getDefinition().getContributionUri()); // generate the metadata used to attach the physical callback wire to the target transport BindingGenerator<T> bindingGenerator = getGenerator(binding); PhysicalTargetDefinition targetDefinition = bindingGenerator.generateTarget(binding, callbackContract, operations, targetPolicy); targetDefinition.setCallback(true); targetDefinition.setClassLoaderId(binding.getParent().getParent().getDefinition().getContributionUri()); // generate the metadata for interceptors that are attached to wire invocation chains, e.g. policy implemented by an interceptor Set<PhysicalOperationDefinition> physicalOperations = operationGenerator.generateOperations(operations, true, policyResult); return new PhysicalWireDefinition(sourceDefinition, targetDefinition, physicalOperations); }
} catch (ClassNotFoundException e) { URI sourceUri = sourceDefinition.getUri(); URI targetUri = targetDefinition.getUri(); throw new WireAttachException("Implementation class not found when wiring " + sourceUri + " to " + targetUri, e); URI targetUri = targetDefinition.getUri(); throw new WireAttachException("No matching method found when wiring " + sourceUri + " to " + targetUri); } catch (NoSuchMethodException e) { URI sourceUri = sourceDefinition.getUri(); URI targetUri = targetDefinition.getUri(); throw new WireAttachException("No matching method found when wiring " + sourceUri + " to " + targetUri, e);
targetDefinition.setCallbackUri(callbackUri); targetDefinition.setClassLoaderId(binding.getParent().getParent().getDefinition().getContributionUri());
public <T extends BindingDefinition> PhysicalWireDefinition generateBoundReferenceCallback(LogicalBinding<T> binding) throws GenerationException { checkReference(binding); LogicalReference reference = (LogicalReference) binding.getParent(); LogicalComponent<?> component = reference.getParent(); ServiceContract contract = reference.getServiceContract(); ServiceContract callbackContract = contract.getCallbackContract(); LogicalService callbackService = component.getService(callbackContract.getInterfaceName()); List<LogicalOperation> operations = reference.getCallbackOperations(); // resolve policies PolicyResult policyResult = policyResolver.resolveCallbackPolicies(binding); EffectivePolicy sourcePolicy = policyResult.getSourcePolicy(); EffectivePolicy targetPolicy = policyResult.getTargetPolicy(); // generate the metadata used to attach the physical callback wire to the source transport BindingGenerator<T> sourceGenerator = getGenerator(binding); PhysicalSourceDefinition sourceDefinition = sourceGenerator.generateSource(binding, callbackContract, operations, targetPolicy); sourceDefinition.setClassLoaderId(binding.getParent().getParent().getDefinition().getContributionUri()); // generate the metadata used to attach the physical callback wire to the target component ComponentGenerator targetGenerator = getGenerator(component); PhysicalTargetDefinition targetDefinition = targetGenerator.generateTarget(callbackService, sourcePolicy); targetDefinition.setClassLoaderId(callbackService.getParent().getDefinition().getContributionUri()); targetDefinition.setCallback(true); Set<PhysicalOperationDefinition> operation = operationGenerator.generateOperations(operations, true, policyResult); return new PhysicalWireDefinition(sourceDefinition, targetDefinition, operation); }