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