package org.langke.common.bdb; import java.util.ArrayList; import java.util.List; import java.util.Map.Entry; import org.langke.util.logging.ESLogger; import org.langke.util.logging.Loggers; import com.sleepycat.bind.EntryBinding; import com.sleepycat.bind.serial.SerialBinding; import com.sleepycat.collections.StoredMap; import com.sleepycat.je.DatabaseException; public class BrekeleyDBImpl extends AbstractBerkeleyDB implements BrekeleyDB { private StoredMap storedMap = null; private static ESLogger log = Loggers.getLogger(BrekeleyDBImpl.class); //使用默认的路径和缓存大小构造函数 public BrekeleyDBImpl(String homeDirectory,String dbname,Class valueBindClass) { super(homeDirectory,dbname); EntryBinding keyBinding =new SerialBinding (javaCatalog,String.class); EntryBinding valueBinding =new SerialBinding(javaCatalog, valueBindClass); storedMap = new StoredMap(database,keyBinding, valueBinding, true); log.info(homeDirectory+" dbname:"+dbname+" alivedb:"+env.getDatabaseNames()); } public Object poll() { if(!storedMap.isEmpty()){ Entry<String,?> entry=(Entry<String,?>)storedMap.entrySet().iterator().next(); delete(entry.getKey()); return entry; } return null; } public List<?> poll(int limit) { List<Entry> list = new ArrayList<Entry>(); for(int i=0;i<limit;i++){ if(!storedMap.isEmpty()){ Entry<String,Object> entry=(Entry<String,Object>)storedMap.entrySet().iterator().next(); list.add(entry); delete(entry.getKey()); } } return list; } // 存入 public void put(Object key,Object value) { storedMap.put(key, value); } //取出 public Object get(Object key){ return storedMap.get(key); } public List<?> get(int limit){ List<Entry> list = new ArrayList<Entry>(); for(int i=0;i<limit;i++){ if(!storedMap.isEmpty()){ Entry<String,Object> entry=(Entry<String,Object>)storedMap.entrySet().iterator().next(); list.add(entry); } } return list; } //删除 public Object delete(Object key){ return storedMap.remove(key); } public int size(){ return storedMap.size(); } public boolean isEmpty(){ return storedMap.isEmpty(); } public boolean contains(Object key){ return storedMap.containsKey(key); } public void clear(){ storedMap.clear(); } // 测试函数 public static void main(String[] strs) { BrekeleyDBImpl bdb = null ; try { bdb = new BrekeleyDBImpl("bdb","db_test",String.class); log.info("{}",bdb.env.getDatabaseNames()); bdb.put("key", "value"); log.info("{}", bdb.get("key")); } catch (Exception e) { e.printStackTrace(); }finally{ try { if (bdb != null) bdb.close(); } catch (DatabaseException e) { e.printStackTrace(); } } } }