diff options
Diffstat (limited to '')
-rw-r--r-- | java/sca/modules/binding-rmi-runtime/src/main/java/org/apache/tuscany/sca/binding/rmi/provider/RMIBindingInvoker.java | 46 |
1 files changed, 23 insertions, 23 deletions
diff --git a/java/sca/modules/binding-rmi-runtime/src/main/java/org/apache/tuscany/sca/binding/rmi/provider/RMIBindingInvoker.java b/java/sca/modules/binding-rmi-runtime/src/main/java/org/apache/tuscany/sca/binding/rmi/provider/RMIBindingInvoker.java index 9eec4aa6a8..a90362de84 100644 --- a/java/sca/modules/binding-rmi-runtime/src/main/java/org/apache/tuscany/sca/binding/rmi/provider/RMIBindingInvoker.java +++ b/java/sca/modules/binding-rmi-runtime/src/main/java/org/apache/tuscany/sca/binding/rmi/provider/RMIBindingInvoker.java @@ -6,15 +6,15 @@ * 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. + * under the License. */ package org.apache.tuscany.sca.binding.rmi.provider; @@ -39,7 +39,7 @@ public class RMIBindingInvoker implements Invoker, DataExchangeSemantics { private RMIHost rmiHost; private String uri; private Method remoteMethod; - private Remote proxy; + // private Remote proxy; public RMIBindingInvoker(RMIHost rmiHost, String uri, Method remoteMethod) { this.rmiHost = rmiHost; @@ -65,28 +65,28 @@ public class RMIBindingInvoker implements Invoker, DataExchangeSemantics { public Object invokeTarget(final Object payload) throws InvocationTargetException, SecurityException, NoSuchMethodException, IllegalArgumentException, IllegalAccessException { - if (proxy == null) { - final Class<?> remote = remoteMethod.getDeclaringClass(); - final ClassLoader stubClassLoader = remote.getClassLoader(); - // The generated remote interface is not available for the service lookup - final ClassLoader tccl = AccessController.doPrivileged(new PrivilegedAction<ClassLoader>() { + Remote proxy = null; + final Class<?> remote = remoteMethod.getDeclaringClass(); + final ClassLoader stubClassLoader = remote.getClassLoader(); + // The generated remote interface is not available for the service lookup + final ClassLoader tccl = AccessController.doPrivileged(new PrivilegedAction<ClassLoader>() { + public ClassLoader run() { + ClassLoader tccl = Thread.currentThread().getContextClassLoader(); + Thread.currentThread().setContextClassLoader(stubClassLoader); + return tccl; + } + }); + try { + // The proxy cannot be cached as the remote services can be rebound + proxy = rmiHost.findService(uri); + } finally { + AccessController.doPrivileged(new PrivilegedAction<ClassLoader>() { public ClassLoader run() { - ClassLoader tccl = Thread.currentThread().getContextClassLoader(); - Thread.currentThread().setContextClassLoader(stubClassLoader); - return tccl; + ClassLoader current = Thread.currentThread().getContextClassLoader(); + Thread.currentThread().setContextClassLoader(tccl); + return current; } }); - try { - proxy = rmiHost.findService(uri); - } finally { - AccessController.doPrivileged(new PrivilegedAction<ClassLoader>() { - public ClassLoader run() { - ClassLoader current = Thread.currentThread().getContextClassLoader(); - Thread.currentThread().setContextClassLoader(tccl); - return current; - } - }); - } } remoteMethod = proxy.getClass().getMethod(remoteMethod.getName(), remoteMethod.getParameterTypes()); |