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