diff options
author | jsdelfino <jsdelfino@13f79535-47bb-0310-9956-ffa450edef68> | 2008-09-22 00:52:08 +0000 |
---|---|---|
committer | jsdelfino <jsdelfino@13f79535-47bb-0310-9956-ffa450edef68> | 2008-09-22 00:52:08 +0000 |
commit | 2b2c1fcfbfd7d4e326bae0929f040fdc1d6490e9 (patch) | |
tree | b6f58a6529ccdcd3f47fb9b51faf06f8e9883251 /branches/sca-equinox/modules/binding-corba-runtime/src/main/java/org/apache/tuscany/sca/binding/corba/impl/reference | |
parent | bd2bf3aee8b3ccbc9a9dd647aaf1a32e430bca26 (diff) |
Refactored corba binding runtime to use different packages from the model, and get OSGi imports/exports to work.
git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@697647 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'branches/sca-equinox/modules/binding-corba-runtime/src/main/java/org/apache/tuscany/sca/binding/corba/impl/reference')
4 files changed, 0 insertions, 427 deletions
diff --git a/branches/sca-equinox/modules/binding-corba-runtime/src/main/java/org/apache/tuscany/sca/binding/corba/impl/reference/DynaCorbaRequest.java b/branches/sca-equinox/modules/binding-corba-runtime/src/main/java/org/apache/tuscany/sca/binding/corba/impl/reference/DynaCorbaRequest.java deleted file mode 100644 index 3936bed9f6..0000000000 --- a/branches/sca-equinox/modules/binding-corba-runtime/src/main/java/org/apache/tuscany/sca/binding/corba/impl/reference/DynaCorbaRequest.java +++ /dev/null @@ -1,253 +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.binding.corba.impl.reference; - -import java.lang.annotation.Annotation; -import java.lang.reflect.Method; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import org.apache.tuscany.sca.binding.corba.impl.exceptions.CorbaException; -import org.apache.tuscany.sca.binding.corba.impl.exceptions.RequestConfigurationException; -import org.apache.tuscany.sca.binding.corba.impl.types.TypeTree; -import org.apache.tuscany.sca.binding.corba.impl.types.TypeTreeCreator; -import org.apache.tuscany.sca.binding.corba.impl.types.util.TypeHelpersProxy; -import org.apache.tuscany.sca.binding.corba.impl.types.util.Utils; -import org.apache.tuscany.sca.binding.corba.impl.util.MethodFinder; -import org.omg.CORBA.BAD_OPERATION; -import org.omg.CORBA.BAD_PARAM; -import org.omg.CORBA.Object; -import org.omg.CORBA.SystemException; -import org.omg.CORBA.portable.ApplicationException; -import org.omg.CORBA.portable.InputStream; -import org.omg.CORBA.portable.ObjectImpl; -import org.omg.CORBA.portable.OutputStream; - -/** - * @version $Rev$ $Date$ Represents single CORBA request - */ -public class DynaCorbaRequest { - - private TypeTree returnTree; - private Map<String, TypeTree> exceptions = new HashMap<String, TypeTree>(); - private InputStream inputStream; - private ObjectImpl remoteObject; - private String operation; - private List<java.lang.Object> arguments = new ArrayList<java.lang.Object>(); - private List<TypeTree> argumentsTypes = new ArrayList<TypeTree>(); - private Class<?> referenceClass; - private Map<Method, String> operationsMap; - - /** - * Creates request. - * - * @param ObjectremoteObject remote object reference - * @param operation operation to invoke - * @param scaBindingRules apply SCA default binding mapping rules - */ - public DynaCorbaRequest(Object remoteObject, String operation) { - this.remoteObject = (ObjectImpl)remoteObject; - this.operation = operation; - } - - /** - * Sets class which will be backed by this reference request - * @param referenceClass - */ - public void setReferenceClass(Class<?> referenceClass) { - this.referenceClass = referenceClass; - } - - /** - * Sets method to operation names mapping - * @param operationsMap - */ - public void setOperationsMap(Map<Method, String> operationsMap) { - this.operationsMap = operationsMap; - } - - /** - * Adds operation argument - stores arguments and caches its TypeTree. Annotations will be set to null by default. - * - * @param argument - */ - public void addArgument(java.lang.Object argument) throws RequestConfigurationException { - addArgument(argument, null); - } - - /** - * Adds operation argument - stores arguments and caches its TypeTree - * - * @param argument - */ - public void addArgument(java.lang.Object argument, Annotation[] notes) throws RequestConfigurationException { - TypeTree tree = TypeTreeCreator.createTypeTree(argument.getClass(), notes); - argumentsTypes.add(tree); - arguments.add(argument); - } - - /** - * Passing stored arguments to CORBA communication output stream - * - * @param outputStream - * @throws RequestConfigurationException - */ - private void passArguments(OutputStream outputStream) throws RequestConfigurationException { - for (int i = 0; i < arguments.size(); i++) { - TypeTree tree = argumentsTypes.get(i); - TypeHelpersProxy.write(tree.getRootNode(), outputStream, arguments.get(i)); - } - } - - /** - * Sets return type for operation. Annotations will be set to null by default. - * - * @param forClass - */ - public void setOutputType(Class<?> forClass) throws RequestConfigurationException { - setOutputType(forClass, null); - } - - /** - * Sets return type for operation - * - * @param forClass - */ - public void setOutputType(Class<?> forClass, Annotation[] notes) throws RequestConfigurationException { - returnTree = TypeTreeCreator.createTypeTree(forClass, notes); - } - - /** - * Configures possible exceptions - * - * @param forClass - */ - public void addExceptionType(Class<?> forClass) throws RequestConfigurationException { - TypeTree tree = TypeTreeCreator.createTypeTree(forClass, null); - String exceptionId = Utils.getTypeId(forClass); - exceptions.put(exceptionId, tree); - } - - /** - * Handles application excpeition. - * - * @param ae occured exception - * @throws Exception - */ - private void handleApplicationException(ApplicationException ae) throws Exception { - try { - if (exceptions.size() == 0) { - RequestConfigurationException exception = - new RequestConfigurationException( - "ApplicationException occured, but no exception type was specified.", - ae.getId()); - throw exception; - } - InputStream is = ae.getInputStream(); - String exceptionId = is.read_string(); - TypeTree tree = exceptions.get(exceptionId); - if (tree == null) { - RequestConfigurationException exception = - new RequestConfigurationException( - "ApplicationException occured, but no such exception was defined", - ae.getId()); - throw exception; - } else { - Exception ex = (Exception)TypeHelpersProxy.read(tree.getRootNode(), is); - throw ex; - } - } catch (Exception e) { - throw e; - } - } - - /** - * Handles exceptions generated by CORBA API - * - * @param se - */ - private void handleSystemException(SystemException se) throws Exception { - if (se instanceof BAD_OPERATION) { - throw new CorbaException("Bad operation name: " + operation, se); - } else if (se instanceof BAD_PARAM) { - throw new CorbaException("Bad parameter", se); - } else { - // TODO: handle more system exception types - throw new CorbaException(se.getMessage(), se); - } - } - - /** - * Gets operation name which is includes mapping rules - * @return - */ - private String getFinalOperationName() { - String result = operation; - if (referenceClass != null) { - Class<?>[] argumentTypes = new Class<?>[arguments.size()]; - for (int i = 0; i < arguments.size(); i++) { - argumentTypes[i] = arguments.get(i).getClass(); - } - Method method = MethodFinder.findMethod(referenceClass, operation, argumentTypes); - String newOperation = (String)operationsMap.get(method); - if (newOperation != null) { - result = newOperation; - } - } - return result; - } - - /** - * Invokes previously configured request - * - * @return - */ - public DynaCorbaResponse invoke() throws Exception { - DynaCorbaResponse response = new DynaCorbaResponse(); - String finalOperationName = getFinalOperationName(); - OutputStream outputStream = ((ObjectImpl)remoteObject)._request(finalOperationName, true); - passArguments(outputStream); - try { - inputStream = remoteObject._invoke(outputStream); - if (inputStream != null && returnTree != null) { - response.setContent(TypeHelpersProxy.read(returnTree.getRootNode(), inputStream)); - } - } catch (ApplicationException ae) { - handleApplicationException(ae); - } catch (SystemException se) { - handleSystemException(se); - } catch (Exception e) { - throw e; - } finally { - release(); - } - return response; - } - - /** - * Releases request resources - */ - private void release() { - remoteObject._releaseReply(inputStream); - } - -} diff --git a/branches/sca-equinox/modules/binding-corba-runtime/src/main/java/org/apache/tuscany/sca/binding/corba/impl/reference/DynaCorbaResponse.java b/branches/sca-equinox/modules/binding-corba-runtime/src/main/java/org/apache/tuscany/sca/binding/corba/impl/reference/DynaCorbaResponse.java deleted file mode 100644 index 25463a7a8a..0000000000 --- a/branches/sca-equinox/modules/binding-corba-runtime/src/main/java/org/apache/tuscany/sca/binding/corba/impl/reference/DynaCorbaResponse.java +++ /dev/null @@ -1,39 +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.binding.corba.impl.reference; - -/** - * @version $Rev$ $Date$ - * Holder for content returned from DynaCorbaRequest - * - */ -public class DynaCorbaResponse { - - private Object content; - - public Object getContent() { - return content; - } - - public void setContent(Object content) { - this.content = content; - } - -} diff --git a/branches/sca-equinox/modules/binding-corba-runtime/src/main/java/org/apache/tuscany/sca/binding/corba/impl/reference/InterfaceInstanceCreator.java b/branches/sca-equinox/modules/binding-corba-runtime/src/main/java/org/apache/tuscany/sca/binding/corba/impl/reference/InterfaceInstanceCreator.java deleted file mode 100644 index 514d7055a8..0000000000 --- a/branches/sca-equinox/modules/binding-corba-runtime/src/main/java/org/apache/tuscany/sca/binding/corba/impl/reference/InterfaceInstanceCreator.java +++ /dev/null @@ -1,70 +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.binding.corba.impl.reference; - -import java.lang.reflect.Method; - -import net.sf.cglib.proxy.Callback; -import net.sf.cglib.proxy.CallbackFilter; -import net.sf.cglib.proxy.Enhancer; -import net.sf.cglib.proxy.MethodInterceptor; -import net.sf.cglib.proxy.NoOp; - -import org.omg.CORBA.Object; - -/** - * @version $Rev$ $Date$ - */ -public class InterfaceInstanceCreator { - - private static final CallbackFilter FILTER = new CallbackFilter() { - public int accept(Method method) { - return 1; - } - }; - - /** - * Dynamically creates instance of user defined interface. Instance is - * enhanced by RemoteMethodInterceptor - * - * @param reference - * CORBA reference - * @param forClass - * user defined interface - * @return dynamic implementation instance - */ - public static java.lang.Object createInstance(Object reference, Class<?> forClass) { - java.lang.Object result = null; - try { - Enhancer enhancer = new Enhancer(); - enhancer.setInterfaces(new Class[] {forClass}); - enhancer.setCallbackFilter(FILTER); - enhancer.setCallbackTypes(new Class[] {NoOp.class, MethodInterceptor.class}); - Class<?> newClass = enhancer.createClass(); - Enhancer.registerStaticCallbacks(newClass, new Callback[] {NoOp.INSTANCE, - new InterfaceMethodInterceptor(reference, forClass)}); - result = newClass.newInstance(); - } catch (Exception e) { - e.printStackTrace(); - } - return result; - } - -} diff --git a/branches/sca-equinox/modules/binding-corba-runtime/src/main/java/org/apache/tuscany/sca/binding/corba/impl/reference/InterfaceMethodInterceptor.java b/branches/sca-equinox/modules/binding-corba-runtime/src/main/java/org/apache/tuscany/sca/binding/corba/impl/reference/InterfaceMethodInterceptor.java deleted file mode 100644 index 7fba091b41..0000000000 --- a/branches/sca-equinox/modules/binding-corba-runtime/src/main/java/org/apache/tuscany/sca/binding/corba/impl/reference/InterfaceMethodInterceptor.java +++ /dev/null @@ -1,65 +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.binding.corba.impl.reference; - -import java.lang.reflect.Method; - -import net.sf.cglib.proxy.MethodInterceptor; -import net.sf.cglib.proxy.MethodProxy; - -import org.omg.CORBA.Object; - -/** - * @version $Rev$ $Date$ - * Interceptor for CORBA reference methods - */ -public class InterfaceMethodInterceptor implements MethodInterceptor { - - private Object reference; - private Class<?> javaClass; - - public InterfaceMethodInterceptor(Object reference, Class<?> javaClass) { - this.reference = reference; - this.javaClass = javaClass; - } - - /** - * Create and execute DynaCorbaRequest instance, basing on intercepted - * method arguments, return types, exceptions - */ - public java.lang.Object intercept(java.lang.Object object, - Method method, - java.lang.Object[] arguments, - MethodProxy arg3) throws Throwable { - DynaCorbaRequest request = new DynaCorbaRequest(reference, method.getName()); - request.setReferenceClass(javaClass); - for (int i = 0; i < arguments.length; i++) { - request.addArgument(arguments[i]); - } - request.setOutputType(method.getReturnType()); - Class<?>[] exceptions = method.getExceptionTypes(); - for (int i = 0; i < exceptions.length; i++) { - request.addExceptionType(exceptions[i]); - } - DynaCorbaResponse response = request.invoke(); - return response.getContent(); - } - -} |