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