你好,我是想實現一個數據庫對象(「連接」)用於緩衝池BerkeleyDB的... 我決定用一個單身EJB propably或這個..數據庫普勒
最後concurrenthash ENUM單執行地圖將存儲具有時間戳的數據庫對象...
方法getConnection()
將使用雙重檢查鎖定,只要map中的值是易失性的。 - 沒有性能問題,我相信..(Java的連接池的getConnection同步!!)
的數據庫擴展到100個文件+日常的人。(應用七十年代中期1976年設計的)..
到目前爲止一切很好......但我想關閉每日不用的手柄。
所以我決定使用定時器每24小時運行一次清理程序..
問題是,我如何確保在清理過程中要關閉的連接不被請求?
僞算法
cleanup(){
for(Database db in map){
if(db.getLastAccess - now >24hours) {
res=map.remove("key",db);
db.close();
}
}
}
我知道的是,上述心不是線程safe..How可我阻止的getConnection?因爲許多事情可能會出錯......「如果條件」可能是真的但刪除db obj前 getLastAccess可以改變!雖然清理會被單線程調用.. 有沒有解決方法來阻止getconnection以某種方式清理工作或任何其他解決方案?
BerkeleyDB不是SQL數據庫,它是一個鍵值存儲,因此它不支持運行SQL查詢。因此,JDBC支持沒有多大意義。 – 2011-05-16 15:20:11
@Robin Green:感謝您的澄清,我之前聽說過這個數據庫,並認爲它是一個嵌入式關係數據庫。所以DBCP和c3p0都沒有了。池組件,可能比從頭開始實施池更好的解決方案。 – iruediger 2011-05-16 16:00:07