diff --git a/openjpa-kernel/src/main/java/org/apache/openjpa/enhance/PCClassFileTransformer.java b/openjpa-kernel/src/main/java/org/apache/openjpa/enhance/PCClassFileTransformer.java index b04bc23317..567db23e31 100644 --- a/openjpa-kernel/src/main/java/org/apache/openjpa/enhance/PCClassFileTransformer.java +++ b/openjpa-kernel/src/main/java/org/apache/openjpa/enhance/PCClassFileTransformer.java @@ -49,6 +49,7 @@ public class PCClassFileTransformer private static final Localizer _loc = Localizer.forPackage (PCClassFileTransformer.class); + private static final ThreadLocal _isTransformingInLocalThread = new ThreadLocal(); // OJ-2817 private final MetaDataRepository _repos; private final PCEnhancer.Flags _flags; @@ -120,12 +121,17 @@ public byte[] transform(ClassLoader loader, String className, // prevent re-entrant calls, which can occur if the enhancing // loader is used to also load OpenJPA libraries; this is to prevent // recursive enhancement attempts for internal openjpa libraries - if (_transforming) + Boolean transforming = _isTransformingInLocalThread.get(); + if (transforming != null) { return null; - - _transforming = true; + } + _isTransformingInLocalThread.set(Boolean.TRUE); - return transform0(className, redef, bytes); + try { + return transform0(className, redef, bytes); + } finally { + _isTransformingInLocalThread.remove(); + } } /**