Author: genspring
Date: Sat May 28 05:18:25 2011
New Revision: 1128555
URL: http://svn.apache.org/viewvc?rev=1128555&view=rev
Log:
1, Many legacy logic depends on the application exception
"javax.rmi.NoSuchObjectException" if instance == null in
SteatefuleContainer.obtainInstanc(). revert back to NoSuchObjectException.
2, add a workaround in futureAdapter.handleExcption to wrap the
NoSuchObjectException with NoSuchEJBException().
Modified:
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/EjbObjectProxyHandler.java
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateful/StatefulContainer.java
Modified:
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/EjbObjectProxyHandler.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/EjbObjectProxyHandler.java?rev=1128555&r1=1128554&r2=1128555&view=diff
==============================================================================
---
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/EjbObjectProxyHandler.java
(original)
+++
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/EjbObjectProxyHandler.java
Sat May 28 05:18:25 2011
@@ -19,6 +19,7 @@ package org.apache.openejb.core.ivm;
import java.io.ObjectStreamException;
import java.lang.reflect.Method;
import java.rmi.AccessException;
+import java.rmi.NoSuchObjectException;
import java.rmi.RemoteException;
import java.util.HashMap;
import java.util.List;
@@ -38,6 +39,7 @@ import javax.ejb.EJBAccessException;
import javax.ejb.EJBException;
import javax.ejb.EJBLocalObject;
import javax.ejb.EJBObject;
+import javax.ejb.NoSuchEJBException;
import org.apache.openejb.AppContext;
import org.apache.openejb.BeanContext;
@@ -393,10 +395,20 @@ public abstract class EjbObjectProxyHand
while (e.getCause() != null) {
e = (Throwable) e.getCause();
}
+
+ /*
+ * StatefulContainer.obtainInstance(Object, ThreadContext, Method)
+ * will return NoSuchObjectException instead of NoSuchEJBException
*
+ * when it can't obtain an instance. Actually, the async client
+ * is expecting a NoSuchEJBException. Wrap it here as a
workaround.
+ */
+ if (e instanceof NoSuchObjectException) {
+ e = new NoSuchEJBException(e.getMessage(), (Exception) e);
+ }
boolean isExceptionUnchecked = (e instanceof Error) || (e
instanceof RuntimeException);
- // throw checked excpetion and ConcurrentAccessTimeoutException
directly.
+ // throw checked excpetion and EJBException directly.
if (!isExceptionUnchecked || e instanceof EJBException) {
throw new ExecutionException(e);
}
Modified:
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateful/StatefulContainer.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateful/StatefulContainer.java?rev=1128555&r1=1128554&r2=1128555&view=diff
==============================================================================
---
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateful/StatefulContainer.java
(original)
+++
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateful/StatefulContainer.java
Sat May 28 05:18:25 2011
@@ -631,7 +631,7 @@ public class StatefulContainer implement
// Did we find the instance?
if (instance == null) {
- throw new InvalidateReferenceException(new
NoSuchEJBException("Not Found"));
+ throw new InvalidateReferenceException(new
NoSuchObjectException("Not Found"));
}