List<Policy> requiresImpl = null;
try {
requiresImpl = getPolicyRequirements(component.getImplementation());
} catch (Exception e) {
throw new SwitchYardException(e);
}
Implementation impl = new Implementation(component.getImplementation());
List<ServiceReference> references = new LinkedList<ServiceReference>();
// register a reference for each one declared in the component
for (ComponentReferenceModel reference : component.getReferences()) {
// Create the reference name qualified with component name to ensure uniqueness
QName refName = ComponentNames.qualify(component.getQName(), reference.getQName());
_log.debug("Registering reference " + refName + " for component "
+ component.getImplementation().getType() + " for deployment " + getName());
// Component Reference bindings not allowed, check to see if we find one and throw an exception
List<Model> models = reference.getModelChildren();
for (Model model : models) {
if (BindingModel.class.isAssignableFrom(model.getClass())) {
throw BaseDeployMessages.MESSAGES.componentReferenceBindingsNotAllowed(model.toString(), reference.toString());
}
}
List<Policy> requires = null;
try {
requires = getPolicyRequirements(reference);
} catch (Exception e) {
throw BaseDeployMessages.MESSAGES.unableCollectRequirements(reference.toString(), e);
}
processPolicyDependency(requires, requiresImpl);
validatePolicy(requires, requiresImpl);
ServiceInterface refIntf = getComponentReferenceInterface(reference);
ServiceMetadata metadata = ServiceMetadataBuilder.create()
.security(getDomain().getServiceSecurity(reference.getSecurity()))
.requiredPolicies(requires).registrant(impl)
.build();
ServiceReference svcRef = getDomain().registerServiceReference(refName, refIntf, null, metadata);
boolean wired = false;
// wire a reference if the name is different from promoted name
compositeReferenceLoop: for (CompositeReferenceModel compositeReference : getConfig().getComposite().getReferences()) {
for (ComponentReferenceModel componentReference : compositeReference.getComponentReferences()) {
if (componentReference != null && componentReference.equals(reference)) {
if (!componentReference.getQName().equals(compositeReference.getQName())) {
svcRef.wire(compositeReference.getQName());
wired = true;
break compositeReferenceLoop;
}
}
}
}
// if we didn't wire to a promoted reference, then default to unqualified service name
if (!wired) {
svcRef.wire(ComponentNames.unqualify(svcRef));
}
references.add(svcRef);
}
// register a service for each one declared in the component
if (component.getServices().size() > 1) {
throw BaseDeployMessages.MESSAGES.multipleServicesFound(component.getName());
} else if (component.getServices().size() == 1) {
ComponentServiceModel service = component.getServices().get(0);
_log.debug("Registering service " + service.getQName()
+ " for component " + component.getImplementation().getType() + " for deployment " + getName());
// Component Service bindings not allowed, check to see if we find one and throw an exception
List<Model> models = service.getModelChildren();
for (Model model : models) {
if (BindingModel.class.isAssignableFrom(model.getClass())) {
throw BaseDeployMessages.MESSAGES.componentServiceBindingsNotAllowed(model.toString(), service.toString());
}
}
List<Policy> requires = null;
try {
requires = getPolicyRequirements(service);
processPolicyDependency(requires, requiresImpl);
validatePolicy(requires, requiresImpl);
} catch (Exception e) {
throw new SwitchYardException(e);
}
requires.addAll(requiresImpl);
ServiceHandler handler = activator.activateService(service.getQName(), component);
Activation activation = new Activation(activator, component.getQName(), null, handler);