From 200eea43447cda467d2126b8c51f50a5031920d3 Mon Sep 17 00:00:00 2001 From: Diego Ruiz Date: Thu, 22 Jun 2017 12:27:19 +0200 Subject: [PATCH] 1008086 - External (non-plugin) 2Pack automation (NPE potential issue) --- .../plugin/utils/AbstractActivator.java | 13 +++++++---- .../plugin/utils/AdempiereActivator.java | 21 ++++++++++------- .../utils/Incremental2PackActivator.java | 23 +++++++++++-------- .../plugin/utils/Version2PackActivator.java | 21 ++++++++++------- 4 files changed, 49 insertions(+), 29 deletions(-) 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 3296fc9e8a..e345feecdd 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 @@ -21,6 +21,7 @@ import org.compiere.model.MSysConfig; import org.compiere.model.PO; import org.compiere.model.Query; import org.compiere.model.X_AD_Package_Imp; +import org.compiere.util.AdempiereSystemError; import org.compiere.util.CLogger; import org.compiere.util.DB; import org.compiere.util.Env; @@ -68,7 +69,7 @@ public abstract class AbstractActivator implements BundleActivator, ServiceTrack public abstract String getName(); - public boolean getDBLock() { + public boolean getDBLock() throws AdempiereSystemError { int timeout = MSysConfig.getIntValue(MSysConfig.AUTOMATIC_PACKIN_TIMEOUT, 120); int maxAttempts = MSysConfig.getIntValue(MSysConfig.AUTOMATIC_PACKIN_RETRIES, 5); boolean lockAcquired = false; @@ -86,15 +87,19 @@ public abstract class AbstractActivator implements BundleActivator, ServiceTrack Trx.get(trxName, false).close(); } - private boolean getDBLock(int timeout) { + private boolean getDBLock(int timeout) throws AdempiereSystemError { return DB.getDatabase().forUpdate(getLockPO(), timeout); } - private PO getLockPO() { + private PO getLockPO() throws AdempiereSystemError { MSysConfig sysconfig = new Query(Env.getCtx(), MSysConfig.Table_Name, "Name=? AND AD_Client_ID=0", null) .setParameters(MSysConfig.AUTOMATIC_PACKIN_PROCESSING) - .first(); + .firstOnly(); + if (sysconfig == null) { + throw new AdempiereSystemError(MSysConfig.AUTOMATIC_PACKIN_PROCESSING + " SysConfig does not exist"); + } + trxName = Trx.createTrxName("ActSysTrx"); sysconfig.set_TrxName(trxName); return sysconfig; diff --git a/org.adempiere.plugin.utils/src/org/adempiere/plugin/utils/AdempiereActivator.java b/org.adempiere.plugin.utils/src/org/adempiere/plugin/utils/AdempiereActivator.java index 2eeeb08dc4..ec5e72da24 100644 --- a/org.adempiere.plugin.utils/src/org/adempiere/plugin/utils/AdempiereActivator.java +++ b/org.adempiere.plugin.utils/src/org/adempiere/plugin/utils/AdempiereActivator.java @@ -14,6 +14,7 @@ import org.compiere.model.Query; import org.compiere.model.ServerStateChangeEvent; import org.compiere.model.ServerStateChangeListener; import org.compiere.model.X_AD_Package_Imp; +import org.compiere.util.AdempiereSystemError; import org.compiere.util.CLogger; import org.compiere.util.Env; import org.osgi.framework.BundleContext; @@ -56,14 +57,18 @@ public class AdempiereActivator extends AbstractActivator { q.setParameters(new Object[] { getName(), version + "%" }); X_AD_Package_Imp pkg = q.first(); if (pkg == null) { - if (getDBLock()) { - System.out.println("Installing " + getName() + " " + version + " ..."); - packIn(); - install(); - releaseLock(); - System.out.println(getName() + " " + version + " installed."); - } else { - logger.log(Level.SEVERE, "Could not acquire the DB lock to install:" + getName()); + try { + if (getDBLock()) { + System.out.println("Installing " + getName() + " " + version + " ..."); + packIn(); + install(); + releaseLock(); + System.out.println(getName() + " " + version + " installed."); + } else { + logger.log(Level.SEVERE, "Could not acquire the DB lock to install:" + getName()); + } + } catch (AdempiereSystemError e) { + e.printStackTrace(); } } else { if (logger.isLoggable(Level.INFO)) logger.info(getName() + " " + version + " was installed: " 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 43c05704f1..0541d11092 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 @@ -32,6 +32,7 @@ import org.compiere.model.Query; import org.compiere.model.ServerStateChangeEvent; import org.compiere.model.ServerStateChangeListener; import org.compiere.model.X_AD_Package_Imp; +import org.compiere.util.AdempiereSystemError; import org.compiere.util.CLogger; import org.compiere.util.Env; import org.compiere.util.Trx; @@ -184,18 +185,22 @@ public class Incremental2PackActivator extends AbstractActivator { } }); - if (getDBLock()) { - for(TwoPackEntry entry : list) { - if (!installedVersions.contains(entry.version)) { - if (!packIn(entry.url)) { - // stop processing further packages if one fail - break; + try { + if (getDBLock()) { + for(TwoPackEntry entry : list) { + if (!installedVersions.contains(entry.version)) { + if (!packIn(entry.url)) { + // stop processing further packages if one fail + break; + } } } + releaseLock(); + } else { + logger.log(Level.SEVERE, "Could not acquire the DB lock to install:" + getName()); } - releaseLock(); - } else { - logger.log(Level.SEVERE, "Could not acquire the DB lock to install:" + getName()); + } catch (AdempiereSystemError e) { + e.printStackTrace(); } } diff --git a/org.adempiere.plugin.utils/src/org/adempiere/plugin/utils/Version2PackActivator.java b/org.adempiere.plugin.utils/src/org/adempiere/plugin/utils/Version2PackActivator.java index 8a7e7204f9..ac6dba55b8 100644 --- a/org.adempiere.plugin.utils/src/org/adempiere/plugin/utils/Version2PackActivator.java +++ b/org.adempiere.plugin.utils/src/org/adempiere/plugin/utils/Version2PackActivator.java @@ -32,6 +32,7 @@ import org.compiere.model.Query; import org.compiere.model.ServerStateChangeEvent; import org.compiere.model.ServerStateChangeListener; import org.compiere.model.X_AD_Package_Imp; +import org.compiere.util.AdempiereSystemError; import org.compiere.util.CLogger; import org.compiere.util.Env; import org.compiere.util.Util; @@ -157,16 +158,20 @@ public class Version2PackActivator extends AbstractActivator { } }); - if (getDBLock()) { - for(TwoPackEntry entry : list) { - if (!packIn(entry.url)) { - // stop processing further packages if one fail - break; + try { + if (getDBLock()) { + for(TwoPackEntry entry : list) { + if (!packIn(entry.url)) { + // stop processing further packages if one fail + break; + } } + releaseLock(); + } else { + logger.log(Level.SEVERE, "Could not acquire the DB lock to install:" + getName()); } - releaseLock(); - } else { - logger.log(Level.SEVERE, "Could not acquire the DB lock to install:" + getName()); + } catch (AdempiereSystemError e) { + e.printStackTrace(); } }