IDEMPIERE-3870 PackIn issue with transactions

This commit is contained in:
Carlos Ruiz 2019-01-15 18:38:01 +01:00
parent 3456ab5b6b
commit 02009bc22d
6 changed files with 26 additions and 9 deletions

View File

@ -93,7 +93,7 @@ public class GenericPO extends PO {
PropertiesWrapper wrapper = (PropertiesWrapper)ctx;
p_ctx = wrapper.source;
tableName = wrapper.tableName;
tableID = MTable.getTable_ID(tableName);
tableID = MTable.getTable_ID(tableName, this.get_TrxName());
// log.info("Table_ID: "+Table_ID);
POInfo poi = POInfo.getPOInfo(ctx, tableID, this.get_TrxName());
return poi;

View File

@ -206,6 +206,13 @@ public interface AdempiereDatabase
public String TO_NUMBER (BigDecimal number, int displayType);
/**
* Return next sequence this Sequence
* @param Sequence Name
* @param Transaction
*/
public int getNextID(String Name, String trxName);
/**
* Return next sequence this Sequence
* @param Sequence Name

View File

@ -58,7 +58,7 @@ public class MTable extends X_AD_Table
/**
*
*/
private static final long serialVersionUID = 7527235342324308477L;
private static final long serialVersionUID = 4974471096496488963L;
public final static int MAX_OFFICIAL_ID = 999999;
@ -614,19 +614,22 @@ public class MTable extends X_AD_Table
} // getSQLCreate
// globalqss
public static int getTable_ID(String tableName) {
return getTable_ID(tableName, null);
}
/**
* Grant independence to GenerateModel from AD_Table_ID
* @param String tableName
* @return int retValue
*/
public static int getTable_ID(String tableName) {
public static int getTable_ID(String tableName, String trxName) {
int retValue = 0;
String SQL = "SELECT AD_Table_ID FROM AD_Table WHERE tablename = ?";
PreparedStatement pstmt = null;
ResultSet rs = null;
try
{
pstmt = DB.prepareStatement(SQL, null);
pstmt = DB.prepareStatement(SQL, trxName);
pstmt.setString(1, tableName);
rs = pstmt.executeQuery();
if (rs.next())

View File

@ -1829,11 +1829,11 @@ public final class DB
if(SYSTEM_NATIVE_SEQUENCE && !adempiereSys)
{
int m_sequence_id = CConnection.get().getDatabase().getNextID(TableName+"_SQ");
int m_sequence_id = CConnection.get().getDatabase().getNextID(TableName+"_SQ", trxName);
if (m_sequence_id == -1) {
// try to create the sequence and try again
MSequence.createTableSequence(Env.getCtx(), TableName, trxName, true);
m_sequence_id = CConnection.get().getDatabase().getNextID(TableName+"_SQ");
m_sequence_id = CConnection.get().getDatabase().getNextID(TableName+"_SQ", trxName);
}
return m_sequence_id;
}

View File

@ -1248,8 +1248,12 @@ public class DB_Oracle implements AdempiereDatabase
return m_convert;
}
public int getNextID(String Name) {
int m_sequence_id = DB.getSQLValueEx(null, "SELECT "+Name.toUpperCase()+".nextval FROM DUAL");
public int getNextID(String name) {
return getNextID(name, null);
}
public int getNextID(String name, String trxName) {
int m_sequence_id = DB.getSQLValueEx(trxName, "SELECT "+name.toUpperCase()+".nextval FROM DUAL");
return m_sequence_id;
}

View File

@ -966,8 +966,11 @@ public class DB_PostgreSQL implements AdempiereDatabase
}
public int getNextID(String name) {
return getNextID(name, null);
}
int m_sequence_id = DB.getSQLValueEx(null, "SELECT nextval('"+name.toLowerCase()+"')");
public int getNextID(String name, String trxName) {
int m_sequence_id = DB.getSQLValueEx(trxName, "SELECT nextval('"+name.toLowerCase()+"')");
return m_sequence_id;
}