From 85e5c031aa7e3b8bf86b03a729b8932d013d22d7 Mon Sep 17 00:00:00 2001 From: rfeng Date: Wed, 3 Jun 2009 03:03:38 +0000 Subject: Remove cache of RMI proxy because otherwise if the RMI service has been restarted or rebound, the proxy becomes staled and it fails with NoSuchObjectException. git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@781243 13f79535-47bb-0310-9956-ffa450edef68 --- .../binding/rmi/provider/RMIBindingInvoker.java | 46 +++++++++++----------- 1 file 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() { + 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() { + 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() { 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() { - public ClassLoader run() { - ClassLoader current = Thread.currentThread().getContextClassLoader(); - Thread.currentThread().setContextClassLoader(tccl); - return current; - } - }); - } } remoteMethod = proxy.getClass().getMethod(remoteMethod.getName(), remoteMethod.getParameterTypes()); -- cgit v1.2.3