From 464de082a5cf26d8242242604d9d40f6c48fd4b9 Mon Sep 17 00:00:00 2001 From: Carlos Ruiz Date: Fri, 5 Aug 2022 03:46:11 +0200 Subject: [PATCH] IDEMPIERE-5355 Improve default trx name (FHCA-3765) (#1427) Improve performance using StackWalker instead of Throwable->getStackTrace --- .../src/org/compiere/util/Trx.java | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/org.adempiere.base/src/org/compiere/util/Trx.java b/org.adempiere.base/src/org/compiere/util/Trx.java index 29f9a2851d..060cbe24ab 100644 --- a/org.adempiere.base/src/org/compiere/util/Trx.java +++ b/org.adempiere.base/src/org/compiere/util/Trx.java @@ -26,6 +26,7 @@ import java.util.Collection; import java.util.Date; import java.util.List; import java.util.Map; +import java.util.Optional; import java.util.UUID; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.TimeUnit; @@ -131,13 +132,14 @@ public class Trx if (prefix == null || prefix.length() == 0) { prefix = "Trx"; if (MSysConfig.getBooleanValue(MSysConfig.TRX_AUTOSET_DISPLAY_NAME, false)) { - StackTraceElement[] st = new Throwable().fillInStackTrace().getStackTrace(); - for (StackTraceElement ste : st) { - if (! Trx.class.getName().equals(ste.getClassName())) { - displayName = ste.getClassName().concat("_").concat(ste.getMethodName()); - break; - } - } + StackWalker walker = StackWalker.getInstance(StackWalker.Option.RETAIN_CLASS_REFERENCE); + Optional stackName = walker.walk(frames -> frames.map( + stackFrame -> stackFrame.getClassName() + "." + + stackFrame.getMethodName() + ":" + + stackFrame.getLineNumber()) + .filter(f -> ! f.startsWith(Trx.class.getName() + ".")) + .findFirst()); + displayName = (stackName.orElse(null)); } } prefix += "_" + UUID.randomUUID(); //System.currentTimeMillis();