diff --git a/ebean-agent/pom.xml b/ebean-agent/pom.xml index f5cb7d9..a4d7b4a 100644 --- a/ebean-agent/pom.xml +++ b/ebean-agent/pom.xml @@ -9,7 +9,7 @@ io.ebean ebean-agent - 14.8.2 + 14.9.0-RC1 jar ebean-agent diff --git a/ebean-agent/src/main/java/io/ebean/enhance/common/EnhanceConstants.java b/ebean-agent/src/main/java/io/ebean/enhance/common/EnhanceConstants.java index 336cd80..3770aed 100644 --- a/ebean-agent/src/main/java/io/ebean/enhance/common/EnhanceConstants.java +++ b/ebean-agent/src/main/java/io/ebean/enhance/common/EnhanceConstants.java @@ -65,7 +65,9 @@ interface Jakarta { String L_STRING = "Ljava/lang/String;"; String L_OBJECT = "Ljava/lang/Object;"; String L_INTERCEPT = "Lio/ebean/bean/EntityBeanIntercept;"; - String L_HELPSCOPETRANS = "Lio/ebeaninternal/api/HelpScopeTrans;"; + String HELPSCOPETRANS = "io/ebeaninternal/api/HelpScopeTrans"; + String AOPTRANSACTIONSCOPE = "io/ebean/plugin/AOPTransactionScope"; + String L_DRAFT = "Lio/ebean/annotation/Draft;"; String C_TXSCOPE = "io/ebean/TxScope"; String C_TXTYPE = "io/ebean/annotation/TxType"; diff --git a/ebean-agent/src/main/java/io/ebean/enhance/common/EnhanceContext.java b/ebean-agent/src/main/java/io/ebean/enhance/common/EnhanceContext.java index 27bb6f3..7c4aa02 100644 --- a/ebean-agent/src/main/java/io/ebean/enhance/common/EnhanceContext.java +++ b/ebean-agent/src/main/java/io/ebean/enhance/common/EnhanceContext.java @@ -498,6 +498,10 @@ public boolean fluidQueryBuilders() { return enhancementVersion >= 148; } + public boolean useAopTransactionScope() { + return enhancementVersion >= 149; + } + public ProfileLineNumberMode profileLineMode() { return profileLineNumberMode; } diff --git a/ebean-agent/src/main/java/io/ebean/enhance/transactional/ClassAdapterTransactional.java b/ebean-agent/src/main/java/io/ebean/enhance/transactional/ClassAdapterTransactional.java index 3ff2552..bc28971 100644 --- a/ebean-agent/src/main/java/io/ebean/enhance/transactional/ClassAdapterTransactional.java +++ b/ebean-agent/src/main/java/io/ebean/enhance/transactional/ClassAdapterTransactional.java @@ -341,6 +341,10 @@ boolean isEnableProfileLocation() { return enhanceContext.isEnableProfileLocation(); } + boolean useAopTransactionScope() { + return enhanceContext.useAopTransactionScope(); + } + int nextQueryProfileLocation() { return queryProfileCount++; } diff --git a/ebean-agent/src/main/java/io/ebean/enhance/transactional/MethodAdapter.java b/ebean-agent/src/main/java/io/ebean/enhance/transactional/MethodAdapter.java index f2ca731..d949b8a 100644 --- a/ebean-agent/src/main/java/io/ebean/enhance/transactional/MethodAdapter.java +++ b/ebean-agent/src/main/java/io/ebean/enhance/transactional/MethodAdapter.java @@ -25,17 +25,18 @@ class MethodAdapter extends FinallyAdapter implements EnhanceConstants, Opcodes private static final String TX_FIELD_PREFIX = ClassAdapterTransactional.TX_FIELD_PREFIX; private static final Type txScopeType = Type.getType("L" + C_TXSCOPE + ";"); - private static final Type helpScopeTrans = Type.getType(L_HELPSCOPETRANS); private final AnnotationInfo annotationInfo; private final ClassAdapterTransactional classAdapter; private final ProfileMethodInstruction profileMethod; + private final String aopTransactionScope; private boolean transactional; private int posTxScope; MethodAdapter(ClassAdapterTransactional classAdapter, final MethodVisitor mv, final int access, final String name, final String desc) { super(mv, access, name, desc); this.classAdapter = classAdapter; + this.aopTransactionScope = classAdapter.useAopTransactionScope() ? AOPTRANSACTIONSCOPE : HELPSCOPETRANS; this.profileMethod = new ProfileMethodInstruction(classAdapter, mv, name); // inherit from class level Transactional annotation AnnotationInfo parentInfo = classAdapter.getClassAnnotationInfo(); @@ -314,11 +315,10 @@ protected void onMethodEnter() { } mv.visitVarInsn(ALOAD, posTxScope); - mv.visitMethodInsn(INVOKESTATIC, helpScopeTrans.getInternalName(), "enter", "(" + mv.visitMethodInsn(INVOKESTATIC, aopTransactionScope, "enter", "(" + txScopeType.getDescriptor() + ")V", false); } - @Override protected void onFinally(int opcode) { if (!transactional) { @@ -337,7 +337,7 @@ protected void onFinally(int opcode) { box(getReturnType()); } visitIntInsn(SIPUSH, opcode); - visitMethodInsn(INVOKESTATIC, helpScopeTrans.getInternalName(), "exit", "(Ljava/lang/Object;I)V", false); + visitMethodInsn(INVOKESTATIC, aopTransactionScope, "exit", "(Ljava/lang/Object;I)V", false); } }