You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ode.apache.org by bo...@apache.org on 2009/04/01 01:37:29 UTC

svn commit: r760734 - /ode/branches/APACHE_ODE_1.X/jca-server/src/main/java/org/apache/ode/jca/server/rmi/RmiTransportServerImpl.java

Author: boisvert
Date: Tue Mar 31 23:37:29 2009
New Revision: 760734

URL: http://svn.apache.org/viewvc?rev=760734&view=rev
Log:
Correctly unexport all RMI objects so the JVM exits gracefully when the appserver is shutdown

Modified:
    ode/branches/APACHE_ODE_1.X/jca-server/src/main/java/org/apache/ode/jca/server/rmi/RmiTransportServerImpl.java

Modified: ode/branches/APACHE_ODE_1.X/jca-server/src/main/java/org/apache/ode/jca/server/rmi/RmiTransportServerImpl.java
URL: http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.X/jca-server/src/main/java/org/apache/ode/jca/server/rmi/RmiTransportServerImpl.java?rev=760734&r1=760733&r2=760734&view=diff
==============================================================================
--- ode/branches/APACHE_ODE_1.X/jca-server/src/main/java/org/apache/ode/jca/server/rmi/RmiTransportServerImpl.java (original)
+++ ode/branches/APACHE_ODE_1.X/jca-server/src/main/java/org/apache/ode/jca/server/rmi/RmiTransportServerImpl.java Tue Mar 31 23:37:29 2009
@@ -49,6 +49,8 @@
 
     private String _id;
 
+    private Registry _registry;
+
     public RmiTransportServerImpl() {
     }
 
@@ -79,7 +81,7 @@
 
         // Bind the RMI-server to the registry, creating one if necessary
         try {
-            LocateRegistry.createRegistry(_port);
+            _registry = LocateRegistry.createRegistry(_port);
             __log.debug("Created registry on port " + _port);
         } catch (Exception ex) {
             __log.debug("Could not create registry on port " + _port + " (perhaps it's already there)");
@@ -94,7 +96,13 @@
     }
 
     public synchronized void stop() throws RemoteException {
-        UnicastRemoteObject.unexportObject(this, false);
+        for (RmiPipeServerImpl pipe: _pipes) {
+            unexport(pipe);
+        }
+        if (_registry != null) {
+            unexport(_registry);
+        }
+        unexport(this);
     }
 
     public synchronized OdeTransportPipeRemote newPipe() throws RemoteException {
@@ -109,18 +117,18 @@
     void pipeClosed(RmiPipeServerImpl pipe) {
         if (__log.isDebugEnabled())
             __log.debug("Closing RMI pipe " + pipe);
-            
-        try {
-            UnicastRemoteObject.unexportObject(pipe.remote, false);
-        } catch (RemoteException re) {
-            // ignore
-        }
-
+        unexport(pipe);
         synchronized (this) {
             _pipes.remove(pipe);
         }
-
         _connProvider.destroyConnectionObject(pipe.target);
+    }
 
+    void unexport(Remote remote) {
+        try {
+            UnicastRemoteObject.unexportObject(remote, false);
+        } catch (Exception e) {
+            // ignore
+        }
     }
 }