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 2008/05/29 21:12:38 UTC

svn commit: r661437 - /openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/entity/EntityEjbHomeHandler.java

Author: dblevins
Date: Thu May 29 12:12:38 2008
New Revision: 661437

URL: http://svn.apache.org/viewvc?rev=661437&view=rev
Log:
OPENEJB-812: Explicitly check for CMP/BMP ejbHome.remove(ejbObject) mistake

Modified:
    openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/entity/EntityEjbHomeHandler.java

Modified: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/entity/EntityEjbHomeHandler.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/entity/EntityEjbHomeHandler.java?rev=661437&r1=661436&r2=661437&view=diff
==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/entity/EntityEjbHomeHandler.java (original)
+++ openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/entity/EntityEjbHomeHandler.java Thu May 29 12:12:38 2008
@@ -26,7 +26,13 @@
 import org.apache.openejb.DeploymentInfo;
 import org.apache.openejb.core.ivm.EjbHomeProxyHandler;
 import org.apache.openejb.core.ivm.EjbObjectProxyHandler;
+import org.apache.openejb.core.ivm.IntraVmProxy;
 import org.apache.openejb.util.proxy.ProxyManager;
+import org.apache.openejb.util.proxy.InvocationHandler;
+
+import javax.ejb.EJBLocalObject;
+import javax.ejb.RemoveException;
+import javax.ejb.EJBObject;
 
 
 public class EntityEjbHomeHandler extends EjbHomeProxyHandler {
@@ -95,6 +101,35 @@
 
     protected Object removeByPrimaryKey(Class interfce, Method method, Object[] args, Object proxy) throws Throwable {
         Object primKey = args[0];
+
+        // Check for the common mistake of passing the ejbObject instead of ejbObject.getPrimaryKey()
+        if (primKey instanceof EJBLocalObject) {
+            Class ejbObjectProxyClass = primKey.getClass();
+
+            String ejbObjectName = null;
+            for (Class clazz : ejbObjectProxyClass.getInterfaces()) {
+                if (EJBLocalObject.class.isAssignableFrom(clazz)) {
+                    ejbObjectName = clazz.getSimpleName();
+                    break;
+                }
+            }
+
+            throw new RemoveException("Invalid argument '" + ejbObjectName + "', expected primary key.  Update to ejbLocalHome.remove(" + lcfirst(ejbObjectName) + ".getPrimaryKey())");
+
+        } else if (primKey instanceof EJBObject) {
+            Class ejbObjectProxyClass = primKey.getClass();
+
+            String ejbObjectName = null;
+            for (Class clazz : ejbObjectProxyClass.getInterfaces()) {
+                if (EJBObject.class.isAssignableFrom(clazz)) {
+                    ejbObjectName = clazz.getSimpleName();
+                    break;
+                }
+            }
+
+            throw new RemoveException("Invalid argument '" + ejbObjectName + "', expected primary key.  Update to ejbHome.remove(" + lcfirst(ejbObjectName) + ".getPrimaryKey())");
+        }
+
         container.invoke(deploymentID, interfce, method, args, primKey);
 
         /* 
@@ -105,6 +140,14 @@
         return null;
     }
 
+    private static String lcfirst(String s){
+        if (s == null || s.length() < 1) return s;
+
+        StringBuilder sb = new StringBuilder(s);
+        sb.setCharAt(0, Character.toLowerCase(sb.charAt(0)));
+        return sb.toString();
+    }
+
     protected EjbObjectProxyHandler newEjbObjectHandler(DeploymentInfo deploymentInfo, Object pk, InterfaceType interfaceType, List<Class> interfaces) {
         return new EntityEjbObjectHandler(getDeploymentInfo(), pk, interfaceType, interfaces);
     }