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);
}