/* * Copyright 2010 salaboy. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * under the License. */ package org.drools.command.impl; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import java.util.logging.Level; import java.util.logging.Logger; import org.drools.command.Context; import org.drools.command.ContextManager; /** * * @author salaboy */ public class ContextImplWithEviction extends ContextImpl{ private Logger log = Logger.getLogger( ContextImplWithEviction.class.getName() ); private Map<String, Long> evictionMap = new ConcurrentHashMap<String, Long>(); private boolean evictionEnabled = true; //I need a way to set up this parameters //time to look up for evicted entries private long evictionWakeUpTime = 5 * 60 * 1000 ; // 5 minutes //Time that the entry is valid private long entryEvictionTime = 60 * 60 * 1000; // 1 hour //private LinkedBlockingQueue<ChangeSet> queue; public ContextImplWithEviction(String name, ContextManager manager, Context delegate) { super(name, manager, delegate); } public ContextImplWithEviction(String name, ContextManager manager) { super(name, manager); } @Override public Object get(String identifier){ Object result = super.get(identifier); if(evictionEnabled && identifier != null && result != null){ long currentTimeStamp = System.currentTimeMillis(); evictionMap.put(identifier, currentTimeStamp); log.log(Level.FINE,"Updating key=" +identifier +"@"+super.getName()+":"+currentTimeStamp); } return result; } @Override public void set(String name, Object object) { if(evictionEnabled){ long currentTimeStamp = System.currentTimeMillis(); evictionMap.put(name, currentTimeStamp ); log.log(Level.FINE,"Setting key=" +name +"@"+super.getName()+":"+currentTimeStamp); } super.set(name, object); } public long getEvictionWakeUpTime() { return evictionWakeUpTime; } public Map<String, Long> getEvictionMap() { return evictionMap; } public boolean isEvictionEnabled() { return evictionEnabled; } public void setEvictionEnabled(boolean evictionEnabled) { this.evictionEnabled = evictionEnabled; } public long getEntryEvictionTime() { return entryEvictionTime; } public void setEntryEvictionTime(long entryEvictionTime) { this.entryEvictionTime = entryEvictionTime; } public void setEvictionWakeUpTime(long evictionWakeUpTime) { this.evictionWakeUpTime = evictionWakeUpTime; } }