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); }
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); }
private void createServices(Component<?> component, LogicalComponent<?> logicalComponent, ComponentType componentType) { for (Service<ComponentType> service : componentType.getServices().values()) { String name = service.getName(); URI serviceUri = logicalComponent.getUri().resolve('#' + name); LogicalService logicalService = new LogicalService(serviceUri, service, logicalComponent); for (Binding binding : service.getBindings()) { LogicalBinding<Binding> logicalBinding = new LogicalBinding<>(binding, logicalService); logicalService.addBinding(logicalBinding); } for (Binding binding : service.getCallbackBindings()) { LogicalBinding<Binding> logicalBinding = new LogicalBinding<>(binding, logicalService); logicalService.addCallbackBinding(logicalBinding); } // service is configured in the component definition Service<Component> componentService = component.getServices().get(name); if (componentService != null) { for (Binding binding : componentService.getBindings()) { LogicalBinding<Binding> logicalBinding = new LogicalBinding<>(binding, logicalService); logicalService.addBinding(logicalBinding); } for (Binding binding : componentService.getCallbackBindings()) { LogicalBinding<Binding> logicalBinding = new LogicalBinding<>(binding, logicalService); logicalService.addCallbackBinding(logicalBinding); } } logicalComponent.addService(logicalService); } }
public PolicyResult resolveLocalCallbackPolicies(LogicalWire wire) throws PolicyResolutionException { LogicalReference reference = wire.getSource(); LogicalService service = wire.getTarget(); LogicalComponent<?> targetComponent = reference.getParent(); ServiceContract referenceCallbackContract = reference.getServiceContract().getCallbackContract(); LogicalService callbackService = targetComponent.getService(referenceCallbackContract.getInterfaceName()); LogicalBinding<LocalBindingDefinition> sourceBinding = new LogicalBinding<>(LocalBindingDefinition.INSTANCE, callbackService); LogicalBinding<LocalBindingDefinition> targetBinding = new LogicalBinding<>(LocalBindingDefinition.INSTANCE, reference); LogicalComponent sourceComponent = service.getLeafComponent(); return resolvePolicies(service.getCallbackOperations(), sourceBinding, targetBinding, sourceComponent, targetComponent); }
@SuppressWarnings("unchecked") private void generateCallbackBindings(LogicalReference reference) { for (LogicalBinding<?> logicalBinding : reference.getBindings()) { CallbackBindingGenerator generator = generators.get(logicalBinding.getDefinition().getClass()); if (generator == null) { throw new Fabric3Exception("Callback generator not found for:" + logicalBinding.getDefinition().getType()); } Binding definition = generator.generateReferenceCallback(logicalBinding); definition.setParent(reference.getDefinition()); LogicalBinding<?> logicalCallback = new LogicalBinding(definition, reference); reference.addCallbackBinding(logicalCallback); } }
@SuppressWarnings("unchecked") private void generateCallbackBindings(LogicalService service) { for (LogicalBinding<?> logicalBinding : service.getBindings()) { CallbackBindingGenerator generator = generators.get(logicalBinding.getDefinition().getClass()); if (generator == null) { throw new Fabric3Exception("Callback generator not found for:" + logicalBinding.getDefinition().getType()); } Binding definition = generator.generateServiceCallback(logicalBinding); definition.setParent(service.getDefinition()); LogicalBinding<?> logicalCallback = new LogicalBinding(definition, service); service.addCallbackBinding(logicalCallback); } }
private void createReferences(ComponentDefinition<?> definition, LogicalComponent<?> component, ComponentType componentType) { for (AbstractReference reference : componentType.getReferences().values()) { String name = reference.getName(); URI referenceUri = component.getUri().resolve('#' + name); LogicalReference logicalReference = new LogicalReference(referenceUri, reference, component); // reference is configured in the component definition ComponentReference componentReference = definition.getReferences().get(name); if (componentReference != null) { logicalReference.addIntents(componentReference.getIntents()); for (BindingDefinition binding : componentReference.getBindings()) { LogicalBinding<BindingDefinition> logicalBinding = new LogicalBinding<BindingDefinition>(binding, logicalReference); logicalReference.addBinding(logicalBinding); } for (BindingDefinition binding : componentReference.getCallbackBindings()) { LogicalBinding<BindingDefinition> logicalBinding = new LogicalBinding<BindingDefinition>(binding, logicalReference); logicalReference.addCallbackBinding(logicalBinding); } } component.addReference(logicalReference); } }
@SuppressWarnings("unchecked") private void generateCallbackBindings(LogicalService service) { for (LogicalBinding<?> logicalBinding : service.getBindings()) { CallbackBindingGenerator generator = generators.get(logicalBinding.getDefinition().getClass()); if (generator == null) { throw new Fabric3Exception("Callback generator not found for:" + logicalBinding.getDefinition().getType()); } Binding definition = generator.generateServiceCallback(logicalBinding); definition.setParent(service.getDefinition()); LogicalBinding<?> logicalCallback = new LogicalBinding(definition, service); service.addCallbackBinding(logicalCallback); } }
@SuppressWarnings("unchecked") private void generateCallbackBindings(LogicalReference reference) { for (LogicalBinding<?> logicalBinding : reference.getBindings()) { CallbackBindingGenerator generator = generators.get(logicalBinding.getDefinition().getClass()); if (generator == null) { throw new Fabric3Exception("Callback generator not found for:" + logicalBinding.getDefinition().getType()); } Binding definition = generator.generateReferenceCallback(logicalBinding); definition.setParent(reference.getDefinition()); LogicalBinding<?> logicalCallback = new LogicalBinding(definition, reference); reference.addCallbackBinding(logicalCallback); } }
public PolicyResult resolveCallbackPolicies(LogicalBinding<?> binding) throws PolicyResolutionException { LogicalBinding<RemoteBindingDefinition> remoteBinding = new LogicalBinding<>(RemoteBindingDefinition.INSTANCE, binding.getParent()); Bindable bindable = binding.getParent(); if (bindable instanceof LogicalReference) { return resolvePolicies(bindable.getCallbackOperations(), remoteBinding, binding, bindable.getParent(), null); } else if (bindable instanceof LogicalService) { return resolvePolicies(bindable.getCallbackOperations(), remoteBinding, binding, bindable.getParent(), null); } else { throw new IllegalArgumentException("Only services and references can have callback operations"); } }
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(); } }
public void bind(LogicalChannel channel) throws BindingSelectionException { ZeroMQMetadata metadata = createMetadata(); metadata.setChannelName(channel.getDefinition().getName()); ZeroMQBindingDefinition definition = new ZeroMQBindingDefinition("binding.zeromq", metadata); LogicalBinding<ZeroMQBindingDefinition> binding = new LogicalBinding<ZeroMQBindingDefinition>(definition, channel); channel.addBinding(binding); }
public PolicyResult resolveRemoteCallbackPolicies(LogicalWire wire) throws PolicyResolutionException { LogicalReference reference = wire.getSource(); LogicalComponent target = reference.getParent(); ServiceContract referenceContract = reference.getServiceContract(); ServiceContract referenceCallbackContract = referenceContract.getCallbackContract(); LogicalBinding<?> referenceBinding = reference.getCallbackBindings().get(0); LogicalService callbackService = target.getService(referenceCallbackContract.getInterfaceName()); List<LogicalOperation> operations = reference.getCallbackOperations(); LogicalBinding<LocalBindingDefinition> sourceBinding = new LogicalBinding<>(LocalBindingDefinition.INSTANCE, callbackService); return resolvePolicies(operations, sourceBinding, referenceBinding, null, target); }
@SuppressWarnings("unchecked") private void generateCallbackBindings(LogicalReference reference) throws GenerationException { for (LogicalBinding<?> logicalBinding : reference.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(reference.getDefinition()); LogicalBinding<?> logicalCallback = new LogicalBinding(definition, reference); reference.addCallbackBinding(logicalCallback); } }
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 void instantiateChannels(Composite composite, LogicalCompositeComponent parent, InstantiationContext context) { for (ChannelDefinition definition : composite.getChannels().values()) { URI uri = URI.create(parent.getUri() + "/" + definition.getName()); if (parent.getChannel(uri) != null) { DuplicateChannel error = new DuplicateChannel(uri, parent); context.addError(error); continue; } LogicalChannel channel = new LogicalChannel(uri, definition, parent); for (BindingDefinition binding : definition.getBindings()) { LogicalBinding<BindingDefinition> logicalBinding = new LogicalBinding<BindingDefinition>(binding, channel); channel.addBinding(logicalBinding); } channel.setDeployable(composite.getName()); parent.addChannel(channel); } }
public void instantiateChannels(Composite composite, LogicalCompositeComponent parent, InstantiationContext context) { for (Channel definition : composite.getChannels().values()) { URI uri = URI.create(parent.getUri() + "/" + definition.getName()); if (parent.getChannel(uri) != null) { DuplicateChannel error = new DuplicateChannel(uri, parent); context.addError(error); continue; } LogicalChannel channel = new LogicalChannel(uri, definition, parent); for (Binding binding : definition.getBindings()) { LogicalBinding<Binding> logicalBinding = new LogicalBinding<>(binding, channel); channel.addBinding(logicalBinding); } channel.setDeployable(composite.getName()); parent.addChannel(channel); } }
public void instantiateChannels(Composite composite, LogicalCompositeComponent parent, InstantiationContext context) { for (Channel definition : composite.getChannels().values()) { URI uri = URI.create(parent.getUri() + "/" + definition.getName()); if (parent.getChannel(uri) != null) { DuplicateChannel error = new DuplicateChannel(uri, parent); context.addError(error); continue; } LogicalChannel channel = new LogicalChannel(uri, definition, parent); for (Binding binding : definition.getBindings()) { LogicalBinding<Binding> logicalBinding = new LogicalBinding<>(binding, channel); channel.addBinding(logicalBinding); } channel.setDeployable(composite.getName()); parent.addChannel(channel); } }
public <T> T resolve(Class<T> interfaze, Binding binding, Class<?> implClass) throws Fabric3Exception { LogicalReference logicalReference = createReference(interfaze); LogicalBinding<?> logicalBinding = new LogicalBinding<>(binding, logicalReference); logicalReference.addBinding(logicalBinding); PhysicalWire physicalWire = wireGenerator.generateReference(logicalBinding); NonManagedWireSource source = (NonManagedWireSource) physicalWire.getSource(); URI uri = ContributionResolver.getContribution(interfaze); ClassLoader classLoader = classLoaderRegistry.getClassLoader(uri); physicalWire.getTarget().setClassLoader(classLoader); source.setClassLoader(classLoader); connector.connect(physicalWire); return interfaze.cast(source.getProxy()); }
public <T> T resolve(Class<T> interfaze, Binding binding, Class<?> implClass) throws Fabric3Exception { LogicalReference logicalReference = createReference(interfaze); LogicalBinding<?> logicalBinding = new LogicalBinding<>(binding, logicalReference); logicalReference.addBinding(logicalBinding); PhysicalWire physicalWire = wireGenerator.generateReference(logicalBinding); NonManagedWireSource source = (NonManagedWireSource) physicalWire.getSource(); URI uri = ContributionResolver.getContribution(interfaze); ClassLoader classLoader = classLoaderRegistry.getClassLoader(uri); physicalWire.getTarget().setClassLoader(classLoader); source.setClassLoader(classLoader); connector.connect(physicalWire); return interfaze.cast(source.getProxy()); }