summaryrefslogtreecommitdiffstats
path: root/sca-java-2.x/tags/2.0-Beta2-RC1/modules/implementation-java-runtime/src/main/java/org/apache/tuscany/sca/implementation/java/invocation/JavaAsyncImplementationInvoker.java
diff options
context:
space:
mode:
Diffstat (limited to 'sca-java-2.x/tags/2.0-Beta2-RC1/modules/implementation-java-runtime/src/main/java/org/apache/tuscany/sca/implementation/java/invocation/JavaAsyncImplementationInvoker.java')
-rw-r--r--sca-java-2.x/tags/2.0-Beta2-RC1/modules/implementation-java-runtime/src/main/java/org/apache/tuscany/sca/implementation/java/invocation/JavaAsyncImplementationInvoker.java233
1 files changed, 0 insertions, 233 deletions
diff --git a/sca-java-2.x/tags/2.0-Beta2-RC1/modules/implementation-java-runtime/src/main/java/org/apache/tuscany/sca/implementation/java/invocation/JavaAsyncImplementationInvoker.java b/sca-java-2.x/tags/2.0-Beta2-RC1/modules/implementation-java-runtime/src/main/java/org/apache/tuscany/sca/implementation/java/invocation/JavaAsyncImplementationInvoker.java
deleted file mode 100644
index 259e3a66ad..0000000000
--- a/sca-java-2.x/tags/2.0-Beta2-RC1/modules/implementation-java-runtime/src/main/java/org/apache/tuscany/sca/implementation/java/invocation/JavaAsyncImplementationInvoker.java
+++ /dev/null
@@ -1,233 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.tuscany.sca.implementation.java.invocation;
-
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-
-import org.apache.tuscany.sca.core.factory.InstanceWrapper;
-import org.apache.tuscany.sca.core.factory.ObjectCreationException;
-import org.apache.tuscany.sca.core.invocation.AsyncResponseException;
-import org.apache.tuscany.sca.interfacedef.DataType;
-import org.apache.tuscany.sca.interfacedef.InterfaceContract;
-import org.apache.tuscany.sca.interfacedef.Operation;
-import org.apache.tuscany.sca.interfacedef.java.JavaOperation;
-import org.apache.tuscany.sca.invocation.InterceptorAsync;
-import org.apache.tuscany.sca.invocation.Invoker;
-import org.apache.tuscany.sca.invocation.InvokerAsyncResponse;
-import org.apache.tuscany.sca.invocation.Message;
-import org.apache.tuscany.sca.runtime.RuntimeComponent;
-import org.oasisopen.sca.ResponseDispatch;
-import org.oasisopen.sca.ServiceRuntimeException;
-
-/**
- * Responsible for asynchronously dispatching an invocation to a Java component
- * implementation instance
- *
- */
-public class JavaAsyncImplementationInvoker extends JavaImplementationInvoker implements InterceptorAsync {
-
- public JavaAsyncImplementationInvoker(Operation operation, Method method, RuntimeComponent component,
- InterfaceContract interfaceContract) {
- super( operation, method, component, interfaceContract);
- assert method != null : "Operation method cannot be null";
- assert ((JavaOperation) operation).isAsyncServer() : "Operation must be async";
- } // end constructor
-
- public Message invoke(Message msg) {
- Operation op = this.operation;
-
- Object payload = msg.getBody();
-
- // Save the current thread context classloader
- ClassLoader tccl = Thread.currentThread().getContextClassLoader();
-
- try {
- // The following call might create a new conversation, as a result, the msg.getConversationID() might
- // return a new value
- InstanceWrapper wrapper = scopeContainer.getWrapper(null);
-
- Object instance = wrapper.getInstance();
-
- // Set the TCCL to the classloader used to load the implementation class
- Thread.currentThread().setContextClassLoader(instance.getClass().getClassLoader());
-
- // For an async server method, there is an extra input parameter, which is a DispatchResponse instance
- // which is typed by the type of the response
- Class<?> responseType = op.getOutputType().getPhysical();
- ResponseDispatch<?> dispatch = ResponseDispatchImpl.newInstance(responseType, msg );
-
- Object ret;
- Object[] payload2;
- if (payload != null && !payload.getClass().isArray()) {
- payload2 = new Object[2];
- payload2[0] = payload;
- } else {
- payload2 = new Object[ ((Object[])payload).length + 1 ];
- for( int i = 0; i < ((Object[])payload).length; i++) {
- payload2[i] = ((Object[])payload)[i];
- } // end for
- }
- payload2[ payload2.length - 1 ] = dispatch;
-
- ret = method.invoke(instance, (Object[])payload2);
-
- throw new InvocationTargetException( new AsyncResponseException("AsyncResponse") );
-
- } catch (InvocationTargetException e) {
- Throwable cause = e.getTargetException();
- boolean isChecked = false;
- for (DataType<?> d : operation.getFaultTypes()) {
- if (d.getPhysical().isInstance(cause)) {
- isChecked = true;
- msg.setFaultBody(cause);
- break;
- }
- } // end for
-
- if (!isChecked) {
- if (cause instanceof RuntimeException) {
- throw (RuntimeException)cause;
- }
- if (cause instanceof Error) {
- throw (Error)cause;
- } else {
- throw new ServiceRuntimeException(cause.getMessage(), cause);
- }
- } // end if
-
- } catch (ObjectCreationException e) {
- throw new ServiceRuntimeException(e.getMessage(), e);
- } catch (Exception e) {
- msg.setFaultBody(e);
- } finally {
- // set the tccl
- Thread.currentThread().setContextClassLoader(tccl);
- }
- return msg;
- } // end method invoke
-
- protected Invoker next;
- protected InvokerAsyncResponse previous;
-
- public void setNext(Invoker next) {
- this.next = next;
- }
-
- public Invoker getNext() {
- return next;
- }
-
- public void invokeAsyncRequest(Message msg) throws Throwable {
- processRequest(msg);
- } // end method invokeAsyncRequest
-
- public void invokeAsyncResponse(Message msg) {
- msg = processResponse(msg);
- InvokerAsyncResponse thePrevious = (InvokerAsyncResponse)getPrevious();
- if (thePrevious != null ) thePrevious.invokeAsyncResponse(msg);
- } // end method invokeAsyncResponse
-
- public void setPrevious(InvokerAsyncResponse previous) {
- this.previous = previous;
- }
-
- public InvokerAsyncResponse getPrevious() {
- return previous;
- }
-
- public Message processRequest(Message msg) {
- Operation op = this.operation;
- Object payload = msg.getBody();
-
- // Replace TCCL with the class loader used to load the java class as per SCA Spec
- ClassLoader tccl = Thread.currentThread().getContextClassLoader();
-
- try {
- InstanceWrapper wrapper = scopeContainer.getWrapper(null);
- Object instance = wrapper.getInstance();
-
- // Set the TCCL to the classloader used to load the implementation class
- Thread.currentThread().setContextClassLoader(instance.getClass().getClassLoader());
-
- // For an async server method, there is an extra input parameter, which is a DispatchResponse instance
- // which is typed by the type of the response
- Class<?> responseType = op.getOutputType().getPhysical();
- ResponseDispatch<?> dispatch = ResponseDispatchImpl.newInstance(responseType, msg );
-
- Object[] payload2;
- if (payload != null && !payload.getClass().isArray()) {
- payload2 = new Object[2];
- payload2[0] = payload;
- } else {
- payload2 = new Object[ ((Object[])payload).length + 1 ];
- for( int i = 0; i < ((Object[])payload).length; i++) {
- payload2[i] = ((Object[])payload)[i];
- } // end for
- }
- payload2[ payload2.length - 1 ] = dispatch;
-
- method.invoke(instance, (Object[])payload2);
-
- } catch (InvocationTargetException e) {
- Throwable cause = e.getTargetException();
- boolean isChecked = false;
- for (DataType<?> d : operation.getFaultTypes()) {
- if (d.getPhysical().isInstance(cause)) {
- isChecked = true;
- // Ignore these errors since they should be returned asynchronously
- break;
- }
- } // end for
-
- if (!isChecked) {
- if (cause instanceof RuntimeException) {
- throw (RuntimeException)cause;
- } // end if
- if (cause instanceof Error) {
- throw (Error)cause;
- } else {
- throw new ServiceRuntimeException(cause.getMessage(), cause);
- } // end if
- } // end if
-
- } catch (Exception e) {
- throw new ServiceRuntimeException(e.getMessage(), e);
- } finally {
- // set the tccl
- Thread.currentThread().setContextClassLoader(tccl);
- }
- return msg;
- } // end method processRequest
-
- public Message postProcessRequest(Message msg) {
- return msg;
- }
-
- public Message postProcessRequest(Message msg, Throwable e)
- throws Throwable {
- throw e;
- }
-
- public Message processResponse(Message msg) {
- return msg;
- } // end method processResponse
-
-} // end class JavaAsyncImplementationInvoker