You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by da...@apache.org on 2007/03/30 03:16:02 UTC

svn commit: r523900 - /incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/BaseEjbProxyHandler.java

Author: dain
Date: Thu Mar 29 18:16:00 2007
New Revision: 523900

URL: http://svn.apache.org/viewvc?view=rev&rev=523900
Log:
exceptions are return values and must be coppied

Modified:
    incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/BaseEjbProxyHandler.java

Modified: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/BaseEjbProxyHandler.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/BaseEjbProxyHandler.java?view=diff&rev=523900&r1=523899&r2=523900
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/BaseEjbProxyHandler.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/BaseEjbProxyHandler.java Thu Mar 29 18:16:00 2007
@@ -171,13 +171,26 @@
                     IntraVmCopyMonitor.postCopyOperation();
                 }
             }
-            Object returnObj = _invoke(proxy, method, args);
-
-            IntraVmCopyMonitor.preCopyOperation();
+            Object returnObj = null;
             try {
-                returnObj = copyObj(returnObj);
-            } finally {
-                IntraVmCopyMonitor.postCopyOperation();
+                returnObj = _invoke(proxy, method, args);
+            } catch (Throwable throwable) {
+                // exceptions are return values and must be coppied
+                IntraVmCopyMonitor.preCopyOperation();
+                try {
+                    throw (Throwable) copyObj(throwable);
+                } finally {
+                    IntraVmCopyMonitor.postCopyOperation();
+                }
+            }
+
+            if (returnObj != null) {
+                IntraVmCopyMonitor.preCopyOperation();
+                try {
+                    returnObj = copyObj(returnObj);
+                } finally {
+                    IntraVmCopyMonitor.postCopyOperation();
+                }
             }
             return returnObj;
 
@@ -197,7 +210,18 @@
             }
 
             // invoke method
-            Object returnObj = _invoke(proxy, method, args);
+            Object returnObj = null;
+            try {
+                returnObj = _invoke(proxy, method, args);
+            } catch (Throwable throwable) {
+                // exceptions are return values and must be coppied
+                IntraVmCopyMonitor.preCrossClassLoaderOperation();
+                try {
+                    throw (Throwable) copyObj(throwable);
+                } finally {
+                    IntraVmCopyMonitor.postCrossClassLoaderOperation();
+                }
+            }
 
             if (returnObj != null) {
                 IntraVmCopyMonitor.preCrossClassLoaderOperation();