Package com.jalios.jcms
Class CacheManager
- java.lang.Object
-
- com.jalios.jcms.db.BasicDBListener
-
- com.jalios.jcms.db.BasicDBListenerStoreListener
-
- com.jalios.jcms.CacheManager
-
- All Implemented Interfaces:
DBConstants
,DBListener
,JcmsConstants
,PluginComponent
,StoreListener
,JaliosConstants
,java.io.Serializable
,java.util.EventListener
,javax.servlet.http.HttpSessionBindingListener
public class CacheManager extends BasicDBListenerStoreListener implements javax.servlet.http.HttpSessionBindingListener, JcmsConstants, java.io.Serializable
This class manages the cache of content fragments.Cache entries can be invalidated either manually (see clearContent() method), or when a timeout is reached or when a mutation occurs on a set of (Storable) classes.
- Since:
- jcms-3.0
- See Also:
- Serialized Form
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static class
CacheManager.CacheEntry
-
Field Summary
Fields Modifier and Type Field Description static java.lang.String
ATTR_CACHE_PREFIX
Deprecated.since 10.0.7 / JCMS-9927static java.lang.String
CACHES_DIR
protected java.util.Map<java.lang.String,com.jalios.jcms.CacheManager.ServerCacheLRU>
customServerCacheLRUMap
LRU of the default configuration.protected com.jalios.jcms.CacheManager.ServerCacheLRU
defaultServerCacheLRU
LRU of the default configurationstatic int
NOT_EXPIRED
static java.lang.String
SESSION_SEPARATOR
static java.lang.String
SESSIONS_DIR
-
Fields inherited from interface com.jalios.jcms.db.DBConstants
ALL_CATEGORIES_SET_FIELD, ATTACH_WS_SET_FIELD, AUTH_GRP_SET_FIELD, AUTH_MBR_SET_FIELD, AUTHOR_ID_FIELD, CATEGORIES_SET_FIELD, CDATE_FIELD, CHANNEL_JCMSDB_PROP, CLASSIFICATION_LEVEL_FIELD, DBDATA_URID, EXTENDED_READ_RIGHTS, HAS_ATTACH_WS_FIELD, HAS_NO_READ_RIGHTS, HIBERNATE_MAPPING_ADATE, HIBERNATE_MAPPING_AUTHOR, HIBERNATE_MAPPING_CDATE, HIBERNATE_MAPPING_EDATE, HIBERNATE_MAPPING_HAS_ATTACH_WS, HIBERNATE_MAPPING_HASNOREADRIGHTS, HIBERNATE_MAPPING_MAININSTANCE_ID, HIBERNATE_MAPPING_MAJORVERSION, HIBERNATE_MAPPING_MDATE, HIBERNATE_MAPPING_MERGE_DATE, HIBERNATE_MAPPING_MERGE_ID, HIBERNATE_MAPPING_MINORVERSION, HIBERNATE_MAPPING_OPAUTHOR, HIBERNATE_MAPPING_PDATE, HIBERNATE_MAPPING_PSTATUS, HIBERNATE_MAPPING_READ_ACK, HIBERNATE_MAPPING_READERCOUNT, HIBERNATE_MAPPING_RESTRICTIVE_UPDATE_RIGHTS, HIBERNATE_MAPPING_TITLE, HIBERNATE_MAPPING_TRACKED, HIBERNATE_MAPPING_UDATE, HIBERNATE_MAPPING_VOTECOUNT, HIBERNATE_MAPPING_VOTESCORE, HIBERNATE_MAPPING_WORKFLOW_ID, HIBERNATE_MAPPING_WORKSPACE_ID, MAX_HIBERNATE_MAPPING_PUBLICATION, MDATE_FIELD, OPAUTHOR_ID_FIELD, PSTATUS_FIELD, ROW_ID_FIELD, SCROLL_FETCH_SIZE, WORKFLOW_ID_FIELD, WORKSPACE_ID_FIELD
-
Fields inherited from interface com.jalios.util.JaliosConstants
CRLF, MILLIS_IN_ONE_DAY, MILLIS_IN_ONE_HOUR, MILLIS_IN_ONE_MINUTE, MILLIS_IN_ONE_MONTH, MILLIS_IN_ONE_SECOND, MILLIS_IN_ONE_WEEK, MILLIS_IN_ONE_YEAR
-
Fields inherited from interface com.jalios.jcms.JcmsConstants
ADATE_SEARCH, ADMIN_NOTES_PROP, ADVANCED_TAB, AJAX_MODE_ATTR, ARCHIVES_DIR, ASCII_WIDTH, CATEGORY_TAB, CDATE_SEARCH, CLASS_PROPERTY, COMMON_ALARM, CONTENT_TAB, COOKIE_MAX_AGE, COUNTRY_SPRITE, CS_TYPOLOGY_ROOT_CAT_VID, CTRL_TOPIC_INTERNAL, CTRL_TOPIC_REF, CTRL_TOPIC_VALUE, CTRL_TOPIC_WRITE, CUSTOM_PROP, DATA_DIRECTORY, DEFAULT_PHOTO_PROP, DOCCHOOSER_HEIGHT, DOCCHOOSER_WIDTH, DOCS_DIR, EDATE_SEARCH, EMAIL_REGEXP, ERROR_MSG, FORBIDDEN_FILE_ACCESS, FORBIDDEN_REDIRECT, FORCE_REDIRECT, GLYPH_ICON_PREFIX, ICON_ARCHIVE, ICON_ICON_PREFIX, ICON_LOCK, ICON_LOCK_STRONG, ICON_PREFIX_PROP, ICON_WARN, ICON_WH_BOOK_CLOSED, ICON_WH_BOOK_OPEN, INFORMATION_MSG, IS_IN_FRONT_OFFICE, JALIOS_JUNIT_PROP, JCMS_CADDY, JCMS_MSG_LIST, JCMS_TOASTR_COLLECTION, JSYNC_DOWNLOAD_DIR, JSYNC_SYNC_ALARM, LANG_SPRITE, LOG_FILE, LOG_TOPIC_SECURITY, LOGGER_PROP, LOGGER_XMLPROP, MBR_PHOTO_DIR, MDATE_SEARCH, MONITOR_XML, OP_CREATE, OP_CREATE_STR, OP_DEEP_COPY, OP_DEEP_COPY_STR, OP_DEEP_DELETE, OP_DEEP_DELETE_STR, OP_DELETE, OP_DELETE_STR, OP_MERGE, OP_MERGE_STR, OP_UPDATE, OP_UPDATE_STR, ORGANIZATION_ROOT_GROUP_PROP, PDATE_SEARCH, PHOTO_DIR, PHOTO_ICON, PHOTO_ICON_HEIGHT, PHOTO_ICON_PROP_PREFIX, PHOTO_ICON_WIDTH, PHOTO_LARGE, PHOTO_LARGE_HEIGHT, PHOTO_LARGE_PROP_PREFIX, PHOTO_LARGE_WIDTH, PHOTO_MINI, PHOTO_MINI_HEIGHT, PHOTO_MINI_PROP_PREFIX, PHOTO_MINI_WIDTH, PHOTO_NORMAL, PHOTO_NORMAL_HEIGHT, PHOTO_NORMAL_PROP_PREFIX, PHOTO_NORMAL_WIDTH, PHOTO_SMALL, PHOTO_SMALL_HEIGHT, PHOTO_SMALL_PROP_PREFIX, PHOTO_SMALL_WIDTH, PHOTO_TINY, PHOTO_TINY_HEIGHT, PHOTO_TINY_PROP_PREFIX, PHOTO_TINY_WIDTH, PREVIOUS_TAB, PRINT_VIEW, PRIVATE_FILE_ACCESS, PUBLIC_FILE_ACCESS, RAW_CONTENT_ICON_PREFIX, READ_RIGHT_TAB, SDATE_SEARCH, SEARCHENGINE_ALARM, SECURITY_LOG_FILE, SESSION_AUTHORIZED_FILENAMES_SET, SPRITE_ICON_PREFIX, STATS_REPORT_DIR, STATUS_PROP, STORE_DIR, STORE_XML, SUCCESS_MSG, SVG_ICON_PREFIX, SVGINLINE_ICON_PREFIX, TEMPLATE_TAB, THUMBNAIL_LARGE_HEIGHT, THUMBNAIL_LARGE_WIDTH, THUMBNAIL_SMALL_HEIGHT, THUMBNAIL_SMALL_WIDTH, TTCARD_MEDIA_HEIGHT, TTCARD_MEDIA_WIDTH, TYPES_ICON_ALT_PROP, TYPES_ICON_SUFFIX_PROP, TYPES_ICON_TITLE_PROP, TYPES_PREFIX_PROP, TYPES_THUMB_SUFFIX_PROP, UDATE_SEARCH, UPDATE_RIGHT_TAB, UPLOAD_DIR, UPLOAD_PERMISSION_COUNT_PROP_PREFIX, UPLOAD_PERMISSION_SIZE_PROP_PREFIX, URL_REGEXP, VID_LOGGED_MEMBER, WARNING_MSG, WEBAPP_PROP, WFEXPRESS_ALARM, WFREMINDER_ALARM, WORKFLOW_TAB, WORKFLOW_XML
-
-
Constructor Summary
Constructors Modifier Constructor Description CacheManager()
Constructs a new CacheManagerprotected
CacheManager(boolean failsafeMode)
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description java.lang.String
addEntry(java.lang.String contentId, javax.servlet.http.HttpSession session, boolean sessionScope, java.lang.String content, java.lang.Class<?>[] classes, long timeout, java.util.Map<?,?> extraInfoMap, java.lang.String serverCacheConfig)
Add a new cache entryjava.lang.String
buildEntryId(java.lang.String contentId, java.lang.String sessionId, java.lang.String serverCacheConfiguration)
Build the entry id given the content's id and the associated session id.java.util.Collection<CacheManager.CacheEntry>
getCacheEntries()
Get all the cache entries.CacheManager.CacheEntry
getCacheEntry(java.lang.String id)
Get the CacheEntry from a given entry's id.static CacheManager
getFailSafeModeInstance()
int
getMaxServersCacheNbr()
protected java.util.Map<java.lang.String,java.lang.String>
getServerCacheIdMap(java.lang.String id)
Retrieve the server Cache Map to use for the specified cache idint
getSize()
Get the size of the cache (ie the count of cache entries).void
handleCommitUpdate(Storable storable, Storable oldStorable, boolean firstTime)
This method gets called when after a storable has been updated.void
handleCreate(Storable storable, boolean firstTime)
This method gets called when a storable is created.void
handleDelete(Storable storable, boolean firstTime)
This method gets called when a storable is deleted.void
invalidateClass(java.lang.Class<?> clazz)
Invalidate the content of all entries bound to the given classboolean
isCached(java.lang.String id)
Check if their is a cache entry associated with the given id.boolean
isDisabled()
void
onPostDelete(DBData data, org.hibernate.event.PostDeleteEvent event, boolean firstTime)
This method is called after a DBData has been deleted.void
onPostInsert(DBData data, org.hibernate.event.PostInsertEvent event, boolean firstTime)
This method is called after a DBData has been created.void
onPostUpdate(DBData data, org.hibernate.event.PostUpdateEvent event, boolean firstTime)
This method is called after a DBData has been updated.void
reinitialize()
Reinitialize the CacheManager.void
removeAllEntries()
Clear all the cache entries.void
removeAllSessionEntries()
Clear all the session cache entries.void
removeEntry(java.lang.String id)
Remove a cache entry referenced with is id.void
removeSessionEntries(javax.servlet.http.HttpSession session)
Clear all the session cache entries for a given sessionvoid
valueBound(javax.servlet.http.HttpSessionBindingEvent event)
void
valueUnbound(javax.servlet.http.HttpSessionBindingEvent event)
-
Methods inherited from class com.jalios.jcms.db.BasicDBListenerStoreListener
handlePrepareUpdate
-
Methods inherited from class com.jalios.jcms.db.BasicDBListener
getAdateFromState, getAuthorIdFromState, getCdateFromState, getDateFromState, getEdateFromState, getMdateFromState, getPdateFromState, getPrePstatus, getPrePstatus, getPstatusFromState, hasNoChange, hasNoChange, init, onPreUpdate
-
-
-
-
Field Detail
-
ATTR_CACHE_PREFIX
@Deprecated public static final java.lang.String ATTR_CACHE_PREFIX
Deprecated.since 10.0.7 / JCMS-9927- See Also:
- Constant Field Values
-
SESSION_SEPARATOR
public static final java.lang.String SESSION_SEPARATOR
- See Also:
- Constant Field Values
-
CACHES_DIR
public static final java.lang.String CACHES_DIR
- See Also:
- Constant Field Values
-
SESSIONS_DIR
public static final java.lang.String SESSIONS_DIR
- See Also:
- Constant Field Values
-
NOT_EXPIRED
public static final int NOT_EXPIRED
- See Also:
- Constant Field Values
-
defaultServerCacheLRU
protected transient com.jalios.jcms.CacheManager.ServerCacheLRU defaultServerCacheLRU
LRU of the default configuration
-
customServerCacheLRUMap
protected transient java.util.Map<java.lang.String,com.jalios.jcms.CacheManager.ServerCacheLRU> customServerCacheLRUMap
LRU of the default configuration. Map of custom configuration name to ServerCacheLRU instance.
-
-
Method Detail
-
getFailSafeModeInstance
public static CacheManager getFailSafeModeInstance()
-
reinitialize
public void reinitialize()
Reinitialize the CacheManager. Reload isDisabled and MaxServersCacheNbr values from properties.
-
isDisabled
public boolean isDisabled()
- Returns:
- true if the cache manager is disabled.
-
getMaxServersCacheNbr
public int getMaxServersCacheNbr()
- Returns:
- the maximum number of server's cache allowed.
-
getServerCacheIdMap
protected java.util.Map<java.lang.String,java.lang.String> getServerCacheIdMap(java.lang.String id)
Retrieve the server Cache Map to use for the specified cache id- Parameters:
id
- must not be null- Returns:
- the custom cache map to use or the default cache map, never return null
-
buildEntryId
public java.lang.String buildEntryId(java.lang.String contentId, java.lang.String sessionId, java.lang.String serverCacheConfiguration)
Build the entry id given the content's id and the associated session id. Given this 2 parameter, the returned id will be always the same.- Parameters:
contentId
- the content idsessionId
- the http session id, exclusive with serverCacheConfigurationserverCacheConfiguration
- the custom configuration to use for server configuration, exclusive with sessionId- Returns:
- the id to be used for a cache entry.
-
addEntry
public java.lang.String addEntry(java.lang.String contentId, javax.servlet.http.HttpSession session, boolean sessionScope, java.lang.String content, java.lang.Class<?>[] classes, long timeout, java.util.Map<?,?> extraInfoMap, java.lang.String serverCacheConfig)
Add a new cache entry- Parameters:
contentId
- the id of contentsession
- the sessionsessionScope
- should the cache entry be stored for this sessioncontent
- the content to be cachedclasses
- an array of classes to listen. Each time a mutation occurs on a (visible) instance of the classes the content of the cache is cleared.timeout
- the timeout of this entry (in millis)extraInfoMap
- any contextual data to the cache being createdserverCacheConfig
- an optional custom server cache configuration to use (use only when sessionScope = false)- Returns:
- the id of the entry (concatenation of id and session's id).
-
isCached
public boolean isCached(java.lang.String id)
Check if their is a cache entry associated with the given id.- Parameters:
id
- the CacheEntry's id- Returns:
- true if there is a cache entry associated with this id, false otherwise.
-
getSize
public int getSize()
Get the size of the cache (ie the count of cache entries).- Returns:
- the count of cache entries
-
getCacheEntries
public java.util.Collection<CacheManager.CacheEntry> getCacheEntries()
Get all the cache entries.- Returns:
- a NEW collection of CacheEntry
-
getCacheEntry
public CacheManager.CacheEntry getCacheEntry(java.lang.String id)
Get the CacheEntry from a given entry's id.- Parameters:
id
- the entry's id- Returns:
- the CacheEntry bound to the given id
-
removeEntry
public void removeEntry(java.lang.String id)
Remove a cache entry referenced with is id.- Parameters:
id
- the entry's id
-
removeAllEntries
public void removeAllEntries()
Clear all the cache entries.
-
removeAllSessionEntries
public void removeAllSessionEntries()
Clear all the session cache entries.
-
removeSessionEntries
public void removeSessionEntries(javax.servlet.http.HttpSession session)
Clear all the session cache entries for a given session- Parameters:
session
- the session- Since:
- jcms-4.0
-
invalidateClass
public void invalidateClass(java.lang.Class<?> clazz)
Invalidate the content of all entries bound to the given class- Parameters:
clazz
- the class for which the entries must be cleared
-
handleCreate
public void handleCreate(Storable storable, boolean firstTime)
Description copied from interface:StoreListener
This method gets called when a storable is created.- Specified by:
handleCreate
in interfaceStoreListener
- Overrides:
handleCreate
in classBasicDBListenerStoreListener
- Parameters:
storable
- the storablefirstTime
- true if it is the first time this operation is processed- See Also:
StoreListener.handleCreate(Storable, boolean)
-
handleCommitUpdate
public void handleCommitUpdate(Storable storable, Storable oldStorable, boolean firstTime)
Description copied from interface:StoreListener
This method gets called when after a storable has been updated.- Specified by:
handleCommitUpdate
in interfaceStoreListener
- Overrides:
handleCommitUpdate
in classBasicDBListenerStoreListener
- Parameters:
storable
- the storable, this instance is the object that was created at first and that will be stored in jcms until deletion of the storable with this ID. You should always manipulate this object if you maintain any index.oldStorable
- the previous version of the storable, it is a clone, do not use in any index, it should only be used to access old values.firstTime
- true if it is the first time this operation is processed- See Also:
StoreListener.handleCommitUpdate(Storable, Storable, boolean)
-
handleDelete
public void handleDelete(Storable storable, boolean firstTime)
Description copied from interface:StoreListener
This method gets called when a storable is deleted.- Specified by:
handleDelete
in interfaceStoreListener
- Overrides:
handleDelete
in classBasicDBListenerStoreListener
- Parameters:
storable
- the storablefirstTime
- true if it is the first time this operation is processed- See Also:
StoreListener.handleDelete(Storable, boolean)
-
onPostInsert
public void onPostInsert(DBData data, org.hibernate.event.PostInsertEvent event, boolean firstTime)
Description copied from interface:DBListener
This method is called after a DBData has been created.- Specified by:
onPostInsert
in interfaceDBListener
- Overrides:
onPostInsert
in classBasicDBListener
- Parameters:
data
- the data.event
- the event.firstTime
- true on the JSync replica on which the operation took place and false on the other replicas.- See Also:
DBListener.onPostInsert(DBData, PostInsertEvent, boolean)
-
onPostUpdate
public void onPostUpdate(DBData data, org.hibernate.event.PostUpdateEvent event, boolean firstTime)
Description copied from interface:DBListener
This method is called after a DBData has been updated.- Specified by:
onPostUpdate
in interfaceDBListener
- Overrides:
onPostUpdate
in classBasicDBListener
- Parameters:
data
- the data.event
- the event.firstTime
- true on the JSync replica on which the operation took place and false on the other replicas.- See Also:
DBListener.onPostUpdate(DBData, PostUpdateEvent, boolean)
-
onPostDelete
public void onPostDelete(DBData data, org.hibernate.event.PostDeleteEvent event, boolean firstTime)
Description copied from interface:DBListener
This method is called after a DBData has been deleted.- Specified by:
onPostDelete
in interfaceDBListener
- Overrides:
onPostDelete
in classBasicDBListener
- Parameters:
data
- the deleted DBData. WARNING! In a JSync Cluster, when firstTime is false, this data will be null. In this case, to get information about this deleted data, you must use the event and in particular event.getId(), which returns the JPlatform ID of the data, and event.getDeletedState() which returns the attributes of the data.event
- the eventfirstTime
- true on the JSync replica on which the operation took place and false on the other replicas.- See Also:
DBListener.onPostDelete(DBData, PostDeleteEvent, boolean)
-
valueBound
public void valueBound(javax.servlet.http.HttpSessionBindingEvent event)
- Specified by:
valueBound
in interfacejavax.servlet.http.HttpSessionBindingListener
-
valueUnbound
public void valueUnbound(javax.servlet.http.HttpSessionBindingEvent event)
- Specified by:
valueUnbound
in interfacejavax.servlet.http.HttpSessionBindingListener
-
-