TUSCANY-2281 provide a api to allow service references to be retrieved for references where the multiplicity >1. Thanks to Daniel Stucky for the patch.
git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@696666 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
27e63932d2
commit
76c424d8d4
2 changed files with 73 additions and 0 deletions
java/sca/modules
core/src/main/java/org/apache/tuscany/sca/core/context
sca-api/src/main/java/org/osoa/sca
|
@ -21,6 +21,8 @@ package org.apache.tuscany.sca.core.context;
|
|||
import java.io.IOException;
|
||||
import java.io.Reader;
|
||||
import java.io.Writer;
|
||||
import java.util.Collection;
|
||||
import java.util.ArrayList;
|
||||
|
||||
import org.apache.tuscany.sca.assembly.AssemblyFactory;
|
||||
import org.apache.tuscany.sca.assembly.Binding;
|
||||
|
@ -107,6 +109,14 @@ public class ComponentContextImpl implements RuntimeComponentContext {
|
|||
try {
|
||||
for (ComponentReference ref : component.getReferences()) {
|
||||
if (referenceName.equals(ref.getName())) {
|
||||
/* ******************** Contribution for issue TUSCANY-2281 ******************** */
|
||||
Multiplicity multiplicity = ref.getMultiplicity();
|
||||
if( multiplicity == Multiplicity.ZERO_N || multiplicity == Multiplicity.ONE_N)
|
||||
{
|
||||
throw new IllegalArgumentException("Reference " + referenceName + " has multiplicity " + multiplicity);
|
||||
}
|
||||
/* ******************** Contribution for issue TUSCANY-2281 ******************** */
|
||||
|
||||
return getServiceReference(businessInterface, (RuntimeComponentReference)ref, null);
|
||||
}
|
||||
}
|
||||
|
@ -400,4 +410,43 @@ public class ComponentContextImpl implements RuntimeComponentContext {
|
|||
public void write(RuntimeComponentReference reference, Writer writer) throws IOException {
|
||||
compositeActivator.getComponentContextHelper().write(component, reference, writer);
|
||||
}
|
||||
|
||||
/* ******************** Contribution for issue TUSCANY-2281 ******************** */
|
||||
|
||||
/**
|
||||
* @see ComponentContext#getServices(Class<B>, String)
|
||||
*/
|
||||
public <B> Collection<B> getServices(Class<B> businessInterface, String referenceName) {
|
||||
ArrayList<B> services = new ArrayList<B>();
|
||||
Collection<ServiceReference<B>> serviceRefs = getServiceReferences(businessInterface, referenceName);
|
||||
for (ServiceReference<B> serviceRef : serviceRefs) {
|
||||
services.add(serviceRef.getService());
|
||||
}
|
||||
return services;
|
||||
}
|
||||
|
||||
/**
|
||||
* @see ComponentContext#getServiceReferences(Class<B>, String)
|
||||
*/
|
||||
public <B> Collection<ServiceReference<B>> getServiceReferences(Class<B> businessInterface, String referenceName) {
|
||||
try {
|
||||
for (ComponentReference ref : component.getReferences()) {
|
||||
if (referenceName.equals(ref.getName())) {
|
||||
ArrayList<ServiceReference<B>> serviceRefs = new ArrayList<ServiceReference<B>>();
|
||||
for(Binding binding : ref.getBindings())
|
||||
{
|
||||
serviceRefs.add( getServiceReference(businessInterface, (RuntimeComponentReference) ref, binding) );
|
||||
}
|
||||
return serviceRefs;
|
||||
}
|
||||
}
|
||||
throw new ServiceRuntimeException("Reference not found: " + referenceName);
|
||||
} catch (ServiceRuntimeException e) {
|
||||
throw e;
|
||||
} catch (Exception e) {
|
||||
throw new ServiceRuntimeException(e.getMessage(), e);
|
||||
}
|
||||
}
|
||||
/* ******************** Contribution for issue TUSCANY-2281 ******************** */
|
||||
|
||||
}
|
||||
|
|
|
@ -18,6 +18,8 @@
|
|||
*/
|
||||
package org.osoa.sca;
|
||||
|
||||
import java.util.Collection;
|
||||
|
||||
/**
|
||||
* Interface providing programmatic access to a component's SCA context as an alternative to injection.
|
||||
* It provides access to reference and property values for the component and provides a mechanism for
|
||||
|
@ -106,4 +108,26 @@ public interface ComponentContext {
|
|||
* @return the SCA request context; may be null
|
||||
*/
|
||||
RequestContext getRequestContext();
|
||||
|
||||
|
||||
/* ******************** Contribution for issue TUSCANY-2281 ******************** */
|
||||
|
||||
/**
|
||||
* Returns a Collection of typed service proxies for a business interface type and a reference name.
|
||||
* @param businessInterface the interface that will be used to invoke the service
|
||||
* @param referenceName the name of the reference
|
||||
* @param <B> the Java type of the business interface for the reference
|
||||
* @return a Collection of objects that implements the business interface
|
||||
*/
|
||||
<B> Collection<B> getServices(Class<B> businessInterface, String referenceName);
|
||||
|
||||
|
||||
/**
|
||||
* Returns a Collection of typed service reference for a business interface type and a reference name.
|
||||
* @param businessInterface the interface that will be used to invoke the service
|
||||
* @param referenceName the name of the reference
|
||||
* @param <B> the Java type of the business interface for the reference
|
||||
* @return a Collection of objects that implements the business interface
|
||||
*/
|
||||
<B> Collection<ServiceReference<B>> getServiceReferences(Class<B> businessInterface, String referenceName);
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue