IDEMPIERE-4072 iDempiere Monitor: Implement server and cache details for cluster node. Fixed multiple message cache instance. Improve naming of cache.

This commit is contained in:
Heng Sin Low 2019-10-19 07:28:07 +08:00
parent 1106927690
commit 31dd08b595
13 changed files with 37 additions and 32 deletions

View File

@ -137,7 +137,7 @@ public class MAcctSchema extends X_C_AcctSchema
} // getClientAcctSchema } // getClientAcctSchema
/** Cache of Client AcctSchema Arrays **/ /** Cache of Client AcctSchema Arrays **/
private static CCache<Integer,MAcctSchema[]> s_schema = new CCache<Integer,MAcctSchema[]>(I_AD_ClientInfo.Table_Name, 3, 120, true); // 3 clients private static CCache<Integer,MAcctSchema[]> s_schema = new CCache<Integer,MAcctSchema[]>(I_AD_ClientInfo.Table_Name, I_AD_ClientInfo.Table_Name+"|MAcctSchema[]", 3, 120, true); // 3 clients
/** Cache of AcctSchemas **/ /** Cache of AcctSchemas **/
private static CCache<Integer,MAcctSchema> s_cache = new CCache<Integer,MAcctSchema>(Table_Name, 3, 120, true); // 3 accounting schemas private static CCache<Integer,MAcctSchema> s_cache = new CCache<Integer,MAcctSchema>(Table_Name, 3, 120, true); // 3 accounting schemas

View File

@ -83,7 +83,7 @@ public class MAlertProcessor extends X_AD_AlertProcessor
} // MAlertProcessor } // MAlertProcessor
/** Cache: AD_AlertProcessor -> Alerts array */ /** Cache: AD_AlertProcessor -> Alerts array */
private static CCache<Integer, MAlert[]> s_cacheAlerts = new CCache<Integer, MAlert[]>(I_AD_Alert.Table_Name, "AD_Alert_ForProcessor", 10, false); private static CCache<Integer, MAlert[]> s_cacheAlerts = new CCache<Integer, MAlert[]>(I_AD_Alert.Table_Name, "AD_Alert|AlertProcessor", 10, false);
/** /**
* Get Server ID * Get Server ID

View File

@ -113,11 +113,12 @@ public class MCountry extends X_C_Country
* Set Default Language to Client Language * Set Default Language to Client Language
* @param ctx context * @param ctx context
*/ */
private static void loadAllCountries (Properties ctx) private static synchronized void loadAllCountries (Properties ctx)
{ {
MClient client = MClient.get (ctx); MClient client = MClient.get (ctx);
MLanguage lang = MLanguage.get(ctx, client.getAD_Language()); MLanguage lang = MLanguage.get(ctx, client.getAD_Language());
// //
if (s_countries == null)
s_countries = new CCache<Integer,MCountry>(Table_Name, 250); s_countries = new CCache<Integer,MCountry>(Table_Name, 250);
List<MCountry> countries = new Query(ctx, Table_Name, "", null) List<MCountry> countries = new Query(ctx, Table_Name, "", null)
.setOnlyActiveRecords(true) .setOnlyActiveRecords(true)
@ -183,7 +184,7 @@ public class MCountry extends X_C_Country
/** Country Cache */ /** Country Cache */
private static CCache<Integer,MCountry> s_countries = null; private static CCache<Integer,MCountry> s_countries = null;
/** Default Country */ /** Default Country */
private static CCache<Integer,MCountry> s_default = new CCache<Integer,MCountry>(Table_Name, 3); private static CCache<Integer,MCountry> s_default = new CCache<Integer,MCountry>(Table_Name, Table_Name+"|Default", 3);
/** Static Logger */ /** Static Logger */
private static CLogger s_log = CLogger.getCLogger (MCountry.class); private static CLogger s_log = CLogger.getCLogger (MCountry.class);
// Default DisplaySequence */ // Default DisplaySequence */

View File

@ -106,7 +106,7 @@ public class MProcess extends X_AD_Process
/** Cache ID */ /** Cache ID */
private static CCache<Integer,MProcess> s_cache = new CCache<Integer,MProcess>(Table_Name, 20); private static CCache<Integer,MProcess> s_cache = new CCache<Integer,MProcess>(Table_Name, 20);
/** Cache UUID */ /** Cache UUID */
private static CCache<String,MProcess> s_cacheUU = new CCache<String,MProcess>(Table_Name, 20); private static CCache<String,MProcess> s_cacheUU = new CCache<String,MProcess>(Table_Name, Table_Name+"|AD_Process_UU", 20);
/************************************************************************** /**************************************************************************

View File

@ -115,7 +115,7 @@ public class MProductCategory extends X_M_Product_Category
/** Categopry Cache */ /** Categopry Cache */
private static CCache<Integer,MProductCategory> s_cache = new CCache<Integer,MProductCategory>(Table_Name, 20); private static CCache<Integer,MProductCategory> s_cache = new CCache<Integer,MProductCategory>(Table_Name, 20);
/** Product Cache */ /** Product Cache */
private static CCache<Integer,Integer> s_products = new CCache<Integer,Integer>(I_M_Product.Table_Name, Table_Name + ".M_Product", 100); private static CCache<Integer,Integer> s_products = new CCache<Integer,Integer>(I_M_Product.Table_Name, Table_Name + "|M_Product", 100);
/** Static Logger */ /** Static Logger */
private static CLogger s_log = CLogger.getCLogger (MProductCategory.class); private static CLogger s_log = CLogger.getCLogger (MProductCategory.class);

View File

@ -51,7 +51,7 @@ public class MStatusLine extends X_AD_StatusLine
private static CLogger s_log = CLogger.getCLogger(MStatusLine.class); private static CLogger s_log = CLogger.getCLogger(MStatusLine.class);
/** Status Line Cache */ /** Status Line Cache */
private static CCache<String, MStatusLine> s_cache = new CCache<String, MStatusLine>(Table_Name, 10); private static CCache<String, MStatusLine> s_cache = new CCache<String, MStatusLine>(Table_Name, 10);
private static CCache<String, MStatusLine[]> s_cachew = new CCache<String, MStatusLine[]>(Table_Name, 10); private static CCache<String, MStatusLine[]> s_cachew = new CCache<String, MStatusLine[]>(Table_Name, Table_Name+"|MStatusLine[]", 10);
/** /**
* Standard Constructor * Standard Constructor

View File

@ -1890,7 +1890,7 @@ public abstract class PO
} // setAD_User_ID } // setAD_User_ID
/** Cache */ /** Cache */
private static CCache<String,String> trl_cache = new CCache<String,String>("po_trl", 5); private static CCache<String,String> trl_cache = new CCache<String,String>("PO_Trl", 5);
public String get_Translation (String columnName, String AD_Language) public String get_Translation (String columnName, String AD_Language)
{ {

View File

@ -1936,7 +1936,7 @@ public final class Env
/** Window Cache */ /** Window Cache */
private static CCache<Integer,GridWindowVO> s_windowsvo private static CCache<Integer,GridWindowVO> s_windowsvo
= new CCache<Integer,GridWindowVO>(I_AD_Window.Table_Name, 10); = new CCache<Integer,GridWindowVO>(I_AD_Window.Table_Name, I_AD_Window.Table_Name+"|GridWindowVO", 10);
/** /**
* Get Window Model * Get Window Model

View File

@ -21,11 +21,14 @@ import java.sql.PreparedStatement;
import java.sql.ResultSet; import java.sql.ResultSet;
import java.sql.SQLException; import java.sql.SQLException;
import java.text.MessageFormat; import java.text.MessageFormat;
import java.util.HashMap;
import java.util.Iterator; import java.util.Iterator;
import java.util.Map;
import java.util.Properties; import java.util.Properties;
import java.util.logging.Level; import java.util.logging.Level;
import org.compiere.Adempiere; import org.compiere.Adempiere;
import org.compiere.model.I_AD_Element;
import org.compiere.model.I_AD_Message; import org.compiere.model.I_AD_Message;
/** /**
@ -67,18 +70,18 @@ public final class Msg
} // Mag } // Mag
/** The Map */ /** The Map */
private CCache<String,CCache<String,String>> m_languages private Map<String,CCache<String,String>> m_languages
= new CCache<String,CCache<String,String>>(null, "msg_lang", 2, 0, false); = new HashMap<String, CCache<String,String>>();
private CCache<String,CCache<String,String>> m_elementCache private Map<String,CCache<String,String>> m_elementCache
= new CCache<String,CCache<String,String>>(null, "msg_element", 2, 0, false); = new HashMap<String,CCache<String,String>>();
/** /**
* Get Language specific Message Map * Get Language specific Message Map
* @param ad_language Language Key * @param ad_language Language Key
* @return HashMap of Language * @return HashMap of Language
*/ */
private CCache<String,String> getMsgMap (String ad_language) private synchronized CCache<String,String> getMsgMap (String ad_language)
{ {
String AD_Language = ad_language; String AD_Language = ad_language;
if (AD_Language == null || AD_Language.length() == 0) if (AD_Language == null || AD_Language.length() == 0)
@ -89,7 +92,7 @@ public final class Msg
return retValue; return retValue;
// Load Language // Load Language
retValue = initMsg(AD_Language); retValue = initMsg(AD_Language, retValue);
if (retValue != null) if (retValue != null)
{ {
m_languages.put(AD_Language, retValue); m_languages.put(AD_Language, retValue);
@ -98,17 +101,17 @@ public final class Msg
return retValue; return retValue;
} // getMsgMap } // getMsgMap
private CCache<String,String> getElementMap (String ad_language) private synchronized CCache<String,String> getElementMap (String ad_language)
{ {
String AD_Language = ad_language; String AD_Language = ad_language;
if (AD_Language == null || AD_Language.length() == 0) if (AD_Language == null || AD_Language.length() == 0)
AD_Language = Language.getBaseAD_Language(); AD_Language = Language.getBaseAD_Language();
// Do we have the language ? // Do we have the language ?
CCache<String,String> retValue = (CCache<String,String>)m_elementCache.get(AD_Language); CCache<String,String> retValue = (CCache<String,String>)m_elementCache.get(AD_Language);
if (retValue != null && retValue.size() > 0) if (retValue != null)
return retValue; return retValue;
retValue = new CCache<String, String>("element", 100, 0, false, 0); retValue = new CCache<String, String>(I_AD_Element.Table_Name, I_AD_Element.Table_Name + "|" + AD_Language, 100, 0, false, 0);
m_elementCache.put(AD_Language, retValue); m_elementCache.put(AD_Language, retValue);
return retValue; return retValue;
} }
@ -121,10 +124,10 @@ public final class Msg
* @param AD_Language Language * @param AD_Language Language
* @return Cache HashMap * @return Cache HashMap
*/ */
private CCache<String,String> initMsg (String AD_Language) private CCache<String,String> initMsg (String AD_Language, CCache<String,String> msg)
{ {
// Trace.printStack(); if (msg == null)
CCache<String,String> msg = new CCache<String,String>(I_AD_Message.Table_Name, MAP_SIZE, 0, false, 0); msg = new CCache<String,String>(I_AD_Message.Table_Name, I_AD_Message.Table_Name + "|" + AD_Language, MAP_SIZE, 0, false, 0);
// //
if (!DB.isConnected()) if (!DB.isConnected())
{ {
@ -183,7 +186,7 @@ public final class Msg
/** /**
* Reset Message cache * Reset Message cache
*/ */
public void reset() public synchronized void reset()
{ {
if (m_languages == null) if (m_languages == null)
return; return;
@ -195,14 +198,13 @@ public final class Msg
CCache<String, String> hm = iterator.next(); CCache<String, String> hm = iterator.next();
hm.reset(); hm.reset();
} }
m_languages.clear();
} // reset } // reset
/** /**
* Return an array of the installed Languages * Return an array of the installed Languages
* @return Array of loaded Languages or null * @return Array of loaded Languages or null
*/ */
public String[] getLanguages() public synchronized String[] getLanguages()
{ {
if (m_languages == null) if (m_languages == null)
return null; return null;
@ -216,11 +218,11 @@ public final class Msg
* @param language Language code * @param language Language code
* @return true, if language is loaded * @return true, if language is loaded
*/ */
public boolean isLoaded (String language) public synchronized boolean isLoaded (String language)
{ {
if (m_languages == null) if (m_languages == null)
return false; return false;
return m_languages.containsKey(language); return m_languages.get(language) != null && !m_languages.get(language).isEmpty();
} // isLoaded } // isLoaded
/** /**

View File

@ -145,9 +145,9 @@ public class MWorkflow extends X_AD_Workflow
/** Single Cache */ /** Single Cache */
private static CCache<String,MWorkflow> s_cache = new CCache<String,MWorkflow>(Table_Name, 20); private static CCache<String,MWorkflow> s_cache = new CCache<String,MWorkflow>(Table_Name, Table_Name+"|Language_Workflow", 20);
/** Document Value Cache */ /** Document Value Cache */
private static CCache<String,MWorkflow[]> s_cacheDocValue = new CCache<String,MWorkflow[]> (Table_Name, Table_Name+"_Document_Value", 5); private static CCache<String,MWorkflow[]> s_cacheDocValue = new CCache<String,MWorkflow[]> (Table_Name, Table_Name+"|AD_Client_Table", 5);
/** Static Logger */ /** Static Logger */
private static CLogger s_log = CLogger.getCLogger (MWorkflow.class); private static CLogger s_log = CLogger.getCLogger (MWorkflow.class);

View File

@ -1455,6 +1455,8 @@ public class AdempiereMonitor extends HttpServlet
} }
for (CacheInfo ccache : instances) for (CacheInfo ccache : instances)
{ {
if (ccache.getName().endsWith("|CCacheListener"))
continue;
line = new tr(); line = new tr();
line.addElement(new td().addElement(WebEnv.getCellContent(ccache.getName()))); line.addElement(new td().addElement(WebEnv.getCellContent(ccache.getName())));
line.addElement(new td().addElement(WebEnv.getCellContent(ccache.getTableName()))); line.addElement(new td().addElement(WebEnv.getCellContent(ccache.getTableName())));

View File

@ -291,7 +291,7 @@ public final class AEnv
CCache<Integer,GridWindowVO> cache = windowCache.get(sessionID); CCache<Integer,GridWindowVO> cache = windowCache.get(sessionID);
if (cache == null) if (cache == null)
{ {
cache = new CCache<Integer, GridWindowVO>(I_AD_Window.Table_Name, 10); cache = new CCache<Integer, GridWindowVO>(I_AD_Window.Table_Name, I_AD_Window.Table_Name+"|GridWindowVO|Session", 10);
windowCache.put(sessionID, cache); windowCache.put(sessionID, cache);
} }
cache.put(AD_Window_ID, mWindowVO); cache.put(AD_Window_ID, mWindowVO);

View File

@ -901,7 +901,7 @@ ContextMenuListener, IZoomableEditor
private WTableDirEditor editor; private WTableDirEditor editor;
protected CCacheListener(String tableName, WTableDirEditor editor) { protected CCacheListener(String tableName, WTableDirEditor editor) {
super(tableName, tableName, 0, true); super(tableName, tableName+"|CCacheListener", 0, 0, true);
this.editor = editor; this.editor = editor;
} }