BF [ 1885496 ] Performance NEEDS - for MTableScriptValidator

This commit is contained in:
teo_sarca 2008-02-12 11:51:59 +00:00
parent e235d6daaf
commit 1de46accf4
1 changed files with 32 additions and 7 deletions

View File

@ -17,16 +17,23 @@
*****************************************************************************/ *****************************************************************************/
package org.compiere.model; package org.compiere.model;
import java.sql.*; import java.sql.PreparedStatement;
import java.util.*; import java.sql.ResultSet;
import java.util.logging.*; import java.util.ArrayList;
import java.util.Properties;
import java.util.logging.Level;
import org.compiere.util.*; import org.compiere.util.CCache;
import org.compiere.util.CLogger;
import org.compiere.util.DB;
/** /**
* Table Validator Scripts * Table Validator Scripts
* @author Carlos Ruiz * @author Carlos Ruiz
* @version $Id: MTableScriptValidator.java * @version $Id: MTableScriptValidator.java
*
* @author Teo Sarca, SC ARHIPAC SERVICE SRL
* <li>BF [ 1885496 ] Performance NEEDS
*/ */
public class MTableScriptValidator extends X_AD_Table_ScriptValidator public class MTableScriptValidator extends X_AD_Table_ScriptValidator
{ {
@ -54,11 +61,18 @@ public class MTableScriptValidator extends X_AD_Table_ScriptValidator
* @param ctx context * @param ctx context
* @param table_id AD_Table_ID * @param table_id AD_Table_ID
* @param event Event * @param event Event
* @return array of MTableScriptValidator * @return array of MTableScriptValidator or null if error or no validators found
*/ */
public static ArrayList<MTableScriptValidator> getModelValidatorRules (Properties ctx, int ad_table_id, String event) public static ArrayList<MTableScriptValidator> getModelValidatorRules (Properties ctx, int ad_table_id, String event)
{ {
ArrayList<MTableScriptValidator> mvrs = new ArrayList<MTableScriptValidator>(); // Try cache
String key = ""+ad_table_id+"_"+event;
ArrayList<MTableScriptValidator> mvrs = s_cacheTableEvent.get(key);
if (mvrs != null)
return mvrs;
//
// Fetch now
mvrs = new ArrayList<MTableScriptValidator>();
MTableScriptValidator rule = null; MTableScriptValidator rule = null;
String sql = "SELECT * FROM AD_Table_ScriptValidator WHERE AD_Table_ID=? AND EventModelValidator=? AND IsActive='Y' ORDER BY SeqNo"; String sql = "SELECT * FROM AD_Table_ScriptValidator WHERE AD_Table_ID=? AND EventModelValidator=? AND IsActive='Y' ORDER BY SeqNo";
PreparedStatement pstmt = null; PreparedStatement pstmt = null;
@ -72,17 +86,24 @@ public class MTableScriptValidator extends X_AD_Table_ScriptValidator
while (rs.next ()) { while (rs.next ()) {
rule = new MTableScriptValidator (ctx, rs, null); rule = new MTableScriptValidator (ctx, rs, null);
mvrs.add(rule); mvrs.add(rule);
// Cache
s_cache.put(rule.get_ID(), rule);
} }
} }
catch (Exception e) catch (Exception e)
{ {
s_log.log(Level.SEVERE, sql, e); s_log.log(Level.SEVERE, sql, e);
mvrs = null;
} }
finally { finally {
DB.close(rs, pstmt); DB.close(rs, pstmt);
rs = null; pstmt = null; rs = null; pstmt = null;
} }
// Store to cache
if (mvrs != null)
s_cacheTableEvent.put(key, mvrs);
//
if (mvrs != null && mvrs.size() > 0) if (mvrs != null && mvrs.size() > 0)
return mvrs; return mvrs;
else else
@ -90,7 +111,11 @@ public class MTableScriptValidator extends X_AD_Table_ScriptValidator
} // getModelValidatorLoginRules } // getModelValidatorLoginRules
/** Cache */ /** Cache */
private static CCache<Integer,MTableScriptValidator> s_cache = new CCache<Integer,MTableScriptValidator>("AD_Table_ScriptValidator", 20); private static CCache<Integer,MTableScriptValidator> s_cache
= new CCache<Integer,MTableScriptValidator>(Table_Name, 20);
/** Cache / Table Event */
private static CCache<String,ArrayList<MTableScriptValidator>> s_cacheTableEvent
= new CCache<String,ArrayList<MTableScriptValidator>>(Table_Name+"_TableEvent", 20);
/** Static Logger */ /** Static Logger */
private static CLogger s_log = CLogger.getCLogger (MTableScriptValidator.class); private static CLogger s_log = CLogger.getCLogger (MTableScriptValidator.class);