/** * get an Iterator for the values stored in the cache * @returns an Iterator */ public Iterator values() { ArrayList valueList = new ArrayList(); synchronized (this) { LruCacheItem item = tail; while (item != null) { StatefulEJBContext ctx = (StatefulEJBContext) item.getValue(); if (ctx != null) { valueList.add(ctx); } //Ensure that for head the lPrev is null if( (item == head) && (item.getLPrev() != null) ) { _logger.log(Level.WARNING, ITERATOR_RESETTING_HEAD_LPREV, cacheName); item.setLPrev(null); } // traverse to the previous one item = item.getLPrev(); } } return valueList.iterator(); }
StatefulEJBContext ctx = (StatefulEJBContext) item.getValue(); if (ctx != null) {
/** * trim the item from the cache and notify listeners * @param item to be trimmed */ protected void trimItem(CacheItem item) { LruCacheItem removed = (LruCacheItem) item; if (removeIfIdle) { StatefulEJBContext ctx = (StatefulEJBContext) item.getValue(); long idleThreshold = System.currentTimeMillis() - removalTimeoutInSeconds*1000L; if (ctx.getLastAccessTime() <= idleThreshold) { container.passivateEJB(ctx); return; } } for (int i = 0; i < listeners.size(); i++) { CacheListener listener = (CacheListener) listeners.get(i); listener.trimEvent(removed.getKey(), removed.getValue()); } }
public void shutdown() { ArrayList<StatefulEJBContext> valueList = new ArrayList<StatefulEJBContext>(); synchronized (this) { LruCacheItem item = tail; while (item != null) { StatefulEJBContext ctx = (StatefulEJBContext) item.getValue(); if (ctx != null) { item.setTrimmed(true); valueList.add(ctx); } // Ensure that for head the lPrev is null if ((item == head) && (item.getLPrev() != null)) { _logger.log(Level.WARNING, ITERATOR_RESETTING_HEAD_LPREV, cacheName); item.setLPrev(null); } // traverse to the previous one item = item.getLPrev(); } } for (StatefulEJBContext ctx : valueList) { container.passivateEJB(ctx); } }