diff --git a/org.adempiere.base.process/src/org/adempiere/process/ClientAcctProcessor.java b/org.adempiere.base.process/src/org/adempiere/process/ClientAcctProcessor.java index c717e462e8..6a0791b744 100644 --- a/org.adempiere.base.process/src/org/adempiere/process/ClientAcctProcessor.java +++ b/org.adempiere.base.process/src/org/adempiere/process/ClientAcctProcessor.java @@ -221,6 +221,7 @@ public class ClientAcctProcessor extends SvrProcess // Run every posting document in own transaction String innerTrxName = Trx.createTrxName("CAP"); Trx innerTrx = Trx.get(innerTrxName, true); + innerTrx.setDisplayName(getClass().getName()+"_postSession"); try { diff --git a/org.adempiere.base.process/src/org/compiere/process/AllocationReset.java b/org.adempiere.base.process/src/org/compiere/process/AllocationReset.java index e6c1ff9ec1..3bbeb5615f 100644 --- a/org.adempiere.base.process/src/org/compiere/process/AllocationReset.java +++ b/org.adempiere.base.process/src/org/compiere/process/AllocationReset.java @@ -104,6 +104,7 @@ public class AllocationReset extends SvrProcess throw new AdempiereUserError(Msg.parseTranslation(getCtx(), "@Mandatory@: @C_AllocationHdr_ID@")); m_trx = Trx.get(Trx.createTrxName("AllocReset"), true); + m_trx.setDisplayName(getClass().getName()+"_doIt"); int count = 0; if (p_C_AllocationHdr_ID != 0) diff --git a/org.adempiere.base/src/org/adempiere/process/UUIDGenerator.java b/org.adempiere.base/src/org/adempiere/process/UUIDGenerator.java index 484ed1c2b5..adcd3f5940 100644 --- a/org.adempiere.base/src/org/adempiere/process/UUIDGenerator.java +++ b/org.adempiere.base/src/org/adempiere/process/UUIDGenerator.java @@ -208,6 +208,7 @@ public class UUIDGenerator extends SvrProcess { Trx trx = trxName != null ? Trx.get(trxName, false) : null; if (trx == null) { trx = Trx.get(Trx.createTrxName(), true); + trx.setDisplayName(UUIDGenerator.class.getName()+"_updateUUID"); localTrx = true; } try { diff --git a/org.adempiere.base/src/org/compiere/acct/DocManager.java b/org.adempiere.base/src/org/compiere/acct/DocManager.java index e1559c2a62..5e5053c9c3 100644 --- a/org.adempiere.base/src/org/compiere/acct/DocManager.java +++ b/org.adempiere.base/src/org/compiere/acct/DocManager.java @@ -286,6 +286,8 @@ public class DocManager { } Trx trx = Trx.get(trxName, true); + if (localTrxName != null) + trx.setDisplayName(DocManager.class.getName()+"_postDocument"); String error = null; Savepoint savepoint = null; try diff --git a/org.adempiere.base/src/org/compiere/model/GridTable.java b/org.adempiere.base/src/org/compiere/model/GridTable.java index b8921594c2..97ce82f7d0 100644 --- a/org.adempiere.base/src/org/compiere/model/GridTable.java +++ b/org.adempiere.base/src/org/compiere/model/GridTable.java @@ -3571,6 +3571,8 @@ public class GridTable extends AbstractTableModel //https://jdbc.postgresql.org/documentation/head/query.html#query-with-cursor String trxName = m_virtual ? Trx.createTrxName("Loader") : null; trx = trxName != null ? Trx.get(trxName, true) : null; + if (trx != null) + trx.setDisplayName(getClass().getName()+"_openResultSet"); // open Statement (closed by Loader.close) try { diff --git a/org.adempiere.base/src/org/compiere/model/MConversionRate.java b/org.adempiere.base/src/org/compiere/model/MConversionRate.java index d99ba597f4..009cd24b82 100644 --- a/org.adempiere.base/src/org/compiere/model/MConversionRate.java +++ b/org.adempiere.base/src/org/compiere/model/MConversionRate.java @@ -163,6 +163,7 @@ public class MConversionRate extends X_C_Conversion_Rate String trxName = Trx.createTrxName(); Trx trx = Trx.get(trxName, true); + trx.setDisplayName(MConversionRate.class.getName()+"_setRate"); Properties ctx = Env.getCtx(); MCurrency curFrom = MCurrency.get(ctx, CurFrom_ISO); if (curFrom==null) throw new Exception("Invalid currency " + CurFrom_ISO); diff --git a/org.adempiere.base/src/org/compiere/model/MCost.java b/org.adempiere.base/src/org/compiere/model/MCost.java index 0168eeb707..e99068a6bb 100644 --- a/org.adempiere.base/src/org/compiere/model/MCost.java +++ b/org.adempiere.base/src/org/compiere/model/MCost.java @@ -638,6 +638,7 @@ public class MCost extends X_M_Cost { trxNameUsed = Trx.createTrxName("Cost"); trx = Trx.get(trxNameUsed, true); + trx.setDisplayName(MCost.class.getName()+"_create"); } boolean success = true; // For all Products diff --git a/org.adempiere.base/src/org/compiere/model/MLocation.java b/org.adempiere.base/src/org/compiere/model/MLocation.java index 27b6683284..81aa539e53 100644 --- a/org.adempiere.base/src/org/compiere/model/MLocation.java +++ b/org.adempiere.base/src/org/compiere/model/MLocation.java @@ -778,6 +778,7 @@ public class MLocation extends X_C_Location implements Comparator setErrorMessage(null); Trx trx = Trx.get(Trx.createTrxName("avt-"), true); + trx.setDisplayName(getClass().getName()+"_processOnline"); boolean ok = false; try { diff --git a/org.adempiere.base/src/org/compiere/model/MPackage.java b/org.adempiere.base/src/org/compiere/model/MPackage.java index fb7ec4b266..ff08f6aefe 100644 --- a/org.adempiere.base/src/org/compiere/model/MPackage.java +++ b/org.adempiere.base/src/org/compiere/model/MPackage.java @@ -283,6 +283,7 @@ public class MPackage extends X_M_Package setErrorMessage(null); Trx trx = Trx.get(Trx.createTrxName("spt-"), true); + trx.setDisplayName(getClass().getName()+"_processOnline"); boolean ok = false; try { diff --git a/org.adempiere.base/src/org/compiere/model/MPayment.java b/org.adempiere.base/src/org/compiere/model/MPayment.java index 1aff56459b..53e730442d 100644 --- a/org.adempiere.base/src/org/compiere/model/MPayment.java +++ b/org.adempiere.base/src/org/compiere/model/MPayment.java @@ -565,6 +565,7 @@ public class MPayment extends X_C_Payment setIsApproved(approved); Trx trx = Trx.get(Trx.createTrxName("ppt-"), true); + trx.setDisplayName(getClass().getName()+"_processOnline"); try { diff --git a/org.adempiere.base/src/org/compiere/model/MSetup.java b/org.adempiere.base/src/org/compiere/model/MSetup.java index 4f86fef8d5..5629ddaf01 100644 --- a/org.adempiere.base/src/org/compiere/model/MSetup.java +++ b/org.adempiere.base/src/org/compiere/model/MSetup.java @@ -116,6 +116,7 @@ public final class MSetup String adminEmail, String userEmail, boolean isSetInitialPassword) { log.info(clientName); + m_trx.setDisplayName(getClass().getName()+"_createClient"); m_trx.start(); // info header diff --git a/org.adempiere.base/src/org/compiere/model/PO.java b/org.adempiere.base/src/org/compiere/model/PO.java index 2605db0c63..f68152093b 100644 --- a/org.adempiere.base/src/org/compiere/model/PO.java +++ b/org.adempiere.base/src/org/compiere/model/PO.java @@ -2047,6 +2047,8 @@ public abstract class PO l_trxname.setLength(23); m_trxName = Trx.createTrxName(l_trxname.toString()); localTrx = Trx.get(m_trxName, true); + localTrx.setDisplayName(getClass().getName()+"_save"); + localTrx.getConnection(); } else { @@ -3171,6 +3173,8 @@ public abstract class PO { localTrxName = Trx.createTrxName("POdel"); localTrx = Trx.get(localTrxName, true); + localTrx.setDisplayName(getClass().getName()+"_delete"); + localTrx.getConnection(); m_trxName = localTrxName; } else diff --git a/org.adempiere.base/src/org/compiere/process/CreateForeignKey.java b/org.adempiere.base/src/org/compiere/process/CreateForeignKey.java index 6f0dd64f87..b019fed3cc 100644 --- a/org.adempiere.base/src/org/compiere/process/CreateForeignKey.java +++ b/org.adempiere.base/src/org/compiere/process/CreateForeignKey.java @@ -264,6 +264,7 @@ public class CreateForeignKey extends SvrProcess { Trx trx = null; try { trx = Trx.get(Trx.createTrxName("CreateForeignKey"), true); + trx.setDisplayName(getClass().getName()+"_process_dropConstraint"); int rvalue = DB.executeUpdate(sql.toString(), (Object[]) null, true, trx.getTrxName()); addLog(0, null, new BigDecimal(rvalue), sql.toString()); } catch (Exception e) { @@ -302,6 +303,7 @@ public class CreateForeignKey extends SvrProcess { Trx trx = null; try { trx = Trx.get(Trx.createTrxName("CreateForeignKey"), true); + trx.setDisplayName(getClass().getName()+"_process_addConstraint"); int rvalue = DB.executeUpdate(sql.toString(), (Object[]) null, true, trx.getTrxName()); addLog(0, null, new BigDecimal(rvalue), sql.toString()); if (rvalue == -1) diff --git a/org.adempiere.base/src/org/compiere/process/CreateTableIndex.java b/org.adempiere.base/src/org/compiere/process/CreateTableIndex.java index a5da299654..30515b8218 100644 --- a/org.adempiere.base/src/org/compiere/process/CreateTableIndex.java +++ b/org.adempiere.base/src/org/compiere/process/CreateTableIndex.java @@ -192,6 +192,7 @@ public class CreateTableIndex extends SvrProcess { addLog(Msg.getMsg(getCtx(), "CreateTableIndexCreateTableIndex") + dbTableIndex.indexName); Trx trx = Trx.get(Trx.createTrxName("CreateTableIndex"), true); + trx.setDisplayName(getClass().getName()+"_process_createMTableIndex"); try { MTableIndex tableIndex = new MTableIndex(getCtx(), 0, get_TrxName()); tableIndex.setAD_Table_ID(table.getAD_Table_ID()); @@ -244,6 +245,7 @@ public class CreateTableIndex extends SvrProcess { addLog(Msg.getMsg(getCtx(), "CreateTableIndexValidateTableIndex") + tableIndex.getName()); addLog(tableIndex.getAD_TableIndex_ID(), null, null, tableIndex.toString(), tableIndex.get_Table_ID(), tableIndex.getAD_TableIndex_ID()); Trx trx = Trx.get(Trx.createTrxName("ValidateTableIndex"), true); + trx.setDisplayName(getClass().getName()+"_process_validateTableIndex"); try { String result = TableIndexValidate.validateTableIndex(getCtx(), tableIndex, trx.getTrxName(), getProcessInfo()); addLog(result); diff --git a/org.adempiere.base/src/org/compiere/process/SvrProcess.java b/org.adempiere.base/src/org/compiere/process/SvrProcess.java index deb3c2430f..4c71c3aa86 100644 --- a/org.adempiere.base/src/org/compiere/process/SvrProcess.java +++ b/org.adempiere.base/src/org/compiere/process/SvrProcess.java @@ -124,7 +124,10 @@ public abstract class SvrProcess implements ProcessCall //*** Trx boolean localTrx = m_trx == null; if (localTrx) + { m_trx = Trx.get(Trx.createTrxName("SvrProcess"), true); + m_trx.setDisplayName(getClass().getName()+"_startProcess"); + } // ClassLoader contextLoader = Thread.currentThread().getContextClassLoader(); ClassLoader processLoader = getClass().getClassLoader(); diff --git a/org.adempiere.base/src/org/compiere/util/Trx.java b/org.adempiere.base/src/org/compiere/util/Trx.java index 3d83006b43..1e12ee878c 100644 --- a/org.adempiere.base/src/org/compiere/util/Trx.java +++ b/org.adempiere.base/src/org/compiere/util/Trx.java @@ -16,6 +16,8 @@ *****************************************************************************/ package org.compiere.util; +import java.io.PrintWriter; +import java.io.StringWriter; import java.sql.Connection; import java.sql.SQLException; import java.sql.Savepoint; @@ -32,6 +34,7 @@ import java.util.logging.Level; import org.adempiere.exceptions.AdempiereException; import org.adempiere.exceptions.DBException; import org.compiere.Adempiere; +import org.compiere.model.MSysConfig; import org.compiere.model.PO; /** @@ -84,6 +87,10 @@ public class Trx private static final Trx.TrxMonitor s_monitor = new Trx.TrxMonitor(); private List listeners = new ArrayList(); + + protected Exception trace; + + private String m_displayName; public static void startTrxMonitor() { @@ -187,6 +194,8 @@ public class Trx } if (!isActive()) start(); + if (MSysConfig.getBooleanValue("TRACE_ALL_TRX_CONNECTION_GET", false)) + trace = new Exception(); return m_connection; } // getConnection @@ -208,6 +217,7 @@ public class Trx { log.log(Level.SEVERE, "connection", e); } + trace = new Exception(); } // setConnection /** @@ -470,6 +480,7 @@ public class Trx } } m_connection = null; + trace = null; m_active = false; fireAfterCloseEvent(); log.config(m_trxName); @@ -538,7 +549,7 @@ public class Trx public String toString() { StringBuilder sb = new StringBuilder("Trx["); - sb.append(getTrxName()) + sb.append(getDisplayName()) .append(",Active=").append(isActive()) .append("]"); return sb.toString(); @@ -664,6 +675,31 @@ public class Trx } } + public String getStrackTrace() + { + if (trace != null) + { + StringWriter stringWriter = new StringWriter(); + PrintWriter printWriter = new PrintWriter(stringWriter); + trace.printStackTrace(printWriter); + return stringWriter.getBuffer().toString(); + } + else + { + return ""; + } + } + + public String getDisplayName() + { + return m_displayName != null ? m_displayName : m_trxName; + } + + public void setDisplayName(String displayName) + { + m_displayName = displayName; + } + static class TrxMonitor implements Runnable { @@ -681,6 +717,10 @@ public class Trx if (since > trxs[i].getTimeout() * 1000) { trxs[i].log.log(Level.WARNING, "Transaction timeout. Name="+trxs[i].getTrxName() + ", timeout(sec)="+(since / 1000)); + if (trxs[i].trace != null) + { + trxs[i].log.log(Level.WARNING, "Transaction timeout. Trace:\n" + trxs[i].getStrackTrace()); + } trxs[i].rollbackAndCloseOnTimeout(); } } @@ -695,4 +735,21 @@ public class Trx ; } + @Override + protected void finalize() throws Throwable { + if (m_connection != null && trace != null) { + final Trx me = this; + Adempiere.getThreadPoolExecutor().schedule(new Runnable() { + @Override + public void run() { + if (me.m_connection != null && me.trace != null) { + log.log(Level.WARNING, "Trx Not Close: " + me.getStrackTrace()); + me.trace = null; + me.close(); + } + } + }, 2, TimeUnit.SECONDS); + } + super.finalize(); + } } // Trx diff --git a/org.adempiere.base/src/org/compiere/wf/MWFActivity.java b/org.adempiere.base/src/org/compiere/wf/MWFActivity.java index 32b4110713..206566f2e4 100644 --- a/org.adempiere.base/src/org/compiere/wf/MWFActivity.java +++ b/org.adempiere.base/src/org/compiere/wf/MWFActivity.java @@ -844,6 +844,8 @@ public class MWFActivity extends X_AD_WF_Activity implements Runnable } trx = Trx.get(get_TrxName(), true); + if (localTrx) + trx.setDisplayName(getClass().getName()+"_run"); Savepoint savepoint = null; diff --git a/org.adempiere.base/src/org/compiere/wf/MWorkflow.java b/org.adempiere.base/src/org/compiere/wf/MWorkflow.java index d4c0e0a83a..0d1577b623 100644 --- a/org.adempiere.base/src/org/compiere/wf/MWorkflow.java +++ b/org.adempiere.base/src/org/compiere/wf/MWorkflow.java @@ -678,7 +678,10 @@ public class MWorkflow extends X_AD_Workflow MWFProcess retValue = null; Trx localTrx = null; if (trxName == null) + { localTrx = Trx.get(Trx.createTrxName("WFP"), true); + localTrx.setDisplayName(getClass().getName()+"_start"); + } try { retValue = new MWFProcess (this, pi, trxName != null ? trxName : localTrx.getTrxName()); diff --git a/org.adempiere.pipo/src/org/adempiere/pipo/srv/PipoDictionaryService.java b/org.adempiere.pipo/src/org/adempiere/pipo/srv/PipoDictionaryService.java index d2c95dc92c..6d443c0fd8 100644 --- a/org.adempiere.pipo/src/org/adempiere/pipo/srv/PipoDictionaryService.java +++ b/org.adempiere.pipo/src/org/adempiere/pipo/srv/PipoDictionaryService.java @@ -45,6 +45,7 @@ public class PipoDictionaryService implements IDictionaryService { PackIn packIn = null; try { trxName = Trx.createTrxName("PipoDS"); + Trx.get(trxName, true).setDisplayName(getClass().getName()+"_merge"); packIn = new PackIn(); packIn.setPackageName(context.getBundle().getSymbolicName()); diff --git a/org.adempiere.plugin.utils/src/org/adempiere/plugin/utils/AbstractActivator.java b/org.adempiere.plugin.utils/src/org/adempiere/plugin/utils/AbstractActivator.java index e345feecdd..354e3b9db2 100644 --- a/org.adempiere.plugin.utils/src/org/adempiere/plugin/utils/AbstractActivator.java +++ b/org.adempiere.plugin.utils/src/org/adempiere/plugin/utils/AbstractActivator.java @@ -101,6 +101,7 @@ public abstract class AbstractActivator implements BundleActivator, ServiceTrack } trxName = Trx.createTrxName("ActSysTrx"); + Trx.get(trxName, true).setDisplayName(getClass().getName()+"_getLockPO"); sysconfig.set_TrxName(trxName); return sysconfig; } diff --git a/org.adempiere.plugin.utils/src/org/adempiere/plugin/utils/Incremental2PackActivator.java b/org.adempiere.plugin.utils/src/org/adempiere/plugin/utils/Incremental2PackActivator.java index 0541d11092..fabb12367c 100644 --- a/org.adempiere.plugin.utils/src/org/adempiere/plugin/utils/Incremental2PackActivator.java +++ b/org.adempiere.plugin.utils/src/org/adempiere/plugin/utils/Incremental2PackActivator.java @@ -129,6 +129,7 @@ public class Incremental2PackActivator extends AbstractActivator { .first(); if (firstImp == null) { Trx trx = Trx.get(Trx.createTrxName(), true); + trx.setDisplayName(getClass().getName()+"_packIn"); try { Env.getCtx().put("#AD_Client_ID", 0); diff --git a/org.adempiere.server/src/main/server/org/compiere/server/AlertProcessor.java b/org.adempiere.server/src/main/server/org/compiere/server/AlertProcessor.java index 0307527620..f10b8979f0 100644 --- a/org.adempiere.server/src/main/server/org/compiere/server/AlertProcessor.java +++ b/org.adempiere.server/src/main/server/org/compiere/server/AlertProcessor.java @@ -270,6 +270,7 @@ public class AlertProcessor extends AdempiereServer Trx trx = null; try { trx = Trx.get(Trx.createTrxName("AP_NU"), true); + trx.setDisplayName(getClass().getName()+"_"+m_model.getName()+"_notifyUsers"); // Notice int AD_Message_ID = 52244; /* TODO - Hardcoded message=notes */ MNote note = new MNote(getCtx(), AD_Message_ID, user_id, trx.getTrxName()); diff --git a/org.adempiere.server/src/main/server/org/compiere/server/Scheduler.java b/org.adempiere.server/src/main/server/org/compiere/server/Scheduler.java index 37c6b20419..cd13c4ff9b 100644 --- a/org.adempiere.server/src/main/server/org/compiere/server/Scheduler.java +++ b/org.adempiere.server/src/main/server/org/compiere/server/Scheduler.java @@ -115,6 +115,7 @@ public class Scheduler extends AdempiereServer try { m_trx = Trx.get(Trx.createTrxName("Scheduler"), true); + m_trx.setDisplayName(getClass().getName()+"_"+getModel().getName()+"_doWork"); m_summary.append(runProcess(process)); m_trx.commit(true); } diff --git a/org.adempiere.server/src/main/servlet/org/compiere/web/AdempiereMonitor.java b/org.adempiere.server/src/main/servlet/org/compiere/web/AdempiereMonitor.java index a232a31333..a56f0af651 100644 --- a/org.adempiere.server/src/main/servlet/org/compiere/web/AdempiereMonitor.java +++ b/org.adempiere.server/src/main/servlet/org/compiere/web/AdempiereMonitor.java @@ -957,8 +957,13 @@ public class AdempiereMonitor extends HttpServlet { line = new tr(); line.addElement(new th().addElement("Active Transaction ")); - line.addElement(new td().addElement("Name="+trx.getTrxName() - + ", StartTime=" + trx.getStartTime())); + td td = new td(); + td.setOnClick("var newwindow=window.open('','Popup', 'width=800,height=600');newwindow.document.write('" + escapeEcmaScript(trx.getDisplayName()) +"" + + "
" + escapeEcmaScript(trx.getStrackTrace()) + "
')"); + td.addElement("Name="+trx.getDisplayName() + ", StartTime=" + trx.getStartTime()); + td.setTitle("Click to see stack trace"); + td.setStyle("text-decoration: underline; color: blue"); + line.addElement(td); table.addElement(line); } } @@ -1247,4 +1252,14 @@ public class AdempiereMonitor extends HttpServlet return dirAccessList; } + + private static final String escapeEcmaScript(String input) { + input = input.replace("'", "\\'"); + input = input.replace("\"", "\\\""); + input = input.replace("\\", "\\\\"); + input = input.replace("/", "\\/"); + input = input.replace("\n", "\\n"); + input = input.replace("\t", "\\t"); + return input; + } } // AdempiereMonitor diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/FeedbackRequestWindow.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/FeedbackRequestWindow.java index 409dea2ace..aade1840b9 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/FeedbackRequestWindow.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/FeedbackRequestWindow.java @@ -260,6 +260,7 @@ public class FeedbackRequestWindow extends Window implements EventListener { String trxName = Trx.createTrxName("BDP"); Trx localTrx = Trx.get(trxName, true); //trx needs to be committed too + localTrx.setDisplayName(getClass().getName()+"_onSave"); try { if (cmd_save(localTrx)) diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/wf/WWFActivity.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/wf/WWFActivity.java index 79042066b4..0c53f7f96b 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/wf/WWFActivity.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/wf/WWFActivity.java @@ -634,6 +634,7 @@ public class WWFActivity extends ADForm implements EventListener Trx trx = null; try { trx = Trx.get(Trx.createTrxName("FWFA"), true); + trx.setDisplayName(getClass().getName()+"_onOK"); m_activity.set_TrxName(trx.getTrxName()); if (forward != null) diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/component/ADTreeOnDropListener.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/component/ADTreeOnDropListener.java index 72649cbcb9..761a5ba6c7 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/component/ADTreeOnDropListener.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/component/ADTreeOnDropListener.java @@ -160,6 +160,7 @@ public class ADTreeOnDropListener implements EventListener { // *** Save changes to disk Trx trx = Trx.get (Trx.createTrxName("ADTree"), true); + trx.setDisplayName(getClass().getName()+"_moveNode"); try { @SuppressWarnings("unused") diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/panel/ChangePasswordPanel.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/panel/ChangePasswordPanel.java index c25ff03a67..0743ed76f6 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/panel/ChangePasswordPanel.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/panel/ChangePasswordPanel.java @@ -316,6 +316,7 @@ public class ChangePasswordPanel extends Window implements EventListener { String trxName = Trx.createTrxName("ChangePasswordTrx"); trx = Trx.get(trxName, true); + trx.setDisplayName(getClass().getName()+"_validateChangePassword"); for (KeyNamePair clientKNPair : m_clientKNPairs) { diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/panel/ResetPasswordPanel.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/panel/ResetPasswordPanel.java index 6890fdfa20..38f69e62f3 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/panel/ResetPasswordPanel.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/panel/ResetPasswordPanel.java @@ -450,6 +450,7 @@ public class ResetPasswordPanel extends Window implements EventListener { String trxName = Trx.createTrxName("ResetPasswordTrx"); trx = Trx.get(trxName, true); + trx.setDisplayName(getClass().getName()+"_validateResetPassword"); for (MUser user : users) { diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/util/GridTabDataBinder.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/util/GridTabDataBinder.java index e03daa84fb..62c47ada68 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/util/GridTabDataBinder.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/util/GridTabDataBinder.java @@ -149,6 +149,7 @@ public class GridTabDataBinder implements ValueChangeListener { int recordId = gridTab.getKeyID(gridTab.getCurrentRow()); Trx trx = Trx.get(Trx.createTrxName(), true); + trx.setDisplayName(getClass().getName()+"_valueChange"); trx.start(); try { diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/window/WGadgets.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/window/WGadgets.java index 381d7a745c..dad87d73ba 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/window/WGadgets.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/window/WGadgets.java @@ -101,6 +101,7 @@ public class WGadgets extends Window implements EventListener{ if (panel.getButton("Ok").equals(event.getTarget())) { Trx trx = Trx.get(Trx.createTrxName("ManagedGadgets"), true); + trx.setDisplayName(getClass().getName()+"_onEvent_onOk"); try { trx.start(); for(MDashboardPreference pre : dirtyList.values()) { diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/window/WLocationDialog.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/window/WLocationDialog.java index ca842383ca..f096c9e5e7 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/window/WLocationDialog.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/window/WLocationDialog.java @@ -915,6 +915,7 @@ public class WLocationDialog extends Window implements EventListener private boolean action_OK() { Trx trx = Trx.get(Trx.createTrxName("WLocationDialog"), true); + trx.setDisplayName(getClass().getName()+"_action_Ok"); m_location.set_TrxName(trx.getTrxName()); m_location.setAddress1(txtAddress1.getValue()); m_location.setAddress2(txtAddress2.getValue()); diff --git a/org.adempiere.ui/src/org/compiere/apps/form/InOutGen.java b/org.adempiere.ui/src/org/compiere/apps/form/InOutGen.java index 7d6334ca6b..2ea36b9831 100644 --- a/org.adempiere.ui/src/org/compiere/apps/form/InOutGen.java +++ b/org.adempiere.ui/src/org/compiere/apps/form/InOutGen.java @@ -247,6 +247,7 @@ public class InOutGen extends GenForm if (log.isLoggable(Level.INFO)) log.info("M_Warehouse_ID=" + m_M_Warehouse_ID); String trxName = Trx.createTrxName("IOG"); Trx trx = Trx.get(trxName, true); //trx needs to be committed too + trx.setDisplayName(getClass().getName()+"_generate"); setSelectionActive(false); // prevents from being called twice statusBar.setStatusLine(Msg.getMsg(Env.getCtx(), "InOutGenerateGen")); diff --git a/org.adempiere.ui/src/org/compiere/apps/form/InvoiceGen.java b/org.adempiere.ui/src/org/compiere/apps/form/InvoiceGen.java index 1130f02ba3..e42bc79802 100644 --- a/org.adempiere.ui/src/org/compiere/apps/form/InvoiceGen.java +++ b/org.adempiere.ui/src/org/compiere/apps/form/InvoiceGen.java @@ -247,6 +247,7 @@ public class InvoiceGen extends GenForm String info = ""; String trxName = Trx.createTrxName("IVG"); Trx trx = Trx.get(trxName, true); //trx needs to be committed too + trx.setDisplayName(getClass().getName()+"_generate"); setSelectionActive(false); // prevents from being called twice statusBar.setStatusLine(Msg.getMsg(Env.getCtx(), "InvGenerateGen")); diff --git a/org.adempiere.ui/src/org/compiere/apps/form/Match.java b/org.adempiere.ui/src/org/compiere/apps/form/Match.java index 3cabc3f890..a1a32e76ed 100644 --- a/org.adempiere.ui/src/org/compiere/apps/form/Match.java +++ b/org.adempiere.ui/src/org/compiere/apps/form/Match.java @@ -206,6 +206,7 @@ public class Match // Create it String innerTrxName = Trx.createTrxName("Match"); Trx innerTrx = Trx.get(innerTrxName, true); + innerTrx.setDisplayName(getClass().getName()+"_cmd_process"); try{ if (createMatchRecord(invoice, M_InOutLine_ID, Line_ID, BigDecimal.valueOf(qty), innerTrxName)) diff --git a/org.adempiere.ui/src/org/compiere/apps/form/Merge.java b/org.adempiere.ui/src/org/compiere/apps/form/Merge.java index 4977ac1bba..bcc00c7727 100644 --- a/org.adempiere.ui/src/org/compiere/apps/form/Merge.java +++ b/org.adempiere.ui/src/org/compiere/apps/form/Merge.java @@ -114,8 +114,9 @@ public class Merge try { m_trx = Trx.get(Trx.createTrxName("merge"), true); + m_trx.setDisplayName(getClass().getName()+"_merge"); // - pstmt = DB.prepareStatement(sql, Trx.createTrxName()); + pstmt = DB.prepareStatement(sql, m_trx.getTrxName()); pstmt.setString(1, ColumnName); pstmt.setString(2, ColumnName); rs = pstmt.executeQuery(); diff --git a/org.idempiere.webservices/WEB-INF/src/com/trekglobal/ws/CompositeServiceImpl.java b/org.idempiere.webservices/WEB-INF/src/com/trekglobal/ws/CompositeServiceImpl.java index 36cb22cd20..c4fc137139 100644 --- a/org.idempiere.webservices/WEB-INF/src/com/trekglobal/ws/CompositeServiceImpl.java +++ b/org.idempiere.webservices/WEB-INF/src/com/trekglobal/ws/CompositeServiceImpl.java @@ -93,6 +93,7 @@ public class CompositeServiceImpl extends AbstractService implements CompositeSe String trxName = Trx.createTrxName(webServiceName); Trx trx = Trx.get(trxName, true); + trx.setDisplayName(getClass().getName()+"_"+webServiceName+"_compositeOperation"); try { modelADService.setLocalTrxName(trxName); diff --git a/org.idempiere.webservices/WEB-INF/src/org/idempiere/adinterface/ModelADServiceImpl.java b/org.idempiere.webservices/WEB-INF/src/org/idempiere/adinterface/ModelADServiceImpl.java index c2925f582a..08fb2ee9b1 100644 --- a/org.idempiere.webservices/WEB-INF/src/org/idempiere/adinterface/ModelADServiceImpl.java +++ b/org.idempiere.webservices/WEB-INF/src/org/idempiere/adinterface/ModelADServiceImpl.java @@ -214,6 +214,8 @@ public class ModelADServiceImpl extends AbstractService implements ModelADServic } trx = Trx.get(trxName, true); + if (manageTrx) + trx.setDisplayName(getClass().getName()+"_"+webServiceName+"_setDocAction"); Map requestCtx = getRequestCtx(); @@ -698,6 +700,8 @@ public class ModelADServiceImpl extends AbstractService implements ModelADServic } trx = Trx.get(trxName, true); + if (manageTrx) + trx.setDisplayName(getClass().getName()+"_"+webServiceName+"_deleteData"); // get the PO for the tablename and record ID MTable table = MTable.get(ctx, tableName); @@ -780,6 +784,8 @@ public class ModelADServiceImpl extends AbstractService implements ModelADServic } trx = Trx.get(trxName, true); + if (manageTrx) + trx.setDisplayName(getClass().getName()+"_"+webServiceName+"_createData"); // get the PO for the tablename and record ID @@ -892,6 +898,8 @@ public class ModelADServiceImpl extends AbstractService implements ModelADServic manageTrx = true; } trx = Trx.get(trxName, true); + if (manageTrx) + trx.setDisplayName(getClass().getName()+"_"+webServiceName+"_createUpdateData"); // get the PO for the tablename and record ID MTable table = MTable.get(ctx, tableName); @@ -1272,6 +1280,8 @@ public class ModelADServiceImpl extends AbstractService implements ModelADServic } trx = Trx.get(trxName, true); + if (manageTrx) + trx.setDisplayName(getClass().getName()+"_"+webServiceName+"_updateData"); @@ -1464,6 +1474,8 @@ public class ModelADServiceImpl extends AbstractService implements ModelADServic manageTrx = true; } trx = Trx.get(trxName, true); + if (manageTrx) + trx.setDisplayName(getClass().getName()+"_"+webServiceName+"_queryData"); StringBuilder sqlBuilder = new StringBuilder(role.addAccessSQL("SELECT * FROM " + tableName, tableName, true, true)); diff --git a/org.idempiere.webservices/WEB-INF/src/org/idempiere/adinterface/Process.java b/org.idempiere.webservices/WEB-INF/src/org/idempiere/adinterface/Process.java index 344359068f..0234a0e4da 100644 --- a/org.idempiere.webservices/WEB-INF/src/org/idempiere/adinterface/Process.java +++ b/org.idempiere.webservices/WEB-INF/src/org/idempiere/adinterface/Process.java @@ -340,6 +340,8 @@ public class Process { if (process.isJavaProcess() && !jasperreport) { Trx trx = trxName == null ? Trx.get(Trx.createTrxName("WebPrc"), true) : Trx.get(trxName, true); + if (trxName == null) + trx.setDisplayName(Process.class.getName()+"_runProcess"); try { processOK = process.processIt(pi, trx, false);