diff options
author | rfeng <rfeng@13f79535-47bb-0310-9956-ffa450edef68> | 2009-06-03 03:03:38 +0000 |
---|---|---|
committer | rfeng <rfeng@13f79535-47bb-0310-9956-ffa450edef68> | 2009-06-03 03:03:38 +0000 |
commit | 85e5c031aa7e3b8bf86b03a729b8932d013d22d7 (patch) | |
tree | 814abdba77739e07a37c7ab3f9269cb88769fa27 | |
parent | 4685218054134e0a406e12c3755cb5080e8a8cb3 (diff) |
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
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()); |