You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by db...@apache.org on 2007/04/20 11:41:38 UTC

svn commit: r530720 - in /incubator/openejb/trunk/openejb3: container/openejb-core/src/main/java/org/apache/openejb/config/ container/openejb-core/src/main/java/org/apache/openejb/core/ivm/ container/openejb-core/src/main/java/org/apache/openejb/core/s...

Author: dblevins
Date: Fri Apr 20 02:41:36 2007
New Revision: 530720

URL: http://svn.apache.org/viewvc?view=rev&rev=530720
Log:
more compliant stateful bean remove-method support

Modified:
    incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/AnnotationDeployer.java
    incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/BaseEjbProxyHandler.java
    incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateful/StatefulContainer.java
    incubator/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/MethodParams.java
    incubator/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/NamedMethod.java
    incubator/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/RemoveMethod.java
    incubator/openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/EJBInvocationHandler.java
    incubator/openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/EJBObjectHandle.java
    incubator/openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/EJBObjectProxy.java
    incubator/openejb/trunk/openejb3/server/openejb-ejbd/src/main/java/org/apache/openejb/server/ejbd/ClientObjectFactory.java

Modified: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/AnnotationDeployer.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/AnnotationDeployer.java?view=diff&rev=530720&r1=530719&r2=530720
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/AnnotationDeployer.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/AnnotationDeployer.java Fri Apr 20 02:41:36 2007
@@ -113,6 +113,7 @@
 import java.util.Set;
 import java.util.TreeSet;
 import java.util.Properties;
+import java.util.HashMap;
 
 /**
  * @version $Rev$ $Date$
@@ -773,10 +774,21 @@
                 }
 
                 List<Method> removeMethods = classFinder.findAnnotatedMethods(Remove.class);
+                Map<NamedMethod,RemoveMethod> declaredRemoveMethods = new HashMap<NamedMethod,RemoveMethod>();
+                for (RemoveMethod removeMethod : session.getRemoveMethod()) {
+                    declaredRemoveMethods.put(removeMethod.getBeanMethod(), removeMethod);
+                }
                 for (Method method : removeMethods) {
                     Remove remove = method.getAnnotation(Remove.class);
+                    RemoveMethod removeMethod = new RemoveMethod(method, remove.retainIfException());
+
+                    RemoveMethod declaredRemoveMethod = declaredRemoveMethods.get(removeMethod.getBeanMethod());
 
-                    session.getRemoveMethod().add(new RemoveMethod(method, remove.retainIfException()));
+                    if (declaredRemoveMethod == null) {
+                        session.getRemoveMethod().add(removeMethod);
+                    } else if (!declaredRemoveMethod.isExplicitlySet()){
+                        declaredRemoveMethod.setRetainIfException(remove.retainIfException());
+                    }
                 }
             }
         }
@@ -1101,7 +1113,7 @@
             if (refName.equals("")) {
                 refName = (member == null) ? null : member.getDeclaringClass().getName() + "/" + member.getName();
             }
-            
+
             List<ServiceRef> serviceRefEntries = consumer.getServiceRef();
             for (ServiceRef serviceRefEntry : serviceRefEntries) {
                 if (serviceRefEntry.getName().equals(refName)) {
@@ -1145,7 +1157,7 @@
                 }
                 serviceRef.setMappedName(mappedName);
             }
-            
+
             // Set wsdl file
             if (serviceRef.getWsdlFile() == null) {
                 String wsdlLocation = webService.wsdlLocation();

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=530720&r1=530719&r2=530720
==============================================================================
--- 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 Fri Apr 20 02:41:36 2007
@@ -38,6 +38,7 @@
 import javax.ejb.NoSuchObjectLocalException;
 import javax.ejb.TransactionRequiredLocalException;
 import javax.ejb.TransactionRolledbackLocalException;
+import javax.ejb.Remote;
 import javax.transaction.TransactionRequiredException;
 import javax.transaction.TransactionRolledbackException;
 
@@ -137,10 +138,12 @@
 
     public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
         if (isInvalidReference) {
-            if (isLocal) {
-                throw new EJBException("reference is invalid");
-            } else {
+            if (interfaceType.isComponent() && interfaceType.isLocal()){
+                throw new NoSuchObjectLocalException("reference is invalid");
+            } else if (interfaceType.isComponent() || java.rmi.Remote.class.isAssignableFrom(method.getDeclaringClass())) {
                 throw new NoSuchObjectException("reference is invalid");
+            } else {
+                throw new javax.ejb.NoSuchEJBException("reference is invalid");
             }
         }
         getDeploymentInfo(); // will throw an exception if app has been undeployed.

Modified: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateful/StatefulContainer.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateful/StatefulContainer.java?view=diff&rev=530720&r1=530719&r2=530720
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateful/StatefulContainer.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateful/StatefulContainer.java Fri Apr 20 02:41:36 2007
@@ -90,8 +90,7 @@
         for (Method removeMethod : removeMethods) {
             methods.put(removeMethod, MethodType.REMOVE);
 
-            Class businessLocal = deploymentInfo.getBusinessLocalInterface();
-            if (businessLocal != null) {
+            for (Class businessLocal : deploymentInfo.getBusinessLocalInterfaces()) {
                 try {
                     Method method = businessLocal.getMethod(removeMethod.getName());
                     methods.put(method, MethodType.REMOVE);
@@ -99,8 +98,7 @@
                 }
             }
 
-            Class businessRemote = deploymentInfo.getBusinessRemoteInterface();
-            if (businessRemote != null) {
+            for (Class businessRemote : deploymentInfo.getBusinessRemoteInterfaces()) {
                 try {
                     Method method = businessRemote.getMethod(removeMethod.getName());
                     methods.put(method, MethodType.REMOVE);
@@ -320,7 +318,8 @@
                 throw e;
             } catch(ApplicationException e){
                 retain = deploymentInfo.retainIfExeption(runMethod);
-                throw e;
+                if (retain) return;
+                else throw e;
             } finally {
                 if (retain){
                     instanceManager.poolInstance(callContext, instance);

Modified: incubator/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/MethodParams.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/MethodParams.java?view=diff&rev=530720&r1=530719&r2=530720
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/MethodParams.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/MethodParams.java Fri Apr 20 02:41:36 2007
@@ -62,4 +62,18 @@
         this.id = value;
     }
 
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (o == null || getClass() != o.getClass()) return false;
+
+        final MethodParams that = (MethodParams) o;
+
+        if (methodParam != null ? !methodParam.equals(that.methodParam) : that.methodParam != null) return false;
+
+        return true;
+    }
+
+    public int hashCode() {
+        return (methodParam != null ? methodParam.hashCode() : 0);
+    }
 }

Modified: incubator/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/NamedMethod.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/NamedMethod.java?view=diff&rev=530720&r1=530719&r2=530720
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/NamedMethod.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/NamedMethod.java Fri Apr 20 02:41:36 2007
@@ -94,4 +94,29 @@
         this.id = value;
     }
 
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (o == null || getClass() != o.getClass()) return false;
+
+        final NamedMethod that = (NamedMethod) o;
+
+        if (methodName != null ? !methodName.equals(that.methodName) : that.methodName != null) return false;
+
+        if (nullOrEmpty(this.methodParams) && nullOrEmpty(that.methodParams)) return true;
+
+        if (methodParams != null ? !methodParams.equals(that.methodParams) : that.methodParams != null) return false;
+
+        return true;
+    }
+
+    private boolean nullOrEmpty(MethodParams methodParams) {
+        return methodParams == null || methodParams.getMethodParam().size() == 0;
+    }
+
+    public int hashCode() {
+        int result;
+        result = (methodName != null ? methodName.hashCode() : 0);
+        result = 29 * result + (methodParams != null ? methodParams.hashCode() : 0);
+        return result;
+    }
 }

Modified: incubator/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/RemoveMethod.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/RemoveMethod.java?view=diff&rev=530720&r1=530719&r2=530720
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/RemoveMethod.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/RemoveMethod.java Fri Apr 20 02:41:36 2007
@@ -40,7 +40,7 @@
     @XmlElement(name = "bean-method", required = true)
     protected NamedMethod beanMethod;
     @XmlElement(name = "retain-if-exception", required = true)
-    protected boolean retainIfException;
+    protected Boolean retainIfException;
     @XmlAttribute
     @XmlJavaTypeAdapter(CollapsedStringAdapter.class)
     @XmlID
@@ -66,8 +66,12 @@
         this.beanMethod = value;
     }
 
+    public boolean isExplicitlySet() {
+        return retainIfException != null;
+    }
+
     public boolean getRetainIfException() {
-        return retainIfException;
+        return retainIfException != null && retainIfException;
     }
 
     public void setRetainIfException(boolean value) {
@@ -82,4 +86,18 @@
         this.id = value;
     }
 
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (o == null || getClass() != o.getClass()) return false;
+
+        final RemoveMethod that = (RemoveMethod) o;
+
+        if (beanMethod != null ? !beanMethod.equals(that.beanMethod) : that.beanMethod != null) return false;
+
+        return true;
+    }
+
+    public int hashCode() {
+        return (beanMethod != null ? beanMethod.hashCode() : 0);
+    }
 }

Modified: incubator/openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/EJBInvocationHandler.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/EJBInvocationHandler.java?view=diff&rev=530720&r1=530719&r2=530720
==============================================================================
--- incubator/openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/EJBInvocationHandler.java (original)
+++ incubator/openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/EJBInvocationHandler.java Fri Apr 20 02:41:36 2007
@@ -87,7 +87,13 @@
     }
 
     public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
-        if (isInvalidReference) throw new NoSuchObjectException("reference is invalid");
+        if (isInvalidReference) {
+            if (remote || java.rmi.Remote.class.isAssignableFrom(method.getDeclaringClass())){
+                throw new NoSuchObjectException("reference is invalid");
+            } else {
+                throw new NoSuchEJBException("reference is invalid");
+            }
+        }
 
         Object returnObj = null;
         returnObj = _invoke(proxy, method, args);

Modified: incubator/openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/EJBObjectHandle.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/EJBObjectHandle.java?view=diff&rev=530720&r1=530719&r2=530720
==============================================================================
--- incubator/openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/EJBObjectHandle.java (original)
+++ incubator/openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/EJBObjectHandle.java Fri Apr 20 02:41:36 2007
@@ -42,7 +42,7 @@
     }
 
     public EJBObject getEJBObject() throws RemoteException {
-        return ejbObjectProxy;
+        return (EJBObject) ejbObjectProxy;
     }
 
     public void writeExternal(ObjectOutput out) throws IOException {

Modified: incubator/openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/EJBObjectProxy.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/EJBObjectProxy.java?view=diff&rev=530720&r1=530719&r2=530720
==============================================================================
--- incubator/openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/EJBObjectProxy.java (original)
+++ incubator/openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/EJBObjectProxy.java Fri Apr 20 02:41:36 2007
@@ -21,7 +21,7 @@
 
 import javax.ejb.EJBObject;
 
-public interface EJBObjectProxy extends Serializable, EJBObject {
+public interface EJBObjectProxy extends Serializable {
 
     public EJBObjectHandler getEJBObjectHandler();
 

Modified: incubator/openejb/trunk/openejb3/server/openejb-ejbd/src/main/java/org/apache/openejb/server/ejbd/ClientObjectFactory.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/server/openejb-ejbd/src/main/java/org/apache/openejb/server/ejbd/ClientObjectFactory.java?view=diff&rev=530720&r1=530719&r2=530720
==============================================================================
--- incubator/openejb/trunk/openejb3/server/openejb-ejbd/src/main/java/org/apache/openejb/server/ejbd/ClientObjectFactory.java (original)
+++ incubator/openejb/trunk/openejb3/server/openejb-ejbd/src/main/java/org/apache/openejb/server/ejbd/ClientObjectFactory.java Fri Apr 20 02:41:36 2007
@@ -154,7 +154,7 @@
 
         EJBObjectHandler hanlder = EJBObjectHandler.createEJBObjectHandler(eMetaData, sMetaData, cMetaData, primKey);
 
-        return hanlder.createEJBObjectProxy();
+        return (javax.ejb.EJBObject) hanlder.createEJBObjectProxy();
     }
 
     protected javax.ejb.EJBHome _getEJBHome(CallContext call, ProxyInfo info) {