You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by ri...@apache.org on 2006/08/31 20:36:51 UTC
svn commit: r439003 - in /incubator/tuscany/java/sca:
bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/
core/src/main/java/org/apache/tuscany/core/implementation/processor/
core/src/main/java/org/apache/tuscany/core/implementation/...
Author: rineholt
Date: Thu Aug 31 11:36:50 2006
New Revision: 439003
URL: http://svn.apache.org/viewvc?rev=439003&view=rev
Log:
Support optional autowire
http://www.mail-archive.com/tuscany-dev%40ws.apache.org/msg07237.html
Modified:
incubator/tuscany/java/sca/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/Axis2BindingBuilder.java
incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/implementation/processor/ImplementationProcessorServiceImpl.java
incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/implementation/processor/ReferenceProcessor.java
incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/implementation/system/builder/SystemBindingBuilder.java
incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/implementation/system/builder/SystemComponentBuilder.java
incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/implementation/system/wire/SystemOutboundAutowire.java
incubator/tuscany/java/sca/core/src/test/java/org/apache/tuscany/core/implementation/system/wire/SystemOutboundAutowireTestCase.java
incubator/tuscany/java/sca/spi/src/main/java/org/apache/tuscany/spi/annotation/Autowire.java
Modified: incubator/tuscany/java/sca/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/Axis2BindingBuilder.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/Axis2BindingBuilder.java?rev=439003&r1=439002&r2=439003&view=diff
==============================================================================
--- incubator/tuscany/java/sca/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/Axis2BindingBuilder.java (original)
+++ incubator/tuscany/java/sca/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/Axis2BindingBuilder.java Thu Aug 31 11:36:50 2006
@@ -48,7 +48,7 @@
initAxis();
}
- @Autowire()
+ @Autowire(required=false)
public void setServletHost(ServletHost servletHost) {
this.servletHost = servletHost;
}
Modified: incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/implementation/processor/ImplementationProcessorServiceImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/implementation/processor/ImplementationProcessorServiceImpl.java?rev=439003&r1=439002&r2=439003&view=diff
==============================================================================
--- incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/implementation/processor/ImplementationProcessorServiceImpl.java (original)
+++ incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/implementation/processor/ImplementationProcessorServiceImpl.java Thu Aug 31 11:36:50 2006
@@ -196,6 +196,9 @@
+ (pos + 1));
}
reference.setName(name);
+
+ reference.setRequired(autowireAnnot.required());
+
ServiceContract<?> contract = new JavaServiceContract();
contract.setInterfaceClass(param);
reference.setServiceContract(contract);
Modified: incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/implementation/processor/ReferenceProcessor.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/implementation/processor/ReferenceProcessor.java?rev=439003&r1=439002&r2=439003&view=diff
==============================================================================
--- incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/implementation/processor/ReferenceProcessor.java (original)
+++ incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/implementation/processor/ReferenceProcessor.java Thu Aug 31 11:36:50 2006
@@ -58,17 +58,24 @@
DeploymentContext context)
throws ProcessingException {
Reference annotation = method.getAnnotation(Reference.class);
- boolean autowire = method.getAnnotation(Autowire.class) != null;
- if (annotation == null && !autowire) {
- return;
+ Autowire autowire = method.getAnnotation(Autowire.class);
+ boolean isAutowire= autowire != null;
+ if (annotation == null && !isAutowire) {
+ return; //Not a reference or autowire annotation.
}
if (method.getParameterTypes().length != 1) {
IllegalReferenceException e = new IllegalReferenceException("Setter must have one parameter");
e.setIdentifier(method.toString());
throw e;
}
- String name = null;
+ //process autowire required first let reference override. or if conflicting should this fault?
boolean required = false;
+ if(isAutowire) {
+ required= autowire.required();
+ }
+
+ String name = null;
+
if (annotation != null) {
if (annotation.name() != null && annotation.name().length() > 0) {
name = annotation.name();
@@ -84,9 +91,10 @@
if (type.getReferences().get(name) != null) {
throw new DuplicateReferenceException(name);
}
+
JavaMappedReference reference = new JavaMappedReference();
reference.setMember(method);
- reference.setAutowire(autowire);
+ reference.setAutowire(isAutowire);
reference.setRequired(required);
reference.setName(name);
ServiceContract contract;
Modified: incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/implementation/system/builder/SystemBindingBuilder.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/implementation/system/builder/SystemBindingBuilder.java?rev=439003&r1=439002&r2=439003&view=diff
==============================================================================
--- incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/implementation/system/builder/SystemBindingBuilder.java (original)
+++ incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/implementation/system/builder/SystemBindingBuilder.java Thu Aug 31 11:36:50 2006
@@ -76,7 +76,8 @@
SystemReferenceImpl reference = new SystemReferenceImpl(boundReferenceDefinition.getName(), interfaze, parent);
SystemInboundWire<?> inboundWire = new SystemInboundWireImpl(boundReferenceDefinition.getName(), interfaze);
String refName = boundReferenceDefinition.getName();
- OutboundWire outboundWire = new SystemOutboundAutowire(refName, interfaze, autowireComponent);
+ OutboundWire outboundWire = new SystemOutboundAutowire(refName, interfaze,
+ autowireComponent, boundReferenceDefinition.isRequired());
reference.setInboundWire(inboundWire);
reference.setOutboundWire(outboundWire);
return reference;
Modified: incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/implementation/system/builder/SystemComponentBuilder.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/implementation/system/builder/SystemComponentBuilder.java?rev=439003&r1=439002&r2=439003&view=diff
==============================================================================
--- incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/implementation/system/builder/SystemComponentBuilder.java (original)
+++ incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/implementation/system/builder/SystemComponentBuilder.java Thu Aug 31 11:36:50 2006
@@ -138,7 +138,7 @@
Class interfaze = referenceDefiniton.getServiceContract().getInterfaceClass();
OutboundWire<?> wire;
if (referenceDefiniton.isAutowire()) {
- wire = new SystemOutboundAutowire(referenceName, interfaze, autowireContext);
+ wire = new SystemOutboundAutowire(referenceName, interfaze, autowireContext, referenceDefiniton.isRequired());
} else {
//FIXME support multiplicity!
assert target.getTargets().size() == 1 : "Multiplicity not yet implemented";
@@ -151,7 +151,7 @@
for (ReferenceDefinition reference : componentType.getReferences().values()) {
if (reference.isAutowire()) {
Class interfaze = reference.getServiceContract().getInterfaceClass();
- OutboundWire<?> wire = new SystemOutboundAutowire(reference.getName(), interfaze, autowireContext);
+ OutboundWire<?> wire = new SystemOutboundAutowire(reference.getName(), interfaze, autowireContext, reference.isRequired());
component.addOutboundWire(wire);
}
}
Modified: incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/implementation/system/wire/SystemOutboundAutowire.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/implementation/system/wire/SystemOutboundAutowire.java?rev=439003&r1=439002&r2=439003&view=diff
==============================================================================
--- incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/implementation/system/wire/SystemOutboundAutowire.java (original)
+++ incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/implementation/system/wire/SystemOutboundAutowire.java Thu Aug 31 11:36:50 2006
@@ -43,11 +43,15 @@
private String referenceName;
private ServiceContract serviceContract;
private AutowireComponent<?> component;
+ final private boolean required;
- public SystemOutboundAutowire(String referenceName, Class<T> businessInterface, AutowireComponent<?> component) {
+ public SystemOutboundAutowire(String referenceName, Class<T> businessInterface, AutowireComponent<?> component,
+ boolean required) {
+
this.referenceName = referenceName;
this.component = component;
serviceContract = new JavaServiceContract(businessInterface);
+ this.required= required;
}
public ServiceContract getServiceContract() {
@@ -76,7 +80,7 @@
public T getTargetService() throws TargetException {
Class interfaze = serviceContract.getInterfaceClass();
T service = (T) component.resolveInstance(interfaze);
- if (service == null) {
+ if (service == null && required) {
TargetNotFoundException e = new TargetNotFoundException("Autowire target not found");
e.setIdentifier(interfaze.getName());
throw e;
Modified: incubator/tuscany/java/sca/core/src/test/java/org/apache/tuscany/core/implementation/system/wire/SystemOutboundAutowireTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/core/src/test/java/org/apache/tuscany/core/implementation/system/wire/SystemOutboundAutowireTestCase.java?rev=439003&r1=439002&r2=439003&view=diff
==============================================================================
--- incubator/tuscany/java/sca/core/src/test/java/org/apache/tuscany/core/implementation/system/wire/SystemOutboundAutowireTestCase.java (original)
+++ incubator/tuscany/java/sca/core/src/test/java/org/apache/tuscany/core/implementation/system/wire/SystemOutboundAutowireTestCase.java Thu Aug 31 11:36:50 2006
@@ -18,7 +18,7 @@
AutowireComponent<?> component = createMock(AutowireComponent.class);
expect(component.resolveInstance(Object.class)).andReturn(new Object());
replay(component);
- SystemOutboundAutowire<Object> wire = new SystemOutboundAutowire<Object>("foo", Object.class, component);
+ SystemOutboundAutowire<Object> wire = new SystemOutboundAutowire<Object>("foo", Object.class, component, false);
assertNotNull(wire.getTargetService());
verify(component);
}
@@ -28,7 +28,7 @@
AutowireComponent<?> component = createMock(AutowireComponent.class);
expect(component.resolveInstance(Object.class)).andReturn(null);
replay(component);
- SystemOutboundAutowire<Object> wire = new SystemOutboundAutowire<Object>("foo", Object.class, component);
+ SystemOutboundAutowire<Object> wire = new SystemOutboundAutowire<Object>("foo", Object.class, component, true);
try {
wire.getTargetService();
fail();
@@ -38,4 +38,21 @@
verify(component);
}
+
+ public void testNonExistentAutowireNotRequired() {
+ AutowireComponent<?> component = createMock(AutowireComponent.class);
+ expect(component.resolveInstance(Object.class)).andReturn(null);
+ replay(component);
+ SystemOutboundAutowire<Object> wire = new SystemOutboundAutowire<Object>("foo", Object.class, component, false);
+ try {
+
+ assertNull(wire.getTargetService());
+
+ } catch (TargetNotFoundException e) {
+ fail();
+ }
+ verify(component);
+ }
+
+
}
Modified: incubator/tuscany/java/sca/spi/src/main/java/org/apache/tuscany/spi/annotation/Autowire.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/spi/src/main/java/org/apache/tuscany/spi/annotation/Autowire.java?rev=439003&r1=439002&r2=439003&view=diff
==============================================================================
--- incubator/tuscany/java/sca/spi/src/main/java/org/apache/tuscany/spi/annotation/Autowire.java (original)
+++ incubator/tuscany/java/sca/spi/src/main/java/org/apache/tuscany/spi/annotation/Autowire.java Thu Aug 31 11:36:50 2006
@@ -37,5 +37,10 @@
* The name of the autowire. If not specified then the name will be derived from the annotated field.
*/
String name() default "";
+
+ /**
+ * Indicates if a reference must be specified.
+ */
+ public boolean required() default true;
}
---------------------------------------------------------------------
To unsubscribe, e-mail: tuscany-commits-unsubscribe@ws.apache.org
For additional commands, e-mail: tuscany-commits-help@ws.apache.org