You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by is...@apache.org on 2006/12/12 22:42:02 UTC
svn commit: r486333 - in /incubator/tuscany/java/sca/kernel/core/src:
main/java/org/apache/tuscany/core/implementation/
main/java/org/apache/tuscany/core/implementation/java/
main/java/org/apache/tuscany/core/wire/jdk/
test/java/org/apache/tuscany/core...
Author: isilval
Date: Tue Dec 12 13:42:01 2006
New Revision: 486333
URL: http://svn.apache.org/viewvc?view=rev&rev=486333
Log:
Adding check for NoRegisteredCallbackException
Modified:
incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/PojoAtomicComponent.java
incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/PojoConfiguration.java
incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/java/JavaComponentBuilder.java
incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/wire/jdk/JDKOutboundInvocationHandler.java
incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/java/integration/CallbackInvocationTestCase.java
Modified: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/PojoAtomicComponent.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/PojoAtomicComponent.java?view=diff&rev=486333&r1=486332&r2=486333
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/PojoAtomicComponent.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/PojoAtomicComponent.java Tue Dec 12 13:42:01 2006
@@ -62,6 +62,7 @@
protected Map<String, Member> propertySites;
protected Map<String, Member> callbackSites;
protected List<Injector<Object>> injectors;
+ protected Class implementationClass;
public PojoAtomicComponent(PojoConfiguration configuration) {
super(configuration.getName(),
@@ -89,6 +90,7 @@
: new HashMap<String, Member>();
callbackSites = configuration.getCallbackSite() != null ? configuration.getCallbackSite()
: new HashMap<String, Member>();
+ implementationClass = configuration.getImplementationClass();
}
public List<Class<?>> getServiceInterfaces() {
@@ -248,4 +250,14 @@
protected abstract ObjectFactory<?> createWireFactory(RuntimeWire wire);
+ public boolean implementsCallback(Class callbackClass) {
+ Class<?>[] implementedInterfaces = implementationClass.getInterfaces();
+ for (int i = 0; i < implementedInterfaces.length; i++) {
+ if (implementedInterfaces[i].isAssignableFrom(callbackClass)) {
+ return true;
+ }
+ }
+
+ return false;
+ }
}
Modified: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/PojoConfiguration.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/PojoConfiguration.java?view=diff&rev=486333&r1=486332&r2=486333
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/PojoConfiguration.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/PojoConfiguration.java Tue Dec 12 13:42:01 2006
@@ -62,6 +62,7 @@
private ExecutionMonitor monitor;
private long maxIdleTime = -1;
private long maxAge = -1;
+ private Class implementationClass;
public String getName() {
return name;
@@ -225,5 +226,13 @@
public void setMonitor(ExecutionMonitor monitor) {
this.monitor = monitor;
+ }
+
+ public Class getImplementationClass() {
+ return implementationClass;
+ }
+
+ public void setImplementationClass(Class implementationClass) {
+ this.implementationClass = implementationClass;
}
}
Modified: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/java/JavaComponentBuilder.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/java/JavaComponentBuilder.java?view=diff&rev=486333&r1=486332&r2=486333
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/java/JavaComponentBuilder.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/java/JavaComponentBuilder.java Tue Dec 12 13:42:01 2006
@@ -97,6 +97,8 @@
configuration.setWireService(wireService);
configuration.setWorkContext(workContext);
configuration.setScheduler(workScheduler);
+
+ configuration.setImplementationClass(definition.getImplementation().getImplementationClass());
// setup property injection sites
for (JavaMappedProperty<?> property : componentType.getProperties().values()) {
Modified: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/wire/jdk/JDKOutboundInvocationHandler.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/wire/jdk/JDKOutboundInvocationHandler.java?view=diff&rev=486333&r1=486332&r2=486333
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/wire/jdk/JDKOutboundInvocationHandler.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/wire/jdk/JDKOutboundInvocationHandler.java Tue Dec 12 13:42:01 2006
@@ -29,9 +29,11 @@
import java.util.Map;
import java.util.UUID;
+import org.apache.tuscany.core.implementation.PojoAtomicComponent;
import org.apache.tuscany.spi.component.ReactivationException;
import org.apache.tuscany.spi.component.SCAExternalizable;
import org.apache.tuscany.spi.component.AtomicComponent;
+import org.apache.tuscany.spi.component.SCAObject;
import org.apache.tuscany.spi.component.TargetException;
import org.apache.tuscany.spi.component.WorkContext;
import static org.apache.tuscany.spi.idl.java.JavaIDLUtils.findMethod;
@@ -44,6 +46,7 @@
import org.apache.tuscany.spi.wire.OutboundWire;
import org.apache.tuscany.spi.wire.TargetInvoker;
import org.apache.tuscany.spi.wire.WireInvocationHandler;
+import org.osoa.sca.NoRegisteredCallbackException;
/**
@@ -66,7 +69,10 @@
private transient Map<Method, ChainHolder> chains;
private transient WorkContext workContext;
private transient Object fromAddress;
+ private transient boolean wireContainerIsAtomicComponent;
private transient boolean contractHasCallback;
+ private transient boolean callbackIsImplemented;
+ private transient String callbackClassName;
private transient boolean contractIsRemotable;
private transient boolean contractIsConversational;
private transient String convIdForRemotableTarget;
@@ -129,6 +135,11 @@
assert chain != null;
invoker = chain.getTargetInvoker();
}
+
+ if(wireContainerIsAtomicComponent && contractHasCallback && !callbackIsImplemented) {
+ throw new NoRegisteredCallbackException("Instance is does not implement callback: "
+ + callbackClassName);
+ }
if (contractIsConversational) {
assert workContext != null : "Work context cannot be null for conversational invocation";
@@ -200,10 +211,22 @@
private void init(OutboundWire wire) {
ServiceContract contract = wire.getServiceContract();
this.referenceName = wire.getReferenceName();
- this.fromAddress = (wire.getContainer() == null) ? null : wire.getContainer().getName();
+ SCAObject wireContainer = wire.getContainer();
+ this.fromAddress = (wireContainer == null) ? null : wireContainer.getName();
this.contractIsConversational = contract.getInteractionScope().equals(CONVERSATIONAL);
this.contractIsRemotable = contract.isRemotable();
this.contractHasCallback = contract.getCallbackClass() != null;
+ if (contractHasCallback) {
+ this.callbackClassName = contract.getCallbackClass().getName();
+ } else {
+ this.callbackClassName = null;
+ }
+ this.wireContainerIsAtomicComponent = wireContainer != null && wireContainer instanceof PojoAtomicComponent;
+ if (wireContainerIsAtomicComponent && contractHasCallback) {
+ this.callbackIsImplemented = ((PojoAtomicComponent)wireContainer).implementsCallback(contract.getCallbackClass());
+ } else {
+ this.callbackIsImplemented = false;
+ }
Map<Operation<?>, OutboundInvocationChain> invocationChains = wire.getInvocationChains();
this.chains = new HashMap<Method, ChainHolder>(invocationChains.size());
// TODO optimize this
Modified: incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/java/integration/CallbackInvocationTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/java/integration/CallbackInvocationTestCase.java?view=diff&rev=486333&r1=486332&r2=486333
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/java/integration/CallbackInvocationTestCase.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/java/integration/CallbackInvocationTestCase.java Tue Dec 12 13:42:01 2006
@@ -129,7 +129,12 @@
connector.connect(clientComponent);
FooPlainClient client = (FooPlainClient) clientComponent.getServiceInstance();
- client.invoke();
+ try {
+ client.invoke();
+ fail();
+ } catch (NoRegisteredCallbackException e) {
+ // expected
+ }
}
/**
---------------------------------------------------------------------
To unsubscribe, e-mail: tuscany-commits-unsubscribe@ws.apache.org
For additional commands, e-mail: tuscany-commits-help@ws.apache.org