public MetroWireTarget generateTarget(LogicalBinding<WsBinding> binding, JavaServiceContract contract) { URL targetUrl = null; WsBinding bindingDefinition = binding.getDefinition(); URI targetUri = bindingDefinition.getTargetUri(); if (binding.isCallback() && targetUri != null) { throw new Fabric3Exception("A web services callback binding cannot be used with a binding URI on a service: " + binding.getParent().getUri()); } if (targetUri != null) { if (!targetUri.isAbsolute() && !binding.isCallback()) { throw new Fabric3Exception("Web service binding URI must be absolute on reference: " + binding.getParent().getUri()); } try { targetUrl = targetUri.toURL(); } catch (MalformedURLException e) { throw new Fabric3Exception(e); } } else if (bindingDefinition.getWsdlElement() == null && bindingDefinition.getWsdlLocation() == null && !binding.isCallback()) { throw new Fabric3Exception("A web service binding URI must be specified: " + binding.getParent().getUri()); } return generateTarget(binding, targetUrl, contract); }
private void generateCallbackBindings(LogicalService service) throws GenerationException { for (LogicalBinding<?> logicalBinding : service.getBindings()) { if (logicalBinding.getDefinition() instanceof SCABinding) { // skip SCA binding continue; } CallbackBindingGenerator generator = generators.get(logicalBinding.getDefinition().getClass()); if (generator == null) { throw new GenerationException("Callback generator not found for:" + logicalBinding.getDefinition().getType()); } BindingDefinition definition = generator.generateReferenceCallback(logicalBinding); definition.setParent(service.getDefinition()); LogicalBinding<?> logicalCallback = new LogicalBinding(definition, service); service.addCallbackBinding(logicalCallback); } }
public ZeroMQWireTarget generateTarget(LogicalBinding<ZeroMQBinding> binding, ServiceContract contract, List<LogicalOperation> operations) { validateServiceContract(contract); ZeroMQMetadata metadata = binding.getDefinition().getZeroMQMetadata(); if (binding.isCallback()) { URI targetUri = URI.create("zmq://" + contract.getInterfaceName()); return new ZeroMQWireTarget(targetUri, metadata); } URI targetUri; // If this is an undeployment, use the previously calculated target URI. This must be done since the target component may no longer // be in the domain if it has been undeployed from another zone. if (LogicalState.MARKED == binding.getState()) { targetUri = binding.getMetadata(TARGET_URI, URI.class); } else { targetUri = binding.getDefinition().getTargetUri();// parseTargetUri(binding); if (targetUri != null) { targetUri = URI.create(binding.getParent().getParent().getParent().getUri() + "/" + targetUri); } else { // create a synthetic name targetUri = URI.create("f3synthetic://" + binding.getParent().getUri() + "/" + binding.getDefinition().getName()); } binding.addMetadata(TARGET_URI, targetUri); } return generateTarget(contract, targetUri, metadata); }
private void processService(LogicalService service, QName policySet, boolean incremental) { for (LogicalBinding<?> binding : service.getBindings()) { if (incremental && binding.getPolicySets().contains(policySet)) { continue; } binding.setState(LogicalState.NEW); } // TODO check collocated wires, i.e. references attached directly to the service so they can be reprovisioned }
private ServiceEndpointDefinition createServiceEndpointDefinition(LogicalBinding<WsBinding> binding, JavaServiceContract contract, Class<?> serviceClass) { URI targetUri = binding.getDefinition().getTargetUri(); if (targetUri == null) { targetUri = URI.create(binding.getParent().getUri().getFragment()); // use the service URI fragment } return synthesizer.synthesizeServiceEndpoint(contract, serviceClass, targetUri); }
public ZeroMQWireSource generateSource(LogicalBinding<ZeroMQBinding> binding, ServiceContract contract, List<LogicalOperation> operations) { ZeroMQMetadata metadata = binding.getDefinition().getZeroMQMetadata(); if (binding.isCallback()) { URI uri = URI.create("zmq://" + contract.getInterfaceName()); return new ZeroMQWireSource(uri, metadata); } else { return new ZeroMQWireSource(metadata); } }
@SuppressWarnings("unchecked") private <T extends BindingDefinition> ConnectionBindingGenerator<T> getGenerator(LogicalBinding<T> binding) throws GeneratorNotFoundException { return (ConnectionBindingGenerator<T>) generatorRegistry.getConnectionBindingGenerator(binding.getDefinition().getClass()); }
private void checkService(LogicalBinding<?> binding) { if (!(binding.getParent() instanceof LogicalService)) { throw new AssertionError("Expected " + LogicalService.class.getName() + " as parent to binding"); } }
callbackUri = callbackBinding.getDefinition().getTargetUri(); if (binding.getDefinition() instanceof SCABinding) { continue; if (binding.getState() == LogicalState.NEW || binding.getState() == LogicalState.MARKED || !incremental) { PhysicalWireDefinition pwd = wireGenerator.generateBoundService(binding, callbackUri); if (LogicalState.MARKED == binding.getState()) { DetachWireCommand detachWireCommand = new DetachWireCommand(); detachWireCommand.setPhysicalWireDefinition(pwd); && !(callbackBinding.getDefinition() instanceof SCABinding) && ((callbackBinding.getState() == LogicalState.NEW || callbackBinding.getState() == LogicalState.MARKED || !incremental))) { PhysicalWireDefinition callbackPwd = wireGenerator.generateBoundServiceCallback(callbackBinding); if (LogicalState.MARKED == callbackBinding.getState()) { DetachWireCommand detachWireCommand = new DetachWireCommand(); detachWireCommand.setPhysicalWireDefinition(callbackPwd);
public PolicyResult resolvePolicies(LogicalBinding<?> binding) throws PolicyResolutionException { Bindable parent = binding.getParent(); LogicalBinding<RemoteBindingDefinition> remoteBinding = new LogicalBinding<>(RemoteBindingDefinition.INSTANCE, parent); Bindable bindable = binding.getParent(); if (bindable instanceof LogicalReference) { return resolvePolicies(bindable.getOperations(), remoteBinding, binding, bindable.getParent(), null); } else if (bindable instanceof LogicalService) { return resolvePolicies(bindable.getOperations(), binding, remoteBinding, null, bindable.getParent()); } else { throw new UnsupportedOperationException(); } }
private void validateIntents(LogicalBinding<?> binding) throws PolicyResolutionException { Set<Intent> intents = policyRegistry.getDefinitions(binding.getIntents(), Intent.class); for (Intent current : intents) { for (Intent intent : intents) { if (current.getExcludes().contains(intent.getName())) { throw new PolicyResolutionException("Mutually exclusive intents specified on binding: " + binding.getParent().getUri()); } } } }
public PolicyResult resolveLocalPolicies(LogicalWire wire) throws PolicyResolutionException { LogicalReference reference = wire.getSource(); // use the leaf service to optimize data paths - e.g. a promoted service may use a different service contract and databinding than the leaf LogicalService service = wire.getTarget().getLeafService(); LogicalComponent source = reference.getParent(); LogicalComponent target = service.getLeafComponent(); LogicalBinding<LocalBindingDefinition> sourceBinding = new LogicalBinding<>(LocalBindingDefinition.INSTANCE, reference); LogicalBinding<LocalBindingDefinition> targetBinding = new LogicalBinding<>(LocalBindingDefinition.INSTANCE, service); return resolvePolicies(reference.getOperations(), sourceBinding, targetBinding, source, target); }
/** * Removes marked bindings * * @param iter the collection of bindings to iterate */ private void removeMarkedBindings(Iterator<LogicalBinding<?>> iter) { while (iter.hasNext()) { LogicalBinding<?> binding = iter.next(); if (MARKED == binding.getState()) { iter.remove(); } } }
service.getBindings().stream().filter(binding -> NEW == binding.getState()).forEach(binding -> binding.setState(PROVISIONED)); service.getCallbackBindings().stream().filter(binding -> NEW == binding.getState()).forEach(binding -> binding.setState(PROVISIONED)); reference.getBindings().stream().filter(binding -> NEW == binding.getState()).forEach(binding -> binding.setState(PROVISIONED)); reference.getCallbackBindings().stream().filter(binding -> NEW == binding.getState()).forEach(binding -> binding.setState(PROVISIONED)); if (binding != null && NEW == binding.getState()) { binding.setState(PROVISIONED);
public void bind(LogicalChannel channel) { QName deployable = channel.getParent().getDeployable(); String topic = channel.getUri().toString(); JmsBindingDefinition channelDefinition = createTopicBindingDefinition(topic); LogicalBinding<JmsBindingDefinition> channelBinding = new LogicalBinding<JmsBindingDefinition>(channelDefinition, channel, deployable); channelBinding.setAssigned(true); channel.addBinding(channelBinding); }
for (LogicalService service : component.getServices()) { for (LogicalBinding<?> binding : service.getBindings()) { binding.setState(MARKED); binding.setState(MARKED); service.getBindings().stream().filter(binding -> contributionUri.equals(binding.getTargetContribution())).forEach(binding -> binding.setState( MARKED)); service.getCallbackBindings().stream().filter(binding -> contributionUri.equals(binding.getTargetContribution())).forEach(binding -> binding.setState( MARKED)); if (binding != null && contributionUri.equals(binding.getTargetContribution())) { binding.setState(MARKED);
if (!binding.getPolicySets().contains(policySet)) { return; binding.removePolicySet(policySet); binding.setState(LogicalState.NEW); } else { throw new PolicyEvaluationException("Invalid policy attachment type: " + target.getClass());
if (binding.getPolicySets().contains(policySet)) { return; binding.addPolicySet(policySet); binding.setState(LogicalState.NEW); } else { throw new PolicyEvaluationException("Invalid policy attachment type: " + target.getClass());
for (LogicalService service : component.getServices()) { for (LogicalBinding<?> binding : service.getBindings()) { binding.setState(LogicalState.MARKED); binding.setState(LogicalState.MARKED); if (deployable.equals(binding.getDeployable())) { binding.setState(LogicalState.MARKED); if (deployable.equals(binding.getDeployable())) { binding.setState(LogicalState.MARKED); if (binding != null && deployable.equals(binding.getDeployable())) { binding.setState(LogicalState.MARKED);
private ReferenceEndpointDefinition createEndpoint(LogicalBinding<WsBinding> binding, JavaServiceContract contract, Class<?> serviceClass, URL targetUrl) { if (binding.isCallback()) { targetUrl = ReferenceEndpointDefinition.DYNAMIC_URL; } if (targetUrl != null) { return synthesizer.synthesizeReferenceEndpoint(contract, serviceClass, targetUrl); } else { throw new Fabric3Exception("Target URL must be specified"); } }