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 classCacheManager.CacheEntry
-
Field Summary
Fields Modifier and Type Field Description static java.lang.StringATTR_CACHE_PREFIXDeprecated.since 10.0.7 / JCMS-9927static java.lang.StringCACHES_DIRprotected java.util.Map<java.lang.String,com.jalios.jcms.CacheManager.ServerCacheLRU>customServerCacheLRUMapLRU of the default configuration.protected com.jalios.jcms.CacheManager.ServerCacheLRUdefaultServerCacheLRULRU of the default configurationstatic intNOT_EXPIREDstatic java.lang.StringSESSION_SEPARATORstatic java.lang.StringSESSIONS_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 CacheManagerprotectedCacheManager(boolean failsafeMode)
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description java.lang.StringaddEntry(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.StringbuildEntryId(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.CacheEntrygetCacheEntry(java.lang.String id)Get the CacheEntry from a given entry's id.static CacheManagergetFailSafeModeInstance()intgetMaxServersCacheNbr()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 idintgetSize()Get the size of the cache (ie the count of cache entries).voidhandleCommitUpdate(Storable storable, Storable oldStorable, boolean firstTime)This method gets called when after a storable has been updated.voidhandleCreate(Storable storable, boolean firstTime)This method gets called when a storable is created.voidhandleDelete(Storable storable, boolean firstTime)This method gets called when a storable is deleted.voidinvalidateClass(java.lang.Class<?> clazz)Invalidate the content of all entries bound to the given classbooleanisCached(java.lang.String id)Check if their is a cache entry associated with the given id.booleanisDisabled()voidonPostDelete(DBData data, org.hibernate.event.PostDeleteEvent event, boolean firstTime)This method is called after a DBData has been deleted.voidonPostInsert(DBData data, org.hibernate.event.PostInsertEvent event, boolean firstTime)This method is called after a DBData has been created.voidonPostUpdate(DBData data, org.hibernate.event.PostUpdateEvent event, boolean firstTime)This method is called after a DBData has been updated.voidreinitialize()Reinitialize the CacheManager.voidremoveAllEntries()Clear all the cache entries.voidremoveAllSessionEntries()Clear all the session cache entries.voidremoveEntry(java.lang.String id)Remove a cache entry referenced with is id.voidremoveSessionEntries(javax.servlet.http.HttpSession session)Clear all the session cache entries for a given sessionvoidvalueBound(javax.servlet.http.HttpSessionBindingEvent event)voidvalueUnbound(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:StoreListenerThis method gets called when a storable is created.- Specified by:
handleCreatein interfaceStoreListener- Overrides:
handleCreatein 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:StoreListenerThis method gets called when after a storable has been updated.- Specified by:
handleCommitUpdatein interfaceStoreListener- Overrides:
handleCommitUpdatein 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:StoreListenerThis method gets called when a storable is deleted.- Specified by:
handleDeletein interfaceStoreListener- Overrides:
handleDeletein 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:DBListenerThis method is called after a DBData has been created.- Specified by:
onPostInsertin interfaceDBListener- Overrides:
onPostInsertin 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:DBListenerThis method is called after a DBData has been updated.- Specified by:
onPostUpdatein interfaceDBListener- Overrides:
onPostUpdatein 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:DBListenerThis method is called after a DBData has been deleted.- Specified by:
onPostDeletein interfaceDBListener- Overrides:
onPostDeletein 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:
valueBoundin interfacejavax.servlet.http.HttpSessionBindingListener
-
valueUnbound
public void valueUnbound(javax.servlet.http.HttpSessionBindingEvent event)
- Specified by:
valueUnboundin interfacejavax.servlet.http.HttpSessionBindingListener
-
-