private void generateBindings(LogicalReference reference, LogicalComponent<?> component, boolean incremental, ConnectionCommand command) throws GenerationException { boolean reinjection = isBoundReinjection(reference, incremental); for (LogicalBinding<?> logicalBinding : reference.getBindings()) { if (logicalBinding.getDefinition() instanceof SCABinding) { // skip SCA binding continue; } generateBinding(component, logicalBinding, command, incremental, reinjection, false); } if (reference.getServiceContract().getCallbackContract() != null) { boolean bindings = reference.isConcreteBound(); if (bindings) { List<LogicalBinding<?>> callbackBindings = reference.getCallbackBindings(); if (callbackBindings.isEmpty()) { // generate callback bindings as some transports do not require an explicit callback binding configuration on the reference generateCallbackBindings(reference); } if (callbackBindings.size() != 1) { // if the reference is explicitly bound, it must have one callback binding String uri = reference.getUri().toString(); throw new UnsupportedOperationException("The runtime requires exactly one callback binding to be specified on reference: " + uri); } LogicalBinding<?> callbackBinding = callbackBindings.get(0); generateBinding(component, callbackBinding, command, incremental, reinjection, true); } } }
private void resolveReferences(LogicalComponent<?> component, InstantiationContext context) { LogicalCompositeComponent parent = component.getParent(); for (LogicalReference reference : component.getReferences()) { boolean scaTarget = isScaTarget(reference); if (scaTarget || reference.isConcreteBound()) { // reference is targeted using binding.sca or is explicitly bound so it should not be autowired continue; } Multiplicity multiplicityValue = reference.getDefinition().getMultiplicity(); boolean refMultiplicity = multiplicityValue.equals(Multiplicity.ZERO_N) || multiplicityValue.equals(Multiplicity.ONE_N); if (refMultiplicity || !reference.isResolved()) { // Only resolve references that have not been resolved or ones that are multiplicities since the latter may be reinjected. // Explicitly set the reference to unresolved, since if it was a multiplicity it may have been previously resolved. reference.setResolved(false); resolve(reference, parent, context); } } }
if (!targeted && logicalReference.getDefinition().isRequired() && !logicalReference.isConcreteBound()) { String referenceUri = logicalReference.getUri().toString(); ReferenceNotFound error = new ReferenceNotFound("Unable to resolve reference " + referenceUri, logicalReference);