You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by rf...@apache.org on 2009/02/04 22:05:26 UTC

svn commit: r740884 - /tuscany/java/sca/modules/binding-rmi-runtime/src/main/java/org/apache/tuscany/sca/binding/rmi/provider/RMIServiceBindingProvider.java

Author: rfeng
Date: Wed Feb  4 21:05:25 2009
New Revision: 740884

URL: http://svn.apache.org/viewvc?rev=740884&view=rev
Log:
Unexport the remote object so that RMI threads can be gracefully terminated

Modified:
    tuscany/java/sca/modules/binding-rmi-runtime/src/main/java/org/apache/tuscany/sca/binding/rmi/provider/RMIServiceBindingProvider.java

Modified: tuscany/java/sca/modules/binding-rmi-runtime/src/main/java/org/apache/tuscany/sca/binding/rmi/provider/RMIServiceBindingProvider.java
URL: http://svn.apache.org/viewvc/tuscany/java/sca/modules/binding-rmi-runtime/src/main/java/org/apache/tuscany/sca/binding/rmi/provider/RMIServiceBindingProvider.java?rev=740884&r1=740883&r2=740884&view=diff
==============================================================================
--- tuscany/java/sca/modules/binding-rmi-runtime/src/main/java/org/apache/tuscany/sca/binding/rmi/provider/RMIServiceBindingProvider.java (original)
+++ tuscany/java/sca/modules/binding-rmi-runtime/src/main/java/org/apache/tuscany/sca/binding/rmi/provider/RMIServiceBindingProvider.java Wed Feb  4 21:05:25 2009
@@ -22,14 +22,12 @@
 import java.lang.reflect.Field;
 import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
+import java.rmi.NoSuchObjectException;
 import java.rmi.Remote;
 import java.rmi.server.UnicastRemoteObject;
 import java.security.AccessController;
 import java.security.PrivilegedExceptionAction;
 
-import net.sf.cglib.asm.ClassWriter;
-import net.sf.cglib.asm.Type;
-import net.sf.cglib.core.Constants;
 import net.sf.cglib.proxy.Enhancer;
 import net.sf.cglib.proxy.MethodInterceptor;
 import net.sf.cglib.proxy.MethodProxy;
@@ -60,6 +58,7 @@
     private RMIBinding binding;
     private RMIHost rmiHost;
     private RuntimeWire wire;
+    private Remote rmiProxy;
 
     public RMIServiceBindingProvider(RuntimeComponent rc, RuntimeComponentService rcs, RMIBinding binding, RMIHost rmiHost) {
         this.component = rc;
@@ -75,7 +74,7 @@
         wire = service.getRuntimeWire(binding);
         Interface serviceInterface = service.getInterfaceContract().getInterface();
 
-        Remote rmiProxy = createRmiService(serviceInterface);
+        rmiProxy = createRmiService(serviceInterface);
 
         try {
 
@@ -88,6 +87,11 @@
 
     public void stop() {
         rmiHost.unregisterService(binding.getURI());
+        try {
+            UnicastRemoteObject.unexportObject(rmiProxy, false);
+        } catch (NoSuchObjectException e) {
+            throw new ServiceRuntimeException(e);
+        }
     }
 
     private int getPort(String port) {