summaryrefslogtreecommitdiff
path: root/java/src/Freeze/SharedDbEnv.java
diff options
context:
space:
mode:
authorBernard Normier <bernard@zeroc.com>2007-05-25 13:45:57 +0000
committerBernard Normier <bernard@zeroc.com>2007-05-25 13:45:57 +0000
commit87066d75a2e1026f39e81aa9d5c555b571295b70 (patch)
treee6304ee267f05f065ac223dc17f02fc42e2e0b0d /java/src/Freeze/SharedDbEnv.java
parentadding listener for assertion failures (diff)
downloadice-87066d75a2e1026f39e81aa9d5c555b571295b70.tar.bz2
ice-87066d75a2e1026f39e81aa9d5c555b571295b70.tar.xz
ice-87066d75a2e1026f39e81aa9d5c555b571295b70.zip
Renamed existing Freeze Evictor to BackgroundSaveEvictor and added new
TransactionalEvictor
Diffstat (limited to 'java/src/Freeze/SharedDbEnv.java')
-rw-r--r--java/src/Freeze/SharedDbEnv.java53
1 files changed, 50 insertions, 3 deletions
diff --git a/java/src/Freeze/SharedDbEnv.java b/java/src/Freeze/SharedDbEnv.java
index 60c7a70dd97..11233f95536 100644
--- a/java/src/Freeze/SharedDbEnv.java
+++ b/java/src/Freeze/SharedDbEnv.java
@@ -198,12 +198,57 @@ class SharedDbEnv implements com.sleepycat.db.ErrorHandler, Runnable
_key.communicator.getLogger().error("Freeze database error in DbEnv \"" + _key.envName + "\": " + message);
}
- protected void
- finalize()
+
+ //
+ // EvictorContext factory/manager
+ //
+
+
+ //
+ // Get/create an evictor context associated with the calling thread
+ //
+ synchronized TransactionalEvictorContextI
+ getOrCreateCurrent(Ice.BooleanHolder created)
{
- assert(_refCount == 0);
+ if(created != null)
+ {
+ created.value = false;
+ }
+
+ Object k = Thread.currentThread();
+
+ TransactionalEvictorContextI ctx = (TransactionalEvictorContextI)_ctxMap.get(k);
+ if(ctx == null)
+ {
+ ctx = new TransactionalEvictorContextI(this);
+
+ if(created != null)
+ {
+ created.value = true;
+ }
+ _ctxMap.put(k, ctx);
+ }
+ return ctx;
+ }
+
+ synchronized TransactionalEvictorContextI
+ getCurrent()
+ {
+ Object k = Thread.currentThread();
+ return (TransactionalEvictorContextI)_ctxMap.get(k);
+ }
+
+ //
+ // Clear evictor context associated with the calling thread
+ //
+ synchronized void
+ clearCurrent(TransactionalEvictorContextI oldCtx)
+ {
+ Object removedCtx = _ctxMap.remove(Thread.currentThread());
+ assert removedCtx == oldCtx;
}
+
private
SharedDbEnv(MapKey key, com.sleepycat.db.Environment dbEnv)
throws com.sleepycat.db.DatabaseException
@@ -363,6 +408,8 @@ class SharedDbEnv implements com.sleepycat.db.ErrorHandler, Runnable
private int _kbyte = 0;
private Thread _thread;
+ private java.util.Map _ctxMap = new java.util.HashMap();
+
//
// Hash map of (MapKey, SharedDbEnv)
//