private void generateProducerInjectionMapping(Producer definition, WebComponentType type, Map<String, Map<String, InjectionSite>> mappings) { Map<String, InjectionSite> mapping = mappings.get(definition.getName()); if (mapping == null) { mapping = new HashMap<>(); mappings.put(definition.getName(), mapping); } for (Map.Entry<String, Map<InjectionSite, Injectable>> entry : type.getInjectionSites().entrySet()) { for (Map.Entry<InjectionSite, Injectable> siteMap : entry.getValue().entrySet()) { if (siteMap.getValue().getName().equals(definition.getName())) { mapping.put(entry.getKey(), siteMap.getKey()); } } } ServiceContract contract = definition.getServiceContract(); Class<?> interfaceClass = contract.getInterfaceClass(); // also inject the reference into the servlet context WebContextInjectionSite servletContextSite = new WebContextInjectionSite(interfaceClass, SERVLET_CONTEXT); mapping.put(SERVLET_CONTEXT_SITE, servletContextSite); }
/** * Constructor. * * @param uri the producer URI * @param definition the producer type definition * @param parent the parent component */ public LogicalProducer(URI uri, Producer definition, LogicalComponent<?> parent) { super(uri, definition != null ? definition.getServiceContract() : null, parent); this.definition = definition; targets = new ArrayList<>(); }
private void createProducers(Component<?> component, LogicalComponent<?> logicalComponent, ComponentType componentType) { for (Producer<ComponentType> producer : componentType.getProducers().values()) { String name = producer.getName(); URI producerUri = logicalComponent.getUri().resolve('#' + name); LogicalProducer logicalProducer = new LogicalProducer(producerUri, producer, logicalComponent); // producer is configured in the logicalComponent definition Producer<Component> componentProducer = component.getProducers().get(name); if (componentProducer != null) { for (URI uri : componentProducer.getTargets()) { addTarget(logicalProducer, uri, logicalComponent); } } else { for (URI uri : producer.getTargets()) { addTarget(logicalProducer, uri, logicalComponent); } } logicalComponent.addProducer(logicalProducer); } }
private <T> LogicalProducer createProducer(Class<T> interfaze, URI channelUri) throws Fabric3Exception { JavaServiceContract contract = introspector.introspect(interfaze); LogicalCompositeComponent domain = lcm.getDomainComposite(); String root = domain.getUri().toString(); LogicalComponent<NonManagedImplementation> logicalComponent = createComponent(interfaze, domain, root); Producer producer = new Producer("producer", contract); int pos = counter.getAndIncrement(); LogicalProducer logicalProducer = new LogicalProducer(URI.create(root + "/F3Synthetic#producer" + pos), producer, logicalComponent); logicalProducer.setServiceContract(contract); logicalProducer.addTarget(channelUri); return logicalProducer; }
/** * Add a producer and its associated injection site. * * @param producer the producer to add * @param injectionSite the injection site for the producer */ public void add(Producer<ComponentType> producer, InjectionSite injectionSite) { super.add(producer); Injectable injectable = new Injectable(InjectableType.PRODUCER, producer.getName()); addInjectionSite(injectionSite, injectable); injectionSiteMapping.put(producer, injectionSite); }
private void processTargets(org.fabric3.api.annotation.Producer annotation, Producer producer, AnnotatedElement element, Class<?> clazz, IntrospectionContext context) { try { if (annotation.targets().length > 0) { for (String target : annotation.targets()) { producer.addTarget(new URI(target)); } } else if (annotation.target().length() > 0) { producer.addTarget(new URI(annotation.target())); } } catch (URISyntaxException e) { InvalidAnnotation error = new InvalidAnnotation("Invalid producer target on : " + clazz.getName(), element, annotation, clazz, e); context.addError(error); } }
private List<PhysicalChannelConnection> generateDirectConnections(LogicalProducer producer, Map<LogicalChannel, DeliveryType> channels, PhysicalConnectionSource source, ClassLoader classLoader) { List<PhysicalChannelConnection> connections = new ArrayList<>(); Class<?> type = producer.getDefinition().getServiceContract().getInterfaceClass(); for (Map.Entry<LogicalChannel, DeliveryType> entry : channels.entrySet()) { LogicalChannel channel = entry.getKey(); if (!channel.isBound()) { PhysicalChannelConnection producerConnection = generateLocalConnection(producer, type, channel, source, classLoader); connections.add(producerConnection); } else { DeliveryType deliveryType = entry.getValue(); PhysicalChannelConnection bindingConnection = generateDirectBoundConnection(producer, channel, deliveryType, classLoader, source); connections.add(bindingConnection); } } return connections; }
private void createProducers(Component<?> component, LogicalComponent<?> logicalComponent, ComponentType componentType) { for (Producer<ComponentType> producer : componentType.getProducers().values()) { String name = producer.getName(); URI producerUri = logicalComponent.getUri().resolve('#' + name); LogicalProducer logicalProducer = new LogicalProducer(producerUri, producer, logicalComponent); // producer is configured in the logicalComponent definition Producer<Component> componentProducer = component.getProducers().get(name); if (componentProducer != null) { for (URI uri : componentProducer.getTargets()) { addTarget(logicalProducer, uri, logicalComponent); } } else { for (URI uri : producer.getTargets()) { addTarget(logicalProducer, uri, logicalComponent); } } logicalComponent.addProducer(logicalProducer); } }
private <T> LogicalProducer createProducer(Class<T> interfaze, URI channelUri) throws Fabric3Exception { JavaServiceContract contract = introspector.introspect(interfaze); LogicalCompositeComponent domain = lcm.getDomainComposite(); String root = domain.getUri().toString(); LogicalComponent<NonManagedImplementation> logicalComponent = createComponent(interfaze, domain, root); Producer producer = new Producer("producer", contract); int pos = counter.getAndIncrement(); LogicalProducer logicalProducer = new LogicalProducer(URI.create(root + "/F3Synthetic#producer" + pos), producer, logicalComponent); logicalProducer.setServiceContract(contract); logicalProducer.addTarget(channelUri); return logicalProducer; }
public PhysicalConnectionSource generateConnectionSource(LogicalProducer producer) throws Fabric3Exception { String producerName = producer.getDefinition().getName(); URI uri = producer.getParent().getUri(); JavaServiceContract serviceContract = (JavaServiceContract) producer.getDefinition().getServiceContract(); return new SpringConnectionSource(producerName, serviceContract.getInterfaceClass(), uri); }
private List<PhysicalChannelConnection> generateDirectConnections(LogicalProducer producer, Map<LogicalChannel, DeliveryType> channels, PhysicalConnectionSource source, ClassLoader classLoader) { List<PhysicalChannelConnection> connections = new ArrayList<>(); Class<?> type = producer.getDefinition().getServiceContract().getInterfaceClass(); for (Map.Entry<LogicalChannel, DeliveryType> entry : channels.entrySet()) { LogicalChannel channel = entry.getKey(); if (!channel.isBound()) { PhysicalChannelConnection producerConnection = generateLocalConnection(producer, type, channel, source, classLoader); connections.add(producerConnection); } else { DeliveryType deliveryType = entry.getValue(); PhysicalChannelConnection bindingConnection = generateDirectBoundConnection(producer, channel, deliveryType, classLoader, source); connections.add(bindingConnection); } } return connections; }
private Producer<ComponentType> createProducer(String name, Type type, Class<?> implClass, InjectingComponentType componentType, Member member, IntrospectionContext context) { TypeMapping typeMapping = context.getTypeMapping(implClass); Class<?> baseType = helper.getBaseType(type, typeMapping); ServiceContract contract = contractProcessor.introspect(baseType, implClass, context, componentType); if (contract.getOperations().isEmpty()) { String interfaceName = contract.getInterfaceName(); InvalidProducerInterface error = new InvalidProducerInterface("Producer interfaces must have at least one method: " + interfaceName, member, componentType); context.addError(error); } return new Producer<>(name, contract); }
public PhysicalConnectionSource generateConnectionSource(LogicalProducer producer) throws Fabric3Exception { String producerName = producer.getDefinition().getName(); URI uri = producer.getParent().getUri(); JavaServiceContract serviceContract = (JavaServiceContract) producer.getDefinition().getServiceContract(); return new SpringConnectionSource(producerName, serviceContract.getInterfaceClass(), uri); }
public void generateConnectionSource(JavaConnectionSource source, LogicalProducer producer) { URI uri = producer.getUri(); source.setUri(uri); ServiceContract serviceContract = producer.getDefinition().getServiceContract(); Class<?> interfaze = serviceContract.getInterfaceClass(); source.setInjectable(new Injectable(InjectableType.PRODUCER, uri.getFragment())); source.setServiceInterface(interfaze); }
Producer definition = new Producer(name, contract); type.add(definition); return true;
public PhysicalConnectionSource generateConnectionSource(LogicalProducer producer) { SystemConnectionSource source = new SystemConnectionSource(); URI uri = producer.getUri(); JavaServiceContract serviceContract = (JavaServiceContract) producer.getDefinition().getServiceContract(); source.setUri(uri); source.setInjectable(new Injectable(InjectableType.PRODUCER, uri.getFragment())); source.setServiceInterface(serviceContract.getInterfaceClass()); return source; }
Producer definition = new Producer(name, contract); type.add(definition); return true;
Producer definition = componentType.getProducers().get(name); if (definition != null) { ServiceContract source = definition.getServiceContract(); ServiceContract target = entry.getValue().getServiceContract(); MatchResult result = matcher.isAssignableFrom(source, target, false); if (!result.isAssignable()) {