org.objectweb.easybeans.enhancer.interceptors
Class InterceptorManagerGenerator

java.lang.Object
  extended by org.objectweb.easybeans.enhancer.CommonClassGenerator
      extended by org.objectweb.easybeans.enhancer.interceptors.InterceptorManagerGenerator
All Implemented Interfaces:
org.objectweb.asm.Opcodes

public class InterceptorManagerGenerator
extends CommonClassGenerator

This generates a class that manage the interceptor of a given bean. It manages the lifecycle of the interceptors and allow to inject resources (dependency injection).

Author:
Florent Benoit

Field Summary
private  java.util.List<java.lang.String> allInterceptors
          List of interceptors classes that are managed.
private  EjbJarAnnotationMetadata ejbJarAnnotationMetadata
          Metadata to retrieve info on interceptors.
private static java.lang.String EZB_EJBCONTEXT_DESC
          EZBEJBContext type descriptor.
private  java.lang.String generatedClassName
          Name of the class to generate.
static java.lang.String[] INTERFACES
          Interface of this invocation context.
 
Fields inherited from class org.objectweb.easybeans.enhancer.CommonClassGenerator
ARRAY_OBJECTS, EASYBEANS_FACTORY, GENERATED_CLASS_VERSION, JAVA_LANG_EXCEPTION, JAVA_LANG_OBJECT, JAVA_LANG_REFLECT_METHOD, VOID_METHOD_JAVA_LANG_OBJECT
 
Fields inherited from interface org.objectweb.asm.Opcodes
AALOAD, AASTORE, ACC_ABSTRACT, ACC_ANNOTATION, ACC_BRIDGE, ACC_DEPRECATED, ACC_ENUM, ACC_FINAL, ACC_INTERFACE, ACC_NATIVE, ACC_PRIVATE, ACC_PROTECTED, ACC_PUBLIC, ACC_STATIC, ACC_STRICT, ACC_SUPER, ACC_SYNCHRONIZED, ACC_SYNTHETIC, ACC_TRANSIENT, ACC_VARARGS, ACC_VOLATILE, ACONST_NULL, ALOAD, ANEWARRAY, ARETURN, ARRAYLENGTH, ASTORE, ATHROW, BALOAD, BASTORE, BIPUSH, CALOAD, CASTORE, CHECKCAST, D2F, D2I, D2L, DADD, DALOAD, DASTORE, DCMPG, DCMPL, DCONST_0, DCONST_1, DDIV, DLOAD, DMUL, DNEG, DREM, DRETURN, DSTORE, DSUB, DUP, DUP_X1, DUP_X2, DUP2, DUP2_X1, DUP2_X2, F2D, F2I, F2L, FADD, FALOAD, FASTORE, FCMPG, FCMPL, FCONST_0, FCONST_1, FCONST_2, FDIV, FLOAD, FMUL, FNEG, FREM, FRETURN, FSTORE, FSUB, GETFIELD, GETSTATIC, GOTO, I2B, I2C, I2D, I2F, I2L, I2S, IADD, IALOAD, IAND, IASTORE, ICONST_0, ICONST_1, ICONST_2, ICONST_3, ICONST_4, ICONST_5, ICONST_M1, IDIV, IF_ACMPEQ, IF_ACMPNE, IF_ICMPEQ, IF_ICMPGE, IF_ICMPGT, IF_ICMPLE, IF_ICMPLT, IF_ICMPNE, IFEQ, IFGE, IFGT, IFLE, IFLT, IFNE, IFNONNULL, IFNULL, IINC, ILOAD, IMUL, INEG, INSTANCEOF, INVOKEINTERFACE, INVOKESPECIAL, INVOKESTATIC, INVOKEVIRTUAL, IOR, IREM, IRETURN, ISHL, ISHR, ISTORE, ISUB, IUSHR, IXOR, JSR, L2D, L2F, L2I, LADD, LALOAD, LAND, LASTORE, LCMP, LCONST_0, LCONST_1, LDC, LDIV, LLOAD, LMUL, LNEG, LOOKUPSWITCH, LOR, LREM, LRETURN, LSHL, LSHR, LSTORE, LSUB, LUSHR, LXOR, MONITORENTER, MONITOREXIT, MULTIANEWARRAY, NEW, NEWARRAY, NOP, POP, POP2, PUTFIELD, PUTSTATIC, RET, RETURN, SALOAD, SASTORE, SIPUSH, SWAP, T_BOOLEAN, T_BYTE, T_CHAR, T_DOUBLE, T_FLOAT, T_INT, T_LONG, T_SHORT, TABLESWITCH, V1_1, V1_2, V1_3, V1_4, V1_5, V1_6
 
Constructor Summary
InterceptorManagerGenerator(EjbJarAnnotationMetadata ejbJarAnnotationMetadata, java.lang.String generatedClassName, java.util.List<java.lang.String> allInterceptors)
          Constructor.
 
Method Summary
private  void addAttributes()
          Add attributes of the class.
private  void addClassDeclaration()
          Creates the declaration of the class with the given interfaces.
private  void addConstructor()
          Creates the constructor which should look like.
private  void addDefaultMethods()
          Generated methods allowing to set a context and a factory.
private  void addGetterMethods()
          Generates a getter method for each interceptor.
private  void addInjectedMethod()
          For each interceptor, call injectedByEasyBeans on it (only if these interceptors have been analyzed).
private  void addMethods()
          Add methods of the class.
private  void endClass()
          Called when the generated class is done.
 void generate()
          Generates the class.
 byte[] getBytes()
           
private static java.lang.String getField(java.lang.String interceptorClass)
          Gets the field name for a given interceptor.
private static java.lang.String getMethod(java.lang.String interceptorClass)
          Gets the getter method name for a given interceptor.
 
Methods inherited from class org.objectweb.easybeans.enhancer.CommonClassGenerator
addAttribute, addAttribute, addFieldGettersSetters, addFieldGettersSetters, addNullGetter, addReturnType, encodeArrayClassDesc, encodeClassDesc, getCW, putFieldLoadOpCode, returnsObject, transformObjectIntoPrimitive, transformPrimitiveIntoObject, visitClassType
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

ejbJarAnnotationMetadata

private EjbJarAnnotationMetadata ejbJarAnnotationMetadata
Metadata to retrieve info on interceptors.


generatedClassName

private java.lang.String generatedClassName
Name of the class to generate.


allInterceptors

private java.util.List<java.lang.String> allInterceptors
List of interceptors classes that are managed.


INTERFACES

public static final java.lang.String[] INTERFACES
Interface of this invocation context.


EZB_EJBCONTEXT_DESC

private static final java.lang.String EZB_EJBCONTEXT_DESC
EZBEJBContext type descriptor.

Constructor Detail

InterceptorManagerGenerator

public InterceptorManagerGenerator(EjbJarAnnotationMetadata ejbJarAnnotationMetadata,
                                   java.lang.String generatedClassName,
                                   java.util.List<java.lang.String> allInterceptors)
Constructor.

Parameters:
ejbJarAnnotationMetadata - the metadata to search interceptor class metadata.
generatedClassName - the name of the class to generate.
allInterceptors - interceptors that needs to be managed.
Method Detail

generate

public void generate()
Generates the class. It call sub methods for being more clear for read the code


addClassDeclaration

private void addClassDeclaration()
Creates the declaration of the class with the given interfaces.


addAttributes

private void addAttributes()
Add attributes of the class. Attributes are interceptors names. ie : private Interceptor interceptor;


getField

private static java.lang.String getField(java.lang.String interceptorClass)
Gets the field name for a given interceptor.

Parameters:
interceptorClass - the given interceptor.
Returns:
a field name.

getMethod

private static java.lang.String getMethod(java.lang.String interceptorClass)
Gets the getter method name for a given interceptor.

Parameters:
interceptorClass - the given interceptor.
Returns:
a getter method name.

addConstructor

private void addConstructor()
Creates the constructor which should look like.
 public XXXInterceptorManager() {
     this.interceptor = new Interceptor();
     this.interceptor2 = new Interceptor2();
 }
 


addMethods

private void addMethods()
Add methods of the class.


addDefaultMethods

private void addDefaultMethods()
Generated methods allowing to set a context and a factory. This allows to set on injectors the bean's session context and its factory.


addGetterMethods

private void addGetterMethods()
Generates a getter method for each interceptor. ie :
 public Interceptor getInterceptor() {
     return interceptor;
 }
 


addInjectedMethod

private void addInjectedMethod()
For each interceptor, call injectedByEasyBeans on it (only if these interceptors have been analyzed).
 public void injectedByEasyBeans() {
     interceptorXX.setEasyBeansContext(easyBeansContext);
     interceptorXX.injectedByEasyBeans();
     interceptorXX.injectedByEasyBeans();
 }
 


endClass

private void endClass()
Called when the generated class is done.


getBytes

public byte[] getBytes()
Returns:
the bytecode of the generated class.