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/28 00:44:54 UTC

svn commit: r660752 - /openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/cmp/cmp2/Cmp2Generator.java

Author: dblevins
Date: Tue May 27 15:44:54 2008
New Revision: 660752

URL: http://svn.apache.org/viewvc?rev=660752&view=rev
Log:
OPENEJB-807: CMP2 EntityBean interface methods auto-implemented

Modified:
    openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/cmp/cmp2/Cmp2Generator.java

Modified: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/cmp/cmp2/Cmp2Generator.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/cmp/cmp2/Cmp2Generator.java?rev=660752&r1=660751&r2=660752&view=diff
==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/cmp/cmp2/Cmp2Generator.java (original)
+++ openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/cmp/cmp2/Cmp2Generator.java Tue May 27 15:44:54 2008
@@ -24,6 +24,7 @@
 import org.objectweb.asm.Opcodes;
 import org.objectweb.asm.Type;
 
+import javax.ejb.EntityContext;
 import java.lang.reflect.Method;
 import java.lang.reflect.Field;
 import java.lang.reflect.Modifier;
@@ -54,6 +55,7 @@
     private final CmpField pkField;
     private final Class primKeyClass;
     private final List<Method> selectMethods = new ArrayList<Method>();
+    private final Class beanClass;
 
     public Cmp2Generator(String cmpImplClass, Class beanClass, String pkField, Class<?> primKeyClass, String[] cmpFields) {
         if (pkField == null && primKeyClass == null) throw new NullPointerException("Both pkField and primKeyClass are null");
@@ -88,6 +90,8 @@
             }
         }
 
+        this.beanClass = beanClass;
+
         cw = new ClassWriter(true);
     }
 
@@ -164,11 +168,28 @@
             createSelectMethod(selectMethod);
         }
 
+        if (!hasMethod(beanClass, "ejbActivate")) createEjbActivate();
+        if (!hasMethod(beanClass, "ejbPassivate")) createEjbPassivate();
+        if (!hasMethod(beanClass, "ejbLoad")) createEjbLoad();
+        if (!hasMethod(beanClass, "ejbStore")) createEjbStore();
+        if (!hasMethod(beanClass, "ejbRemove")) createEjbRemove();
+        if (!hasMethod(beanClass, "setEntityContext", EntityContext.class)) createSetEntityContext();
+        if (!hasMethod(beanClass, "unsetEntityContext")) createUnsetEntityContext();
+
         cw.visitEnd();
 
         return cw.toByteArray();
     }
 
+    private boolean hasMethod(Class beanClass, String name, Class... args) {
+        try {
+            Method method = beanClass.getMethod(name, args);
+            return !Modifier.isAbstract(method.getModifiers());
+        } catch (NoSuchMethodException e) {
+            return false;
+        }
+    }
+
     private void createConstructor() {
         MethodVisitor mv = cw.visitMethod(ACC_PUBLIC, "<init>", "()V", null, null);
         mv.visitCode();
@@ -833,4 +854,68 @@
         }
 
     }
+
+//    public void createEjbPostCreate() {
+//        MethodVisitor mv = cw.visitMethod(ACC_PUBLIC, "ejbPostCreate", "(Ljava/lang/String;Ljava/lang/String;I)V", null, null);
+//        mv.visitCode();
+//        mv.visitInsn(RETURN);
+//        mv.visitMaxs(0, 4);
+//        mv.visitEnd();
+//    }
+
+    public void createEjbActivate() {
+        MethodVisitor mv = cw.visitMethod(ACC_PUBLIC, "ejbActivate", "()V", null, null);
+        mv.visitCode();
+        mv.visitInsn(RETURN);
+        mv.visitMaxs(0, 1);
+        mv.visitEnd();
+    }
+
+    public void createEjbLoad() {
+        MethodVisitor mv = cw.visitMethod(ACC_PUBLIC, "ejbLoad", "()V", null, null);
+        mv.visitCode();
+        mv.visitInsn(RETURN);
+        mv.visitMaxs(0, 1);
+        mv.visitEnd();
+    }
+
+    public void createEjbPassivate() {
+        MethodVisitor mv = cw.visitMethod(ACC_PUBLIC, "ejbPassivate", "()V", null, null);
+        mv.visitCode();
+        mv.visitInsn(RETURN);
+        mv.visitMaxs(0, 1);
+        mv.visitEnd();
+    }
+
+    public void createEjbRemove() {
+        MethodVisitor mv = cw.visitMethod(ACC_PUBLIC, "ejbRemove", "()V", null, null);
+        mv.visitCode();
+        mv.visitInsn(RETURN);
+        mv.visitMaxs(0, 1);
+        mv.visitEnd();
+    }
+
+    public void createEjbStore() {
+        MethodVisitor mv = cw.visitMethod(ACC_PUBLIC, "ejbStore", "()V", null, null);
+        mv.visitCode();
+        mv.visitInsn(RETURN);
+        mv.visitMaxs(0, 1);
+        mv.visitEnd();
+    }
+
+    public void createSetEntityContext() {
+        MethodVisitor mv = cw.visitMethod(ACC_PUBLIC, "setEntityContext", "(Ljavax/ejb/EntityContext;)V", null, null);
+        mv.visitCode();
+        mv.visitInsn(RETURN);
+        mv.visitMaxs(0, 2);
+        mv.visitEnd();
+    }
+
+    public void createUnsetEntityContext() {
+        MethodVisitor mv = cw.visitMethod(ACC_PUBLIC, "unsetEntityContext", "()V", null, null);
+        mv.visitCode();
+        mv.visitInsn(RETURN);
+        mv.visitMaxs(0, 1);
+        mv.visitEnd();
+    }
 }