|
||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | |||||||||
java.lang.Objectorg.multiverse.stms.alpha.instrumentation.transactionalmethod.ClassTransactionalMethodTransformer
public final class ClassTransactionalMethodTransformer
Transforms transactionalmethod.
The first generation of transactionalmethod transformers created an instance of the TransactionTemplate that forwards the call but this transformer actually merges the code of the TransactionLogicDonor. The question is how to transform. The code needs to be placed around the original code. In principle this is no problem (can be done with a try finally clause?). But the question is if this can cause problems with constructors. If is is placed around the constructor, the constructor will be re-executed on the same atomicobject. Another reason to drop the template approach is that a lot of boxing/unboxing goes on with primitive return types of the transactionalobject.
| Field Summary |
|---|
| 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, DOUBLE, DREM, DRETURN, DSTORE, DSUB, DUP, DUP_X1, DUP_X2, DUP2, DUP2_X1, DUP2_X2, F_APPEND, F_CHOP, F_FULL, F_NEW, F_SAME, F_SAME1, F2D, F2I, F2L, FADD, FALOAD, FASTORE, FCMPG, FCMPL, FCONST_0, FCONST_1, FCONST_2, FDIV, FLOAD, FLOAT, 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, INTEGER, INVOKEDYNAMIC, INVOKEDYNAMIC_OWNER, 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, LONG, LOOKUPSWITCH, LOR, LREM, LRETURN, LSHL, LSHR, LSTORE, LSUB, LUSHR, LXOR, MONITORENTER, MONITOREXIT, MULTIANEWARRAY, NEW, NEWARRAY, NOP, NULL, 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, TOP, UNINITIALIZED_THIS, V1_1, V1_2, V1_3, V1_4, V1_5, V1_6, V1_7 |
| Constructor Summary | |
|---|---|
ClassTransactionalMethodTransformer(ClassLoader classLoader,
org.objectweb.asm.tree.ClassNode classNode,
org.objectweb.asm.tree.ClassNode donorClassNode,
org.multiverse.instrumentation.metadata.MetadataRepository metadataRepository,
boolean optimize,
org.multiverse.instrumentation.InstrumenterLogger logger)
|
|
| Method Summary | |
|---|---|
org.objectweb.asm.tree.MethodNode |
createTransactionalMethod(org.objectweb.asm.tree.MethodNode originalMethod)
Creates the coordinating method; a method that is responsible for starting/committing aborting and retrying. |
org.objectweb.asm.tree.MethodNode |
createTransactionalWithTranlocalMethod(org.objectweb.asm.tree.MethodNode methodNode,
boolean readonly)
Creates a method that lifts on an already existing transaction and is going to contains the actual logic. |
int |
indexOfTranlocalVariable(String methodName,
String methodDesc)
|
int |
indexOfTransactionVariable(String methodName,
String methodDesc)
|
static boolean |
isReplacementMethod(org.objectweb.asm.tree.MethodInsnNode donorMethodInsnNode)
|
int |
newIndexOfLocalVariable(String methodName,
String methodDesc,
int originalVar)
|
org.objectweb.asm.tree.ClassNode |
transform()
|
| Methods inherited from class java.lang.Object |
|---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
| Constructor Detail |
|---|
public ClassTransactionalMethodTransformer(ClassLoader classLoader,
org.objectweb.asm.tree.ClassNode classNode,
org.objectweb.asm.tree.ClassNode donorClassNode,
org.multiverse.instrumentation.metadata.MetadataRepository metadataRepository,
boolean optimize,
org.multiverse.instrumentation.InstrumenterLogger logger)
| Method Detail |
|---|
public org.objectweb.asm.tree.ClassNode transform()
public org.objectweb.asm.tree.MethodNode createTransactionalWithTranlocalMethod(org.objectweb.asm.tree.MethodNode methodNode,
boolean readonly)
methodNode - the original MethodNode where the variable table is cloned from.
public org.objectweb.asm.tree.MethodNode createTransactionalMethod(org.objectweb.asm.tree.MethodNode originalMethod)
originalMethod - the original MethodNode.
public static boolean isReplacementMethod(org.objectweb.asm.tree.MethodInsnNode donorMethodInsnNode)
public int newIndexOfLocalVariable(String methodName,
String methodDesc,
int originalVar)
public int indexOfTranlocalVariable(String methodName,
String methodDesc)
public int indexOfTransactionVariable(String methodName,
String methodDesc)
|
||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | |||||||||