[ 1854455 ] PO.initPO doesn't have transaction support

This commit is contained in:
Heng Sin Low 2007-12-19 22:43:55 +00:00
parent 52548605ec
commit f61dd20986
5 changed files with 48 additions and 10 deletions

View File

@ -594,7 +594,7 @@ public class MTable extends X_AD_Table
return null; return null;
// //
PO po = null; PO po = null;
POInfo info = POInfo.getPOInfo(getCtx(), getAD_Table_ID()); POInfo info = POInfo.getPOInfo(getCtx(), getAD_Table_ID(), trxName);
if (info == null) return null; if (info == null) return null;
StringBuffer sqlBuffer = info.buildSelect(); StringBuffer sqlBuffer = info.buildSelect();
sqlBuffer.append(" WHERE ").append(whereClause); sqlBuffer.append(" WHERE ").append(whereClause);

View File

@ -115,6 +115,8 @@ public abstract class PO
if (ctx == null) if (ctx == null)
throw new IllegalArgumentException ("No Context"); throw new IllegalArgumentException ("No Context");
p_ctx = ctx; p_ctx = ctx;
m_trxName = trxName;
p_info = initPO(ctx); p_info = initPO(ctx);
if (p_info == null || p_info.getTableName() == null) if (p_info == null || p_info.getTableName() == null)
throw new IllegalArgumentException ("Invalid PO Info - " + p_info); throw new IllegalArgumentException ("Invalid PO Info - " + p_info);
@ -122,7 +124,7 @@ public abstract class PO
int size = p_info.getColumnCount(); int size = p_info.getColumnCount();
m_oldValues = new Object[size]; m_oldValues = new Object[size];
m_newValues = new Object[size]; m_newValues = new Object[size];
m_trxName = trxName;
if (rs != null) if (rs != null)
load(rs); // will not have virtual columns load(rs); // will not have virtual columns
else else

View File

@ -42,6 +42,18 @@ public class POInfo implements Serializable
* @return POInfo * @return POInfo
*/ */
public static POInfo getPOInfo (Properties ctx, int AD_Table_ID) public static POInfo getPOInfo (Properties ctx, int AD_Table_ID)
{
return getPOInfo(ctx, AD_Table_ID, null);
}
/**
* POInfo Factory
* @param ctx context
* @param AD_Table_ID AD_Table_ID
* @param trxName Transaction name
* @return POInfo
*/
public static POInfo getPOInfo (Properties ctx, int AD_Table_ID, String trxName)
{ {
Integer key = new Integer(AD_Table_ID); Integer key = new Integer(AD_Table_ID);
POInfo retValue = (POInfo)s_cache.get(key); POInfo retValue = (POInfo)s_cache.get(key);
@ -67,11 +79,23 @@ public class POInfo implements Serializable
* @param baseLanguageOnly get in base language * @param baseLanguageOnly get in base language
*/ */
private POInfo (Properties ctx, int AD_Table_ID, boolean baseLanguageOnly) private POInfo (Properties ctx, int AD_Table_ID, boolean baseLanguageOnly)
{
this(ctx, AD_Table_ID, baseLanguageOnly, null);
}
/**************************************************************************
* Create Persistent Info
* @param ctx context
* @param AD_Table_ID AD_ Table_ID
* @param baseLanguageOnly get in base language
* @param trxName transaction name
*/
private POInfo (Properties ctx, int AD_Table_ID, boolean baseLanguageOnly, String trxName)
{ {
m_ctx = ctx; m_ctx = ctx;
m_AD_Table_ID = AD_Table_ID; m_AD_Table_ID = AD_Table_ID;
boolean baseLanguage = baseLanguageOnly ? true : Env.isBaseLanguage(m_ctx, "AD_Table"); boolean baseLanguage = baseLanguageOnly ? true : Env.isBaseLanguage(m_ctx, "AD_Table");
loadInfo (baseLanguage); loadInfo (baseLanguage, trxName);
} // PInfo } // PInfo
/** Context */ /** Context */
@ -91,8 +115,9 @@ public class POInfo implements Serializable
/** /**
* Load Table/Column Info * Load Table/Column Info
* @param baseLanguage in English * @param baseLanguage in English
* @param trxName
*/ */
private void loadInfo (boolean baseLanguage) private void loadInfo (boolean baseLanguage, String trxName)
{ {
ArrayList<POInfoColumn> list = new ArrayList<POInfoColumn>(15); ArrayList<POInfoColumn> list = new ArrayList<POInfoColumn>(15);
StringBuffer sql = new StringBuffer(); StringBuffer sql = new StringBuffer();
@ -116,9 +141,10 @@ public class POInfo implements Serializable
if (!baseLanguage) if (!baseLanguage)
sql.append(" AND e.AD_Language='").append(Env.getAD_Language(m_ctx)).append("'"); sql.append(" AND e.AD_Language='").append(Env.getAD_Language(m_ctx)).append("'");
// //
PreparedStatement pstmt = null;
try try
{ {
PreparedStatement pstmt = DB.prepareStatement(sql.toString(), null); pstmt = DB.prepareStatement(sql.toString(), trxName);
pstmt.setInt(1, m_AD_Table_ID); pstmt.setInt(1, m_AD_Table_ID);
ResultSet rs = pstmt.executeQuery(); ResultSet rs = pstmt.executeQuery();
while (rs.next()) while (rs.next())
@ -158,13 +184,23 @@ public class POInfo implements Serializable
IsTranslated, IsEncrypted); IsTranslated, IsEncrypted);
list.add(col); list.add(col);
} }
rs.close(); rs.close();
pstmt.close();
} }
catch (SQLException e) catch (SQLException e)
{ {
CLogger.get().log(Level.SEVERE, sql.toString(), e); CLogger.get().log(Level.SEVERE, sql.toString(), e);
} }
finally
{
if( pstmt != null)
{
try
{
pstmt.close();
}
catch (SQLException e) {}
}
}
// convert to array // convert to array
m_columns = new POInfoColumn[list.size()]; m_columns = new POInfoColumn[list.size()];
list.toArray(m_columns); list.toArray(m_columns);

View File

@ -94,7 +94,7 @@ public class POIterator implements Iterator<PO> {
} else { } else {
if (keyWhereClause == null) { if (keyWhereClause == null) {
String[] keys = table.getKeyColumns(); String[] keys = table.getKeyColumns();
POInfo info = POInfo.getPOInfo(Env.getCtx(), table.getAD_Table_ID()); POInfo info = POInfo.getPOInfo(Env.getCtx(), table.getAD_Table_ID(), trxName);
if (info == null) return null; if (info == null) return null;
StringBuffer sqlBuffer = info.buildSelect(); StringBuffer sqlBuffer = info.buildSelect();
sqlBuffer.append(" WHERE "); sqlBuffer.append(" WHERE ");

View File

@ -89,7 +89,7 @@ public class Query {
public List<PO> list() throws SQLException { public List<PO> list() throws SQLException {
List<PO> list = new ArrayList<PO>(); List<PO> list = new ArrayList<PO>();
POInfo info = POInfo.getPOInfo(Env.getCtx(), table.getAD_Table_ID()); POInfo info = POInfo.getPOInfo(Env.getCtx(), table.getAD_Table_ID(), trxName);
if (info == null) return null; if (info == null) return null;
StringBuffer sqlBuffer = info.buildSelect(); StringBuffer sqlBuffer = info.buildSelect();
if (whereClause != null && whereClause.trim().length() > 0) if (whereClause != null && whereClause.trim().length() > 0)
@ -210,7 +210,7 @@ public class Query {
* @throws SQLException * @throws SQLException
*/ */
public POResultSet scroll() throws SQLException { public POResultSet scroll() throws SQLException {
POInfo info = POInfo.getPOInfo(Env.getCtx(), table.getAD_Table_ID()); POInfo info = POInfo.getPOInfo(Env.getCtx(), table.getAD_Table_ID(), trxName);
if (info == null) return null; if (info == null) return null;
StringBuffer sqlBuffer = info.buildSelect(); StringBuffer sqlBuffer = info.buildSelect();
if (whereClause != null && whereClause.trim().length() > 0) if (whereClause != null && whereClause.trim().length() > 0)