For for InMemoryTicketComponent, which iterates over the keys in the cache

- The root issue is that some entries are null markers
 - Cache entries could disappear during the iteration anyway
 - Cleaned up some comments in the cache code


git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@17073 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
Derek Hulley
2009-10-21 22:26:21 +00:00
parent 89ad58b892
commit 837608d8f3
2 changed files with 6 additions and 9 deletions

View File

@@ -518,15 +518,7 @@ public class TransactionalCache<K extends Serializable, V extends Object>
// is the shared cache going to be cleared? // is the shared cache going to be cleared?
if (txnData.isClearOn) if (txnData.isClearOn)
{ {
// overflow about to occur or has occured - we can only guarantee non-stale // don't store removals if we're just going to clear it all out later
// data by clearing the shared cache after the transaction. Also, the
// shared cache needs to be ignored for the rest of the transaction.
txnData.isClearOn = true;
if (!txnData.haveIssuedFullWarning && logger.isWarnEnabled())
{
logger.warn("Transactional update cache '" + name + "' is full (" + maxCacheSize + ").");
txnData.haveIssuedFullWarning = true;
}
} }
else else
{ {

View File

@@ -229,6 +229,11 @@ public class InMemoryTicketComponentImpl implements TicketComponent
for (String key : ticketsCache.getKeys()) for (String key : ticketsCache.getKeys())
{ {
Ticket ticket = ticketsCache.get(key); Ticket ticket = ticketsCache.get(key);
// Hack: The getKeys() call might return keys for null marker objects, yielding null values
if (ticket == null)
{
continue;
}
if (ticket.getUserName().equals(userName)) if (ticket.getUserName().equals(userName))
{ {
toRemove.add(ticket.getTicketId()); toRemove.add(ticket.getTicketId());