summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--cpp/CHANGES4
-rw-r--r--cpp/slice/Freeze/BackgroundSaveEvictor.ice7
-rwxr-xr-xcpp/slice/Freeze/Transaction.ice14
-rw-r--r--cpp/slice/Freeze/TransactionalEvictor.ice37
-rw-r--r--cpp/src/Freeze/.depend6
-rw-r--r--cpp/src/Freeze/BackgroundSaveEvictorI.cpp2
-rw-r--r--cpp/src/Freeze/BackgroundSaveEvictorI.h2
-rw-r--r--cpp/src/Freeze/EvictorI.cpp6
-rw-r--r--cpp/src/Freeze/EvictorI.h6
-rw-r--r--cpp/src/Freeze/EvictorIteratorI.cpp4
-rw-r--r--cpp/src/Freeze/EvictorIteratorI.h6
-rw-r--r--cpp/src/Freeze/IndexI.cpp10
-rw-r--r--cpp/src/Freeze/Makefile2
-rw-r--r--cpp/src/Freeze/Makefile.mak2
-rw-r--r--cpp/src/Freeze/ObjectStore.cpp58
-rw-r--r--cpp/src/Freeze/ObjectStore.h6
-rw-r--r--cpp/src/Freeze/SharedDbEnv.cpp91
-rw-r--r--cpp/src/Freeze/SharedDbEnv.h15
-rw-r--r--cpp/src/Freeze/TransactionI.cpp65
-rw-r--r--cpp/src/Freeze/TransactionI.h29
-rw-r--r--cpp/src/Freeze/TransactionalEvictorContext.cpp (renamed from cpp/src/Freeze/TransactionalEvictorContextI.cpp)131
-rw-r--r--cpp/src/Freeze/TransactionalEvictorContext.h (renamed from cpp/src/Freeze/TransactionalEvictorContextI.h)33
-rw-r--r--cpp/src/Freeze/TransactionalEvictorI.cpp102
-rw-r--r--cpp/src/Freeze/TransactionalEvictorI.h6
-rw-r--r--java/CHANGES4
-rw-r--r--java/src/Freeze/BackgroundSaveEvictorI.java2
-rwxr-xr-xjava/src/Freeze/ConnectionI.java4
-rw-r--r--java/src/Freeze/EvictorI.java4
-rw-r--r--java/src/Freeze/EvictorIteratorI.java4
-rw-r--r--java/src/Freeze/Index.java8
-rw-r--r--java/src/Freeze/ObjectStore.java52
-rw-r--r--java/src/Freeze/PostCompletionCallback.java15
-rw-r--r--java/src/Freeze/SharedDbEnv.java56
-rwxr-xr-xjava/src/Freeze/TransactionI.java81
-rw-r--r--java/src/Freeze/TransactionalEvictorContext.java (renamed from java/src/Freeze/TransactionalEvictorContextI.java)108
-rw-r--r--java/src/Freeze/TransactionalEvictorI.java75
36 files changed, 653 insertions, 404 deletions
diff --git a/cpp/CHANGES b/cpp/CHANGES
index b5a26b6cffa..c9f57723b1a 100644
--- a/cpp/CHANGES
+++ b/cpp/CHANGES
@@ -1,6 +1,10 @@
Changes since version 3.2.X (binary incompabible)
-------------------------------------------------
+- Freeze evictor update:
+ - the existing evictor was renamed BackgroundSaveEvictor
+ - added new TransactionalEvictor
+
- Fixed a bug in the encoding of user exceptions with a class
attribute and returned by AMD dispatched invocations. An extra byte
was encoded at the end. This fix doesn't affect on the wire
diff --git a/cpp/slice/Freeze/BackgroundSaveEvictor.ice b/cpp/slice/Freeze/BackgroundSaveEvictor.ice
index 089f01d0f7f..70c78a32102 100644
--- a/cpp/slice/Freeze/BackgroundSaveEvictor.ice
+++ b/cpp/slice/Freeze/BackgroundSaveEvictor.ice
@@ -15,6 +15,13 @@
module Freeze
{
+/**
+ *
+ * A background-save evictor is an evictor that saves updates
+ * asynchronously in a background thread.
+ *
+ **/
+
local interface BackgroundSaveEvictor extends Evictor
{
/**
diff --git a/cpp/slice/Freeze/Transaction.ice b/cpp/slice/Freeze/Transaction.ice
index 9e1f1e3f552..027c6c8a7e1 100755
--- a/cpp/slice/Freeze/Transaction.ice
+++ b/cpp/slice/Freeze/Transaction.ice
@@ -13,6 +13,9 @@
module Freeze
{
+local interface Connection;
+
+
/**
*
* A transaction. If you want to use a transaction concurrently
@@ -26,6 +29,8 @@ local interface Transaction
*
* Commit this transaction.
*
+ * @throws DatabaseException Raised if a database failure occurred.
+ *
**/
void commit();
@@ -33,8 +38,17 @@ local interface Transaction
*
* Roll back this transaction.
*
+ * @throws DatabaseException Raised if a database failure occurred.
+ *
**/
void rollback();
+
+ /**
+ *
+ * Get the connection associated with this Transaction
+ *
+ **/
+ ["cpp:const"] Connection getConnection();
};
diff --git a/cpp/slice/Freeze/TransactionalEvictor.ice b/cpp/slice/Freeze/TransactionalEvictor.ice
index 107c855cdee..3ac0b27539a 100644
--- a/cpp/slice/Freeze/TransactionalEvictor.ice
+++ b/cpp/slice/Freeze/TransactionalEvictor.ice
@@ -15,18 +15,35 @@
module Freeze
{
-local interface TransactionalEvictorContext
-{
- void rollbackOnly();
- ["cpp:const"] bool isRollbackOnly();
-
- void complete();
-};
-
+local interface Transaction;
+
+/**
+ *
+ * A transactional evictor is an evictor that performs every single read-write
+ * operation within its own transaction.
+ *
+ **/
local interface TransactionalEvictor extends Evictor
{
- TransactionalEvictorContext getCurrentContext();
- TransactionalEvictorContext createCurrentContext();
+
+ /**
+ *
+ * Get the transaction associated with the calling thread.
+ *
+ * @return This transaction associated with the calling thread.
+ *
+ **/
+ ["cpp:const"] Transaction getCurrentTransaction();
+
+
+ /**
+ *
+ * Associate a transaction with the calling thread.
+ *
+ * @param tx The transaction to associate with the calling thread.
+ *
+ **/
+ void setCurrentTransaction(Transaction tx);
};
};
diff --git a/cpp/src/Freeze/.depend b/cpp/src/Freeze/.depend
index 2805f3e9cac..5141803cb2e 100644
--- a/cpp/src/Freeze/.depend
+++ b/cpp/src/Freeze/.depend
@@ -15,11 +15,11 @@ Index$(OBJEXT): Index.cpp ../../include/Freeze/Index.h ../../include/Ice/Ice.h .
MapI$(OBJEXT): MapI.cpp ../Freeze/MapI.h ../../include/Freeze/Map.h ../../include/Ice/Ice.h ../../include/Ice/Initialize.h ../../include/Ice/CommunicatorF.h ../../include/Ice/LocalObjectF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/PropertiesF.h ../../include/Ice/InstanceF.h ../../include/Ice/LoggerF.h ../../include/Ice/StreamF.h ../../include/Ice/StatsF.h ../../include/Ice/StringConverter.h ../../include/Ice/BuiltinSequences.h ../../include/Ice/Proxy.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/LocalException.h ../../include/Ice/Properties.h ../../include/Ice/Logger.h ../../include/Ice/LoggerUtil.h ../../include/Ice/Stats.h ../../include/Ice/Communicator.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/RouterF.h ../../include/Ice/LocatorF.h ../../include/Ice/PluginF.h ../../include/Ice/ImplicitContextF.h ../../include/Ice/ObjectFactory.h ../../include/Ice/ObjectAdapter.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/FacetMap.h ../../include/Ice/ServantLocator.h ../../include/Ice/OutgoingAsync.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/IceUtil/RecMutex.h ../../include/Ice/IncomingAsync.h ../../include/Ice/Incoming.h ../../include/Ice/ServantManagerF.h ../../include/Ice/BasicStream.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/IceUtil/Unicode.h ../../include/Ice/Process.h ../../include/Ice/Outgoing.h ../../include/Ice/Direct.h ../../include/Ice/Application.h ../../include/Ice/Connection.h ../../include/Ice/Functional.h ../../include/IceUtil/Functional.h ../../include/Ice/Stream.h ../../include/Ice/ImplicitContext.h ../../include/Ice/Locator.h ../../include/Ice/UserExceptionFactory.h ../../include/Ice/FactoryTable.h ../../include/Ice/FactoryTableDef.h ../../include/IceUtil/StaticMutex.h ../../include/Ice/UserExceptionFactoryF.h ../../include/Ice/ProcessF.h ../../include/Ice/Router.h ../../include/Ice/DispatchInterceptor.h ../../include/Freeze/DB.h ../../include/Freeze/Exception.h ../../include/Freeze/Connection.h ../../include/Freeze/Transaction.h ../Freeze/SharedDb.h ../Freeze/ConnectionI.h ../../include/Freeze/Initialize.h ../../include/Freeze/EvictorF.h ../../include/Freeze/ConnectionF.h ../../include/Freeze/Index.h ../Freeze/TransactionI.h ../Freeze/SharedDbEnv.h ../Freeze/Util.h ../../include/Freeze/Catalog.h ../../include/Freeze/CatalogData.h
ObjectStore$(OBJEXT): ObjectStore.cpp ../Freeze/ObjectStore.h ../../include/Ice/Ice.h ../../include/Ice/Initialize.h ../../include/Ice/CommunicatorF.h ../../include/Ice/LocalObjectF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/PropertiesF.h ../../include/Ice/InstanceF.h ../../include/Ice/LoggerF.h ../../include/Ice/StreamF.h ../../include/Ice/StatsF.h ../../include/Ice/StringConverter.h ../../include/Ice/BuiltinSequences.h ../../include/Ice/Proxy.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/LocalException.h ../../include/Ice/Properties.h ../../include/Ice/Logger.h ../../include/Ice/LoggerUtil.h ../../include/Ice/Stats.h ../../include/Ice/Communicator.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/RouterF.h ../../include/Ice/LocatorF.h ../../include/Ice/PluginF.h ../../include/Ice/ImplicitContextF.h ../../include/Ice/ObjectFactory.h ../../include/Ice/ObjectAdapter.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/FacetMap.h ../../include/Ice/ServantLocator.h ../../include/Ice/OutgoingAsync.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/IceUtil/RecMutex.h ../../include/Ice/IncomingAsync.h ../../include/Ice/Incoming.h ../../include/Ice/ServantManagerF.h ../../include/Ice/BasicStream.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/IceUtil/Unicode.h ../../include/Ice/Process.h ../../include/Ice/Outgoing.h ../../include/Ice/Direct.h ../../include/Ice/Application.h ../../include/Ice/Connection.h ../../include/Ice/Functional.h ../../include/IceUtil/Functional.h ../../include/Ice/Stream.h ../../include/Ice/ImplicitContext.h ../../include/Ice/Locator.h ../../include/Ice/UserExceptionFactory.h ../../include/Ice/FactoryTable.h ../../include/Ice/FactoryTableDef.h ../../include/IceUtil/StaticMutex.h ../../include/Ice/UserExceptionFactoryF.h ../../include/Ice/ProcessF.h ../../include/Ice/Router.h ../../include/Ice/DispatchInterceptor.h ../../include/Freeze/DB.h ../../include/Freeze/EvictorStorage.h ../../include/Freeze/Index.h ../Freeze/TransactionI.h ../../include/Freeze/Transaction.h ../../include/IceUtil/Cache.h ../../include/IceUtil/CountDownLatch.h ../Freeze/EvictorI.h ../../include/IceUtil/IceUtil.h ../../include/IceUtil/AbstractMutex.h ../../include/IceUtil/Algorithm.h ../../include/IceUtil/ArgVector.h ../../include/IceUtil/Base64.h ../../include/IceUtil/CtrlCHandler.h ../../include/IceUtil/InputUtil.h ../../include/IceUtil/Iterator.h ../../include/IceUtil/MD5.h ../../include/IceUtil/Options.h ../../include/IceUtil/OutputUtil.h ../../include/IceUtil/RWRecMutex.h ../../include/IceUtil/Thread.h ../../include/IceUtil/Random.h ../../include/IceUtil/ScopedArray.h ../../include/IceUtil/StringUtil.h ../../include/IceUtil/UUID.h ../../include/Freeze/Freeze.h ../../include/Freeze/Initialize.h ../../include/Freeze/EvictorF.h ../../include/Freeze/ConnectionF.h ../../include/Freeze/BackgroundSaveEvictor.h ../../include/Freeze/Evictor.h ../../include/Freeze/Exception.h ../../include/Freeze/TransactionalEvictor.h ../../include/Freeze/Map.h ../../include/Freeze/Connection.h ../../include/Freeze/TransactionHolder.h ../Freeze/EvictorIteratorI.h ../Freeze/SharedDbEnv.h ../../include/IceUtil/DisableWarnings.h ../Freeze/BackgroundSaveEvictorI.h ../Freeze/Util.h ../../include/Freeze/Catalog.h ../../include/Freeze/CatalogData.h ../Freeze/IndexI.h
PingObject$(OBJEXT): PingObject.cpp ../Freeze/PingObject.h ../../include/Ice/LocalObjectF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/Proxy.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/Outgoing.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/BasicStream.h ../../include/Ice/InstanceF.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/Direct.h ../../include/Ice/FactoryTable.h ../../include/Ice/FactoryTableDef.h ../../include/IceUtil/StaticMutex.h ../../include/Ice/UserExceptionFactoryF.h ../../include/Ice/LocalException.h ../../include/Ice/BuiltinSequences.h ../../include/Ice/ObjectFactory.h ../../include/IceUtil/Iterator.h ../../include/IceUtil/ScopedArray.h ../../include/IceUtil/DisableWarnings.h
-SharedDbEnv$(OBJEXT): SharedDbEnv.cpp ../Freeze/SharedDbEnv.h ../../include/Ice/Config.h ../../include/IceUtil/Config.h ../../include/Ice/Ice.h ../../include/Ice/Initialize.h ../../include/Ice/CommunicatorF.h ../../include/Ice/LocalObjectF.h ../../include/IceUtil/Shared.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/PropertiesF.h ../../include/Ice/InstanceF.h ../../include/Ice/LoggerF.h ../../include/Ice/StreamF.h ../../include/Ice/StatsF.h ../../include/Ice/StringConverter.h ../../include/Ice/BuiltinSequences.h ../../include/Ice/Proxy.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/LocalException.h ../../include/Ice/Properties.h ../../include/Ice/Logger.h ../../include/Ice/LoggerUtil.h ../../include/Ice/Stats.h ../../include/Ice/Communicator.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/RouterF.h ../../include/Ice/LocatorF.h ../../include/Ice/PluginF.h ../../include/Ice/ImplicitContextF.h ../../include/Ice/ObjectFactory.h ../../include/Ice/ObjectAdapter.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/FacetMap.h ../../include/Ice/ServantLocator.h ../../include/Ice/OutgoingAsync.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/IceUtil/RecMutex.h ../../include/Ice/IncomingAsync.h ../../include/Ice/Incoming.h ../../include/Ice/ServantManagerF.h ../../include/Ice/BasicStream.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/IceUtil/Unicode.h ../../include/Ice/Process.h ../../include/Ice/Outgoing.h ../../include/Ice/Direct.h ../../include/Ice/Application.h ../../include/Ice/Connection.h ../../include/Ice/Functional.h ../../include/IceUtil/Functional.h ../../include/Ice/Stream.h ../../include/Ice/ImplicitContext.h ../../include/Ice/Locator.h ../../include/Ice/UserExceptionFactory.h ../../include/Ice/FactoryTable.h ../../include/Ice/FactoryTableDef.h ../../include/IceUtil/StaticMutex.h ../../include/Ice/UserExceptionFactoryF.h ../../include/Ice/ProcessF.h ../../include/Ice/Router.h ../../include/Ice/DispatchInterceptor.h ../../include/Freeze/Exception.h ../Freeze/Util.h ../../include/Freeze/DB.h ../Freeze/SharedDb.h ../Freeze/ConnectionI.h ../../include/Freeze/Connection.h ../../include/Freeze/Transaction.h ../../include/Freeze/Initialize.h ../../include/Freeze/EvictorF.h ../../include/Freeze/ConnectionF.h ../../include/Freeze/Index.h ../Freeze/TransactionI.h ../../include/Freeze/Map.h ../Freeze/TransactionalEvictorContextI.h ../../include/Freeze/TransactionalEvictor.h ../../include/Freeze/Evictor.h ../../include/Freeze/EvictorStorage.h ../Freeze/EvictorI.h ../../include/IceUtil/IceUtil.h ../../include/IceUtil/AbstractMutex.h ../../include/IceUtil/Algorithm.h ../../include/IceUtil/ArgVector.h ../../include/IceUtil/Base64.h ../../include/IceUtil/Cache.h ../../include/IceUtil/CountDownLatch.h ../../include/IceUtil/CtrlCHandler.h ../../include/IceUtil/InputUtil.h ../../include/IceUtil/Iterator.h ../../include/IceUtil/MD5.h ../../include/IceUtil/Options.h ../../include/IceUtil/OutputUtil.h ../../include/IceUtil/RWRecMutex.h ../../include/IceUtil/Thread.h ../../include/IceUtil/Random.h ../../include/IceUtil/ScopedArray.h ../../include/IceUtil/StringUtil.h ../../include/IceUtil/UUID.h ../../include/Freeze/Freeze.h ../../include/Freeze/BackgroundSaveEvictor.h ../../include/Freeze/TransactionHolder.h ../Freeze/ObjectStore.h ../Freeze/EvictorIteratorI.h ../../include/IceUtil/DisableWarnings.h
+SharedDbEnv$(OBJEXT): SharedDbEnv.cpp ../Freeze/SharedDbEnv.h ../../include/Ice/Config.h ../../include/IceUtil/Config.h ../../include/Ice/Ice.h ../../include/Ice/Initialize.h ../../include/Ice/CommunicatorF.h ../../include/Ice/LocalObjectF.h ../../include/IceUtil/Shared.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/PropertiesF.h ../../include/Ice/InstanceF.h ../../include/Ice/LoggerF.h ../../include/Ice/StreamF.h ../../include/Ice/StatsF.h ../../include/Ice/StringConverter.h ../../include/Ice/BuiltinSequences.h ../../include/Ice/Proxy.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/LocalException.h ../../include/Ice/Properties.h ../../include/Ice/Logger.h ../../include/Ice/LoggerUtil.h ../../include/Ice/Stats.h ../../include/Ice/Communicator.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/RouterF.h ../../include/Ice/LocatorF.h ../../include/Ice/PluginF.h ../../include/Ice/ImplicitContextF.h ../../include/Ice/ObjectFactory.h ../../include/Ice/ObjectAdapter.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/FacetMap.h ../../include/Ice/ServantLocator.h ../../include/Ice/OutgoingAsync.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/IceUtil/RecMutex.h ../../include/Ice/IncomingAsync.h ../../include/Ice/Incoming.h ../../include/Ice/ServantManagerF.h ../../include/Ice/BasicStream.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/IceUtil/Unicode.h ../../include/Ice/Process.h ../../include/Ice/Outgoing.h ../../include/Ice/Direct.h ../../include/Ice/Application.h ../../include/Ice/Connection.h ../../include/Ice/Functional.h ../../include/IceUtil/Functional.h ../../include/Ice/Stream.h ../../include/Ice/ImplicitContext.h ../../include/Ice/Locator.h ../../include/Ice/UserExceptionFactory.h ../../include/Ice/FactoryTable.h ../../include/Ice/FactoryTableDef.h ../../include/IceUtil/StaticMutex.h ../../include/Ice/UserExceptionFactoryF.h ../../include/Ice/ProcessF.h ../../include/Ice/Router.h ../../include/Ice/DispatchInterceptor.h ../../include/Freeze/Exception.h ../Freeze/Util.h ../../include/Freeze/DB.h ../Freeze/SharedDb.h ../Freeze/ConnectionI.h ../../include/Freeze/Connection.h ../../include/Freeze/Transaction.h ../../include/Freeze/Initialize.h ../../include/Freeze/EvictorF.h ../../include/Freeze/ConnectionF.h ../../include/Freeze/Index.h ../Freeze/TransactionI.h ../../include/Freeze/Map.h ../Freeze/TransactionalEvictorContext.h ../../include/Freeze/TransactionalEvictor.h ../../include/Freeze/Evictor.h ../../include/Freeze/EvictorStorage.h ../Freeze/EvictorI.h ../../include/IceUtil/IceUtil.h ../../include/IceUtil/AbstractMutex.h ../../include/IceUtil/Algorithm.h ../../include/IceUtil/ArgVector.h ../../include/IceUtil/Base64.h ../../include/IceUtil/Cache.h ../../include/IceUtil/CountDownLatch.h ../../include/IceUtil/CtrlCHandler.h ../../include/IceUtil/InputUtil.h ../../include/IceUtil/Iterator.h ../../include/IceUtil/MD5.h ../../include/IceUtil/Options.h ../../include/IceUtil/OutputUtil.h ../../include/IceUtil/RWRecMutex.h ../../include/IceUtil/Thread.h ../../include/IceUtil/Random.h ../../include/IceUtil/ScopedArray.h ../../include/IceUtil/StringUtil.h ../../include/IceUtil/UUID.h ../../include/Freeze/Freeze.h ../../include/Freeze/BackgroundSaveEvictor.h ../../include/Freeze/TransactionHolder.h ../Freeze/ObjectStore.h ../Freeze/EvictorIteratorI.h ../../include/IceUtil/DisableWarnings.h
SharedDb$(OBJEXT): SharedDb.cpp ../Freeze/SharedDb.h ../../include/IceUtil/Config.h ../Freeze/ConnectionI.h ../../include/Freeze/Connection.h ../../include/Ice/LocalObjectF.h ../../include/IceUtil/Shared.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Freeze/Transaction.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/CommunicatorF.h ../../include/Freeze/Initialize.h ../../include/Ice/Ice.h ../../include/Ice/Initialize.h ../../include/Ice/PropertiesF.h ../../include/Ice/InstanceF.h ../../include/Ice/LoggerF.h ../../include/Ice/StreamF.h ../../include/Ice/StatsF.h ../../include/Ice/StringConverter.h ../../include/Ice/BuiltinSequences.h ../../include/Ice/Proxy.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/LocalException.h ../../include/Ice/Properties.h ../../include/Ice/Logger.h ../../include/Ice/LoggerUtil.h ../../include/Ice/Stats.h ../../include/Ice/Communicator.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/RouterF.h ../../include/Ice/LocatorF.h ../../include/Ice/PluginF.h ../../include/Ice/ImplicitContextF.h ../../include/Ice/ObjectFactory.h ../../include/Ice/ObjectAdapter.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/FacetMap.h ../../include/Ice/ServantLocator.h ../../include/Ice/OutgoingAsync.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/IceUtil/RecMutex.h ../../include/Ice/IncomingAsync.h ../../include/Ice/Incoming.h ../../include/Ice/ServantManagerF.h ../../include/Ice/BasicStream.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/IceUtil/Unicode.h ../../include/Ice/Process.h ../../include/Ice/Outgoing.h ../../include/Ice/Direct.h ../../include/Ice/Application.h ../../include/Ice/Connection.h ../../include/Ice/Functional.h ../../include/IceUtil/Functional.h ../../include/Ice/Stream.h ../../include/Ice/ImplicitContext.h ../../include/Ice/Locator.h ../../include/Ice/UserExceptionFactory.h ../../include/Ice/FactoryTable.h ../../include/Ice/FactoryTableDef.h ../../include/IceUtil/StaticMutex.h ../../include/Ice/UserExceptionFactoryF.h ../../include/Ice/ProcessF.h ../../include/Ice/Router.h ../../include/Ice/DispatchInterceptor.h ../../include/Freeze/EvictorF.h ../../include/Freeze/ConnectionF.h ../../include/Freeze/Index.h ../../include/Freeze/DB.h ../Freeze/TransactionI.h ../Freeze/SharedDbEnv.h ../../include/Freeze/Map.h ../../include/Freeze/Exception.h ../Freeze/Util.h ../../include/Freeze/Catalog.h ../../include/Freeze/CatalogData.h
TransactionalEvictor$(OBJEXT): TransactionalEvictor.cpp ../../include/Freeze/TransactionalEvictor.h ../../include/Ice/LocalObjectF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/Proxy.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/CommunicatorF.h ../../include/Freeze/Evictor.h ../../include/Ice/ServantLocator.h ../../include/Freeze/Exception.h ../../include/Ice/BasicStream.h ../../include/Ice/InstanceF.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/IceUtil/Iterator.h ../../include/IceUtil/ScopedArray.h ../../include/IceUtil/DisableWarnings.h
-TransactionalEvictorI$(OBJEXT): TransactionalEvictorI.cpp ../Freeze/TransactionalEvictorI.h ../Freeze/EvictorI.h ../../include/IceUtil/IceUtil.h ../../include/IceUtil/Config.h ../../include/IceUtil/AbstractMutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/IceUtil/Algorithm.h ../../include/IceUtil/ArgVector.h ../../include/IceUtil/Base64.h ../../include/IceUtil/Cache.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/CountDownLatch.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/IceUtil/CtrlCHandler.h ../../include/IceUtil/Functional.h ../../include/IceUtil/InputUtil.h ../../include/IceUtil/Iterator.h ../../include/IceUtil/MD5.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Options.h ../../include/IceUtil/RecMutex.h ../../include/IceUtil/Shared.h ../../include/IceUtil/OutputUtil.h ../../include/IceUtil/RWRecMutex.h ../../include/IceUtil/Thread.h ../../include/IceUtil/Random.h ../../include/IceUtil/ScopedArray.h ../../include/IceUtil/StaticMutex.h ../../include/IceUtil/StringUtil.h ../../include/IceUtil/UUID.h ../../include/IceUtil/Unicode.h ../../include/Ice/Ice.h ../../include/Ice/Initialize.h ../../include/Ice/CommunicatorF.h ../../include/Ice/LocalObjectF.h ../../include/Ice/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/PropertiesF.h ../../include/Ice/InstanceF.h ../../include/Ice/LoggerF.h ../../include/Ice/StreamF.h ../../include/Ice/StatsF.h ../../include/Ice/StringConverter.h ../../include/Ice/BuiltinSequences.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/LocalException.h ../../include/Ice/Properties.h ../../include/Ice/Logger.h ../../include/Ice/LoggerUtil.h ../../include/Ice/Stats.h ../../include/Ice/Communicator.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/RouterF.h ../../include/Ice/LocatorF.h ../../include/Ice/PluginF.h ../../include/Ice/ImplicitContextF.h ../../include/Ice/ObjectFactory.h ../../include/Ice/ObjectAdapter.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/FacetMap.h ../../include/Ice/ServantLocator.h ../../include/Ice/OutgoingAsync.h ../../include/Ice/IncomingAsync.h ../../include/Ice/Incoming.h ../../include/Ice/ServantManagerF.h ../../include/Ice/BasicStream.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/Process.h ../../include/Ice/Outgoing.h ../../include/Ice/Direct.h ../../include/Ice/Application.h ../../include/Ice/Connection.h ../../include/Ice/Functional.h ../../include/Ice/Stream.h ../../include/Ice/ImplicitContext.h ../../include/Ice/Locator.h ../../include/Ice/UserExceptionFactory.h ../../include/Ice/FactoryTable.h ../../include/Ice/FactoryTableDef.h ../../include/Ice/UserExceptionFactoryF.h ../../include/Ice/ProcessF.h ../../include/Ice/Router.h ../../include/Ice/DispatchInterceptor.h ../../include/Freeze/Freeze.h ../../include/Freeze/Initialize.h ../../include/Freeze/EvictorF.h ../../include/Freeze/ConnectionF.h ../../include/Freeze/Index.h ../../include/Freeze/DB.h ../../include/Freeze/Transaction.h ../../include/Freeze/BackgroundSaveEvictor.h ../../include/Freeze/Evictor.h ../../include/Freeze/Exception.h ../../include/Freeze/TransactionalEvictor.h ../../include/Freeze/Map.h ../../include/Freeze/Connection.h ../../include/Freeze/TransactionHolder.h ../Freeze/ObjectStore.h ../../include/Freeze/EvictorStorage.h ../Freeze/TransactionI.h ../Freeze/EvictorIteratorI.h ../Freeze/SharedDbEnv.h ../../include/IceUtil/DisableWarnings.h ../Freeze/Util.h ../Freeze/TransactionalEvictorContextI.h
-TransactionalEvictorContextI$(OBJEXT): TransactionalEvictorContextI.cpp ../Freeze/TransactionalEvictorContextI.h ../../include/Ice/Ice.h ../../include/Ice/Initialize.h ../../include/Ice/CommunicatorF.h ../../include/Ice/LocalObjectF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/PropertiesF.h ../../include/Ice/InstanceF.h ../../include/Ice/LoggerF.h ../../include/Ice/StreamF.h ../../include/Ice/StatsF.h ../../include/Ice/StringConverter.h ../../include/Ice/BuiltinSequences.h ../../include/Ice/Proxy.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/LocalException.h ../../include/Ice/Properties.h ../../include/Ice/Logger.h ../../include/Ice/LoggerUtil.h ../../include/Ice/Stats.h ../../include/Ice/Communicator.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/RouterF.h ../../include/Ice/LocatorF.h ../../include/Ice/PluginF.h ../../include/Ice/ImplicitContextF.h ../../include/Ice/ObjectFactory.h ../../include/Ice/ObjectAdapter.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/FacetMap.h ../../include/Ice/ServantLocator.h ../../include/Ice/OutgoingAsync.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/IceUtil/RecMutex.h ../../include/Ice/IncomingAsync.h ../../include/Ice/Incoming.h ../../include/Ice/ServantManagerF.h ../../include/Ice/BasicStream.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/IceUtil/Unicode.h ../../include/Ice/Process.h ../../include/Ice/Outgoing.h ../../include/Ice/Direct.h ../../include/Ice/Application.h ../../include/Ice/Connection.h ../../include/Ice/Functional.h ../../include/IceUtil/Functional.h ../../include/Ice/Stream.h ../../include/Ice/ImplicitContext.h ../../include/Ice/Locator.h ../../include/Ice/UserExceptionFactory.h ../../include/Ice/FactoryTable.h ../../include/Ice/FactoryTableDef.h ../../include/IceUtil/StaticMutex.h ../../include/Ice/UserExceptionFactoryF.h ../../include/Ice/ProcessF.h ../../include/Ice/Router.h ../../include/Ice/DispatchInterceptor.h ../../include/Freeze/TransactionalEvictor.h ../../include/Freeze/Evictor.h ../../include/Freeze/Exception.h ../../include/Freeze/EvictorStorage.h ../Freeze/EvictorI.h ../../include/IceUtil/IceUtil.h ../../include/IceUtil/AbstractMutex.h ../../include/IceUtil/Algorithm.h ../../include/IceUtil/ArgVector.h ../../include/IceUtil/Base64.h ../../include/IceUtil/Cache.h ../../include/IceUtil/CountDownLatch.h ../../include/IceUtil/CtrlCHandler.h ../../include/IceUtil/InputUtil.h ../../include/IceUtil/Iterator.h ../../include/IceUtil/MD5.h ../../include/IceUtil/Options.h ../../include/IceUtil/OutputUtil.h ../../include/IceUtil/RWRecMutex.h ../../include/IceUtil/Thread.h ../../include/IceUtil/Random.h ../../include/IceUtil/ScopedArray.h ../../include/IceUtil/StringUtil.h ../../include/IceUtil/UUID.h ../../include/Freeze/Freeze.h ../../include/Freeze/Initialize.h ../../include/Freeze/EvictorF.h ../../include/Freeze/ConnectionF.h ../../include/Freeze/Index.h ../../include/Freeze/DB.h ../../include/Freeze/Transaction.h ../../include/Freeze/BackgroundSaveEvictor.h ../../include/Freeze/Map.h ../../include/Freeze/Connection.h ../../include/Freeze/TransactionHolder.h ../Freeze/ObjectStore.h ../Freeze/TransactionI.h ../Freeze/EvictorIteratorI.h ../Freeze/SharedDbEnv.h ../../include/IceUtil/DisableWarnings.h ../Freeze/TransactionalEvictorI.h ../Freeze/Util.h ../Freeze/ConnectionI.h
+TransactionalEvictorI$(OBJEXT): TransactionalEvictorI.cpp ../Freeze/TransactionalEvictorI.h ../Freeze/EvictorI.h ../../include/IceUtil/IceUtil.h ../../include/IceUtil/Config.h ../../include/IceUtil/AbstractMutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/IceUtil/Algorithm.h ../../include/IceUtil/ArgVector.h ../../include/IceUtil/Base64.h ../../include/IceUtil/Cache.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/CountDownLatch.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/IceUtil/CtrlCHandler.h ../../include/IceUtil/Functional.h ../../include/IceUtil/InputUtil.h ../../include/IceUtil/Iterator.h ../../include/IceUtil/MD5.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Options.h ../../include/IceUtil/RecMutex.h ../../include/IceUtil/Shared.h ../../include/IceUtil/OutputUtil.h ../../include/IceUtil/RWRecMutex.h ../../include/IceUtil/Thread.h ../../include/IceUtil/Random.h ../../include/IceUtil/ScopedArray.h ../../include/IceUtil/StaticMutex.h ../../include/IceUtil/StringUtil.h ../../include/IceUtil/UUID.h ../../include/IceUtil/Unicode.h ../../include/Ice/Ice.h ../../include/Ice/Initialize.h ../../include/Ice/CommunicatorF.h ../../include/Ice/LocalObjectF.h ../../include/Ice/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/PropertiesF.h ../../include/Ice/InstanceF.h ../../include/Ice/LoggerF.h ../../include/Ice/StreamF.h ../../include/Ice/StatsF.h ../../include/Ice/StringConverter.h ../../include/Ice/BuiltinSequences.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/LocalException.h ../../include/Ice/Properties.h ../../include/Ice/Logger.h ../../include/Ice/LoggerUtil.h ../../include/Ice/Stats.h ../../include/Ice/Communicator.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/RouterF.h ../../include/Ice/LocatorF.h ../../include/Ice/PluginF.h ../../include/Ice/ImplicitContextF.h ../../include/Ice/ObjectFactory.h ../../include/Ice/ObjectAdapter.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/FacetMap.h ../../include/Ice/ServantLocator.h ../../include/Ice/OutgoingAsync.h ../../include/Ice/IncomingAsync.h ../../include/Ice/Incoming.h ../../include/Ice/ServantManagerF.h ../../include/Ice/BasicStream.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/Process.h ../../include/Ice/Outgoing.h ../../include/Ice/Direct.h ../../include/Ice/Application.h ../../include/Ice/Connection.h ../../include/Ice/Functional.h ../../include/Ice/Stream.h ../../include/Ice/ImplicitContext.h ../../include/Ice/Locator.h ../../include/Ice/UserExceptionFactory.h ../../include/Ice/FactoryTable.h ../../include/Ice/FactoryTableDef.h ../../include/Ice/UserExceptionFactoryF.h ../../include/Ice/ProcessF.h ../../include/Ice/Router.h ../../include/Ice/DispatchInterceptor.h ../../include/Freeze/Freeze.h ../../include/Freeze/Initialize.h ../../include/Freeze/EvictorF.h ../../include/Freeze/ConnectionF.h ../../include/Freeze/Index.h ../../include/Freeze/DB.h ../../include/Freeze/Transaction.h ../../include/Freeze/BackgroundSaveEvictor.h ../../include/Freeze/Evictor.h ../../include/Freeze/Exception.h ../../include/Freeze/TransactionalEvictor.h ../../include/Freeze/Map.h ../../include/Freeze/Connection.h ../../include/Freeze/TransactionHolder.h ../Freeze/ObjectStore.h ../../include/Freeze/EvictorStorage.h ../Freeze/TransactionI.h ../Freeze/EvictorIteratorI.h ../Freeze/SharedDbEnv.h ../../include/IceUtil/DisableWarnings.h ../Freeze/Util.h ../Freeze/TransactionalEvictorContext.h
+TransactionalEvictorContext$(OBJEXT): TransactionalEvictorContext.cpp ../Freeze/TransactionalEvictorContext.h ../../include/Ice/Ice.h ../../include/Ice/Initialize.h ../../include/Ice/CommunicatorF.h ../../include/Ice/LocalObjectF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/PropertiesF.h ../../include/Ice/InstanceF.h ../../include/Ice/LoggerF.h ../../include/Ice/StreamF.h ../../include/Ice/StatsF.h ../../include/Ice/StringConverter.h ../../include/Ice/BuiltinSequences.h ../../include/Ice/Proxy.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/LocalException.h ../../include/Ice/Properties.h ../../include/Ice/Logger.h ../../include/Ice/LoggerUtil.h ../../include/Ice/Stats.h ../../include/Ice/Communicator.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/RouterF.h ../../include/Ice/LocatorF.h ../../include/Ice/PluginF.h ../../include/Ice/ImplicitContextF.h ../../include/Ice/ObjectFactory.h ../../include/Ice/ObjectAdapter.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/FacetMap.h ../../include/Ice/ServantLocator.h ../../include/Ice/OutgoingAsync.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/IceUtil/RecMutex.h ../../include/Ice/IncomingAsync.h ../../include/Ice/Incoming.h ../../include/Ice/ServantManagerF.h ../../include/Ice/BasicStream.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/IceUtil/Unicode.h ../../include/Ice/Process.h ../../include/Ice/Outgoing.h ../../include/Ice/Direct.h ../../include/Ice/Application.h ../../include/Ice/Connection.h ../../include/Ice/Functional.h ../../include/IceUtil/Functional.h ../../include/Ice/Stream.h ../../include/Ice/ImplicitContext.h ../../include/Ice/Locator.h ../../include/Ice/UserExceptionFactory.h ../../include/Ice/FactoryTable.h ../../include/Ice/FactoryTableDef.h ../../include/IceUtil/StaticMutex.h ../../include/Ice/UserExceptionFactoryF.h ../../include/Ice/ProcessF.h ../../include/Ice/Router.h ../../include/Ice/DispatchInterceptor.h ../../include/Freeze/TransactionalEvictor.h ../../include/Freeze/Evictor.h ../../include/Freeze/Exception.h ../../include/Freeze/EvictorStorage.h ../Freeze/EvictorI.h ../../include/IceUtil/IceUtil.h ../../include/IceUtil/AbstractMutex.h ../../include/IceUtil/Algorithm.h ../../include/IceUtil/ArgVector.h ../../include/IceUtil/Base64.h ../../include/IceUtil/Cache.h ../../include/IceUtil/CountDownLatch.h ../../include/IceUtil/CtrlCHandler.h ../../include/IceUtil/InputUtil.h ../../include/IceUtil/Iterator.h ../../include/IceUtil/MD5.h ../../include/IceUtil/Options.h ../../include/IceUtil/OutputUtil.h ../../include/IceUtil/RWRecMutex.h ../../include/IceUtil/Thread.h ../../include/IceUtil/Random.h ../../include/IceUtil/ScopedArray.h ../../include/IceUtil/StringUtil.h ../../include/IceUtil/UUID.h ../../include/Freeze/Freeze.h ../../include/Freeze/Initialize.h ../../include/Freeze/EvictorF.h ../../include/Freeze/ConnectionF.h ../../include/Freeze/Index.h ../../include/Freeze/DB.h ../../include/Freeze/Transaction.h ../../include/Freeze/BackgroundSaveEvictor.h ../../include/Freeze/Map.h ../../include/Freeze/Connection.h ../../include/Freeze/TransactionHolder.h ../Freeze/ObjectStore.h ../Freeze/TransactionI.h ../Freeze/EvictorIteratorI.h ../Freeze/SharedDbEnv.h ../../include/IceUtil/DisableWarnings.h ../Freeze/TransactionalEvictorI.h ../Freeze/Util.h ../Freeze/ConnectionI.h
TransactionHolder$(OBJEXT): TransactionHolder.cpp ../../include/Freeze/TransactionHolder.h ../../include/Freeze/Connection.h ../../include/Ice/LocalObjectF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Freeze/Transaction.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/CommunicatorF.h
TransactionI$(OBJEXT): TransactionI.cpp ../Freeze/TransactionI.h ../../include/Freeze/Transaction.h ../../include/Ice/LocalObjectF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../Freeze/ConnectionI.h ../../include/Freeze/Connection.h ../../include/Ice/CommunicatorF.h ../../include/Freeze/Initialize.h ../../include/Ice/Ice.h ../../include/Ice/Initialize.h ../../include/Ice/PropertiesF.h ../../include/Ice/InstanceF.h ../../include/Ice/LoggerF.h ../../include/Ice/StreamF.h ../../include/Ice/StatsF.h ../../include/Ice/StringConverter.h ../../include/Ice/BuiltinSequences.h ../../include/Ice/Proxy.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/LocalException.h ../../include/Ice/Properties.h ../../include/Ice/Logger.h ../../include/Ice/LoggerUtil.h ../../include/Ice/Stats.h ../../include/Ice/Communicator.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/RouterF.h ../../include/Ice/LocatorF.h ../../include/Ice/PluginF.h ../../include/Ice/ImplicitContextF.h ../../include/Ice/ObjectFactory.h ../../include/Ice/ObjectAdapter.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/FacetMap.h ../../include/Ice/ServantLocator.h ../../include/Ice/OutgoingAsync.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/IceUtil/RecMutex.h ../../include/Ice/IncomingAsync.h ../../include/Ice/Incoming.h ../../include/Ice/ServantManagerF.h ../../include/Ice/BasicStream.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/IceUtil/Unicode.h ../../include/Ice/Process.h ../../include/Ice/Outgoing.h ../../include/Ice/Direct.h ../../include/Ice/Application.h ../../include/Ice/Connection.h ../../include/Ice/Functional.h ../../include/IceUtil/Functional.h ../../include/Ice/Stream.h ../../include/Ice/ImplicitContext.h ../../include/Ice/Locator.h ../../include/Ice/UserExceptionFactory.h ../../include/Ice/FactoryTable.h ../../include/Ice/FactoryTableDef.h ../../include/IceUtil/StaticMutex.h ../../include/Ice/UserExceptionFactoryF.h ../../include/Ice/ProcessF.h ../../include/Ice/Router.h ../../include/Ice/DispatchInterceptor.h ../../include/Freeze/EvictorF.h ../../include/Freeze/ConnectionF.h ../../include/Freeze/Index.h ../../include/Freeze/DB.h ../Freeze/SharedDbEnv.h ../../include/Freeze/Exception.h
Transaction$(OBJEXT): Transaction.cpp ../../include/Freeze/Transaction.h ../../include/Ice/LocalObjectF.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../../include/IceUtil/Iterator.h ../../include/IceUtil/ScopedArray.h ../../include/IceUtil/DisableWarnings.h
diff --git a/cpp/src/Freeze/BackgroundSaveEvictorI.cpp b/cpp/src/Freeze/BackgroundSaveEvictorI.cpp
index dd228d80cd7..b047ae4ed47 100644
--- a/cpp/src/Freeze/BackgroundSaveEvictorI.cpp
+++ b/cpp/src/Freeze/BackgroundSaveEvictorI.cpp
@@ -1229,7 +1229,7 @@ Freeze::BackgroundSaveEvictorI::run()
}
}
-DbTxn*
+Freeze::TransactionIPtr
Freeze::BackgroundSaveEvictorI::beforeQuery()
{
saveNow();
diff --git a/cpp/src/Freeze/BackgroundSaveEvictorI.h b/cpp/src/Freeze/BackgroundSaveEvictorI.h
index 83498be90c7..72fb895dd43 100644
--- a/cpp/src/Freeze/BackgroundSaveEvictorI.h
+++ b/cpp/src/Freeze/BackgroundSaveEvictorI.h
@@ -151,7 +151,7 @@ public:
virtual ~BackgroundSaveEvictorI();
- virtual DbTxn* beforeQuery();
+ virtual TransactionIPtr beforeQuery();
//
// Thread
diff --git a/cpp/src/Freeze/EvictorI.cpp b/cpp/src/Freeze/EvictorI.cpp
index d050d2f2c74..dd2560ddfb2 100644
--- a/cpp/src/Freeze/EvictorI.cpp
+++ b/cpp/src/Freeze/EvictorI.cpp
@@ -33,15 +33,15 @@ string Freeze::EvictorIBase::indexPrefix = "$index:";
// DeactivateController
//
-Freeze::DeactivateController::Guard::Guard(DeactivateController& controller) :
- _controller(controller)
+Freeze::DeactivateController::Guard::Guard(const DeactivateController& controller) :
+ _controller(const_cast<DeactivateController&>(controller))
{
Lock sync(controller);
if(controller._deactivated || _controller._deactivating)
{
throw EvictorDeactivatedException(__FILE__, __LINE__);
}
- controller._guardCount++;
+ _controller._guardCount++;
}
Freeze::DeactivateController::Guard::~Guard()
diff --git a/cpp/src/Freeze/EvictorI.h b/cpp/src/Freeze/EvictorI.h
index c27b51af34d..6cc8c9320f8 100644
--- a/cpp/src/Freeze/EvictorI.h
+++ b/cpp/src/Freeze/EvictorI.h
@@ -44,7 +44,7 @@ public:
class Guard
{
public:
- Guard(DeactivateController&);
+ Guard(const DeactivateController&);
~Guard();
private:
@@ -81,7 +81,7 @@ class EvictorIBase : public virtual Evictor, public IceUtil::Monitor<IceUtil::Mu
{
public:
- virtual DbTxn* beforeQuery() = 0;
+ virtual TransactionIPtr beforeQuery() = 0;
virtual void setSize(Ice::Int);
virtual Ice::Int getSize();
@@ -165,7 +165,7 @@ public:
{
DeactivateController::Guard deactivateGuard(_deactivateController);
- DbTxn* tx = beforeQuery();
+ TransactionIPtr tx = beforeQuery();
return new EvictorIteratorI(findStore(facet, false), tx, batchSize);
}
diff --git a/cpp/src/Freeze/EvictorIteratorI.cpp b/cpp/src/Freeze/EvictorIteratorI.cpp
index 10e459a788c..401b17750fd 100644
--- a/cpp/src/Freeze/EvictorIteratorI.cpp
+++ b/cpp/src/Freeze/EvictorIteratorI.cpp
@@ -17,13 +17,13 @@ using namespace Freeze;
using namespace Ice;
-Freeze::EvictorIteratorI::EvictorIteratorI(ObjectStoreBase* store, DbTxn* tx, Int batchSize) :
+Freeze::EvictorIteratorI::EvictorIteratorI(ObjectStoreBase* store, const TransactionIPtr& tx, Int batchSize) :
_store(store),
_batchSize(static_cast<size_t>(batchSize)),
_key(1024),
_more(store != 0),
_initialized(false),
- _tx(tx)
+ _tx(tx == 0 ? 0 : tx->dbTxn())
{
_batchIterator = _batch.end();
}
diff --git a/cpp/src/Freeze/EvictorIteratorI.h b/cpp/src/Freeze/EvictorIteratorI.h
index b69b5dc3d8f..41fed5db623 100644
--- a/cpp/src/Freeze/EvictorIteratorI.h
+++ b/cpp/src/Freeze/EvictorIteratorI.h
@@ -17,13 +17,17 @@
namespace Freeze
{
+class TransactionI;
+typedef IceUtil::Handle<TransactionI> TransactionIPtr;
+
+
class ObjectStoreBase;
class EvictorIteratorI : public EvictorIterator
{
public:
- EvictorIteratorI(ObjectStoreBase*, DbTxn*, Ice::Int);
+ EvictorIteratorI(ObjectStoreBase*, const TransactionIPtr&, Ice::Int);
virtual bool hasNext();
virtual Ice::Identity next();
diff --git a/cpp/src/Freeze/IndexI.cpp b/cpp/src/Freeze/IndexI.cpp
index 5679e93fa02..11ea57a6db4 100644
--- a/cpp/src/Freeze/IndexI.cpp
+++ b/cpp/src/Freeze/IndexI.cpp
@@ -57,8 +57,9 @@ Freeze::IndexI::untypedFindFirst(const Key& bytes, Int firstN) const
Ice::CommunicatorPtr communicator = _store->communicator();
- DbTxn* tx = _store->evictor()->beforeQuery();
-
+ TransactionIPtr transaction = _store->evictor()->beforeQuery();
+ DbTxn* tx = transaction == 0 ? 0 : transaction->dbTxn();
+
vector<Identity> identities;
try
@@ -203,12 +204,13 @@ Freeze::IndexI::untypedCount(const Key& bytes) const
// (ref Oracle SR 5925672.992)
//
dbKey.set_flags(DB_DBT_USERMEM | DB_DBT_PARTIAL);
-
Dbt dbValue;
dbValue.set_flags(DB_DBT_USERMEM | DB_DBT_PARTIAL);
- DbTxn* tx = _store->evictor()->beforeQuery();
+ TransactionIPtr transaction = _store->evictor()->beforeQuery();
+ DbTxn* tx = transaction == 0 ? 0 : transaction->dbTxn();
+
Int result = 0;
try
diff --git a/cpp/src/Freeze/Makefile b/cpp/src/Freeze/Makefile
index 5383d96591d..5034fd1d397 100644
--- a/cpp/src/Freeze/Makefile
+++ b/cpp/src/Freeze/Makefile
@@ -37,7 +37,7 @@ OBJS = BackgroundSaveEvictor.o \
SharedDb.o \
TransactionalEvictor.o \
TransactionalEvictorI.o \
- TransactionalEvictorContextI.o \
+ TransactionalEvictorContext.o \
TransactionHolder.o \
TransactionI.o \
Transaction.o \
diff --git a/cpp/src/Freeze/Makefile.mak b/cpp/src/Freeze/Makefile.mak
index 4b0b90fb1b6..2789c26b911 100644
--- a/cpp/src/Freeze/Makefile.mak
+++ b/cpp/src/Freeze/Makefile.mak
@@ -37,7 +37,7 @@ OBJS = BackgroundSaveEvictor.obj \
SharedDb.obj \
TransactionalEvictor.obj \
TransactionalEvictorI.obj \
- TransactionalEvictorContextI.obj \
+ TransactionalEvictorContext.obj \
TransactionHolder.obj \
TransactionI.obj \
Transaction.obj \
diff --git a/cpp/src/Freeze/ObjectStore.cpp b/cpp/src/Freeze/ObjectStore.cpp
index 77556081f22..f472cba7614 100644
--- a/cpp/src/Freeze/ObjectStore.cpp
+++ b/cpp/src/Freeze/ObjectStore.cpp
@@ -160,8 +160,18 @@ Freeze::ObjectStoreBase::~ObjectStoreBase()
}
bool
-Freeze::ObjectStoreBase::dbHasObject(const Identity& ident, DbTxn* tx) const
+Freeze::ObjectStoreBase::dbHasObject(const Identity& ident, const TransactionIPtr& transaction) const
{
+ DbTxn* tx = 0;
+ if(transaction != 0)
+ {
+ tx = transaction->dbTxn();
+ if(tx == 0)
+ {
+ throw DatabaseException(__FILE__, __LINE__, "inactive transaction");
+ }
+ }
+
Key key;
marshal(ident, key, _communicator);
Dbt dbKey;
@@ -305,13 +315,18 @@ Freeze::ObjectStoreBase::unmarshal(ObjectRecord& v, const Value& bytes, const Co
}
bool
-Freeze::ObjectStoreBase::load(const Identity& ident, const TransactionIPtr& tx, ObjectRecord& rec)
+Freeze::ObjectStoreBase::load(const Identity& ident, const TransactionIPtr& transaction, ObjectRecord& rec)
{
- DbTxn* txn = tx->dbTxn();
+ if(transaction == 0)
+ {
+ throw DatabaseException(__FILE__, __LINE__, "no active transaction");
+ }
+
+ DbTxn* txn = transaction->dbTxn();
if(txn == 0)
{
- throw DatabaseException(__FILE__, __LINE__, "invalid TransactionalEvictorContext");
+ throw DatabaseException(__FILE__, __LINE__, "inactive transaction");
}
Key key;
@@ -364,13 +379,18 @@ Freeze::ObjectStoreBase::load(const Identity& ident, const TransactionIPtr& tx,
}
void
-Freeze::ObjectStoreBase::update(const Identity& ident, const ObjectRecord& rec, const TransactionIPtr& tx)
+Freeze::ObjectStoreBase::update(const Identity& ident, const ObjectRecord& rec, const TransactionIPtr& transaction)
{
- DbTxn* txn = tx->dbTxn();
+ if(transaction == 0)
+ {
+ throw DatabaseException(__FILE__, __LINE__, "no active transaction");
+ }
+
+ DbTxn* txn = transaction->dbTxn();
if(txn == 0)
{
- throw DatabaseException(__FILE__, __LINE__, "invalid TransactionalEvictorContext");
+ throw DatabaseException(__FILE__, __LINE__, "inactive transaction");
}
Key key;
@@ -406,8 +426,18 @@ Freeze::ObjectStoreBase::update(const Identity& ident, const ObjectRecord& rec,
}
bool
-Freeze::ObjectStoreBase::insert(const Identity& ident, const ObjectRecord& rec, DbTxn* tx)
+Freeze::ObjectStoreBase::insert(const Identity& ident, const ObjectRecord& rec, const TransactionIPtr& transaction)
{
+ DbTxn* tx = 0;
+ if(transaction != 0)
+ {
+ tx = transaction->dbTxn();
+ if(tx == 0)
+ {
+ throw DatabaseException(__FILE__, __LINE__, "inactive transaction");
+ }
+ }
+
Key key;
marshal(ident, key, _communicator);
@@ -454,8 +484,18 @@ Freeze::ObjectStoreBase::insert(const Identity& ident, const ObjectRecord& rec,
}
bool
-Freeze::ObjectStoreBase::remove(const Identity& ident, DbTxn* tx)
+Freeze::ObjectStoreBase::remove(const Identity& ident, const TransactionIPtr& transaction)
{
+ DbTxn* tx = 0;
+ if(transaction != 0)
+ {
+ tx = transaction->dbTxn();
+ if(tx == 0)
+ {
+ throw DatabaseException(__FILE__, __LINE__, "inactive transaction");
+ }
+ }
+
Key key;
marshal(ident, key, _communicator);
diff --git a/cpp/src/Freeze/ObjectStore.h b/cpp/src/Freeze/ObjectStore.h
index 23a5ab8f734..72c1e4b068c 100644
--- a/cpp/src/Freeze/ObjectStore.h
+++ b/cpp/src/Freeze/ObjectStore.h
@@ -40,7 +40,7 @@ public:
const Ice::ObjectPtr& sampleServant() const;
- bool dbHasObject(const Ice::Identity&, DbTxn*) const;
+ bool dbHasObject(const Ice::Identity&, const TransactionIPtr&) const;
void save(Key& key, Value& value, Ice::Byte status, DbTxn* tx);
static void marshal(const Ice::Identity&, Key&, const Ice::CommunicatorPtr&);
@@ -51,8 +51,8 @@ public:
bool load(const Ice::Identity&, const TransactionIPtr&, ObjectRecord&);
void update(const Ice::Identity&, const ObjectRecord&, const TransactionIPtr&);
- bool insert(const Ice::Identity&, const ObjectRecord&, DbTxn*);
- bool remove(const Ice::Identity&, DbTxn*);
+ bool insert(const Ice::Identity&, const ObjectRecord&, const TransactionIPtr&);
+ bool remove(const Ice::Identity&, const TransactionIPtr&);
EvictorIBase* evictor() const;
diff --git a/cpp/src/Freeze/SharedDbEnv.cpp b/cpp/src/Freeze/SharedDbEnv.cpp
index ecf6bc09d04..de30521dfbe 100644
--- a/cpp/src/Freeze/SharedDbEnv.cpp
+++ b/cpp/src/Freeze/SharedDbEnv.cpp
@@ -11,7 +11,7 @@
#include <Freeze/Exception.h>
#include <Freeze/Util.h>
#include <Freeze/SharedDb.h>
-#include <Freeze/TransactionalEvictorContextI.h>
+#include <Freeze/TransactionalEvictorContext.h>
#include <IceUtil/IceUtil.h>
@@ -218,38 +218,33 @@ void Freeze::SharedDbEnv::__decRef()
}
-Freeze::TransactionalEvictorContextIPtr
-Freeze::SharedDbEnv::getOrCreateCurrent(bool& created)
-{
- created = false;
-
- Freeze::TransactionalEvictorContextIPtr ctx = getCurrent();
- if(ctx == 0)
- {
- ctx = new TransactionalEvictorContextI(this);
+Freeze::TransactionalEvictorContextPtr
+Freeze::SharedDbEnv::createCurrent()
+{
+ assert(getCurrent() == 0);
+
+ Freeze::TransactionalEvictorContextPtr ctx = new TransactionalEvictorContext(this);
#ifdef _WIN32
- if(TlsSetValue(_tsdKey, ctx.get()) == 0)
- {
- IceUtil::ThreadSyscallException(__FILE__, __LINE__, GetLastError());
- }
+ if(TlsSetValue(_tsdKey, ctx.get()) == 0)
+ {
+ IceUtil::ThreadSyscallException(__FILE__, __LINE__, GetLastError());
+ }
#else
- if(int err = pthread_setspecific(_tsdKey, ctx.get()))
- {
- throw IceUtil::ThreadSyscallException(__FILE__, __LINE__, err);
- }
-#endif
- created = true;
-
- //
- // Give one refcount to this thread!
- //
- ctx->__incRef();
+ if(int err = pthread_setspecific(_tsdKey, ctx.get()))
+ {
+ throw IceUtil::ThreadSyscallException(__FILE__, __LINE__, err);
}
+#endif
+
+ //
+ // Give one refcount to this thread!
+ //
+ ctx->__incRef();
return ctx;
}
-Freeze::TransactionalEvictorContextIPtr
+Freeze::TransactionalEvictorContextPtr
Freeze::SharedDbEnv::getCurrent()
{
#ifdef _WIN32
@@ -260,7 +255,7 @@ Freeze::SharedDbEnv::getCurrent()
if(val != 0)
{
- return static_cast<Freeze::TransactionalEvictorContextI*>(val);
+ return static_cast<TransactionalEvictorContext*>(val);
}
else
{
@@ -269,9 +264,42 @@ Freeze::SharedDbEnv::getCurrent()
}
void
-Freeze::SharedDbEnv::clearCurrent(const Freeze::TransactionalEvictorContextIPtr& oldCtx)
+Freeze::SharedDbEnv::setCurrentTransaction(const Freeze::TransactionPtr& tx)
{
- if(getCurrent() == oldCtx)
+ Freeze::TransactionalEvictorContextPtr ctx = getCurrent();
+
+ if(ctx != 0)
+ {
+ //
+ // Release thread's refcount
+ //
+ ctx->__decRef();
+ }
+
+ if(tx != 0)
+ {
+ if(ctx == 0 || ctx->transaction().get() != tx.get())
+ {
+ ctx = new TransactionalEvictorContext(TransactionIPtr::dynamicCast(tx));
+
+#ifdef _WIN32
+ if(TlsSetValue(_tsdKey, ctx.get()) == 0)
+ {
+ IceUtil::ThreadSyscallException(__FILE__, __LINE__, GetLastError());
+ }
+#else
+ if(int err = pthread_setspecific(_tsdKey, ctx.get()))
+ {
+ throw IceUtil::ThreadSyscallException(__FILE__, __LINE__, err);
+ }
+#endif
+ //
+ // Give one refcount to this thread
+ //
+ ctx->__incRef();
+ }
+ }
+ else if(ctx != 0)
{
#ifdef _WIN32
if(TlsSetValue(_tsdKey, 0) == 0)
@@ -284,11 +312,6 @@ Freeze::SharedDbEnv::clearCurrent(const Freeze::TransactionalEvictorContextIPtr&
throw IceUtil::ThreadSyscallException(__FILE__, __LINE__, err);
}
#endif
-
- //
- // Release thread's refcount
- //
- oldCtx->__decRef();
}
}
diff --git a/cpp/src/Freeze/SharedDbEnv.h b/cpp/src/Freeze/SharedDbEnv.h
index 20ea19191c7..072d03e5d86 100644
--- a/cpp/src/Freeze/SharedDbEnv.h
+++ b/cpp/src/Freeze/SharedDbEnv.h
@@ -27,8 +27,11 @@ typedef IceUtil::Handle<SharedDbEnv> SharedDbEnvPtr;
class SharedDb;
typedef IceUtil::Handle<SharedDb> SharedDbPtr;
-class TransactionalEvictorContextI;
-typedef IceUtil::Handle<TransactionalEvictorContextI> TransactionalEvictorContextIPtr;
+class Transaction;
+typedef IceInternal::Handle<Transaction> TransactionPtr;
+
+class TransactionalEvictorContext;
+typedef IceUtil::Handle<TransactionalEvictorContext> TransactionalEvictorContextPtr;
class SharedDbEnv
{
@@ -44,10 +47,10 @@ public:
//
// EvictorContext factory/manager
//
- TransactionalEvictorContextIPtr getOrCreateCurrent(bool&);
- TransactionalEvictorContextIPtr getCurrent();
- void clearCurrent(const TransactionalEvictorContextIPtr&);
-
+ TransactionalEvictorContextPtr createCurrent();
+ TransactionalEvictorContextPtr getCurrent();
+ void setCurrentTransaction(const TransactionPtr& tx);
+
DbEnv* getEnv() const;
const std::string& getEnvName() const;
const Ice::CommunicatorPtr& getCommunicator() const;
diff --git a/cpp/src/Freeze/TransactionI.cpp b/cpp/src/Freeze/TransactionI.cpp
index c9920c7bfc0..94c56dc134b 100644
--- a/cpp/src/Freeze/TransactionI.cpp
+++ b/cpp/src/Freeze/TransactionI.cpp
@@ -25,9 +25,13 @@ Freeze::getTxn(const Freeze::TransactionPtr& tx)
void
Freeze::TransactionI::commit()
{
- assert(_txn != 0);
-
+ if(_txn == 0)
+ {
+ throw DatabaseException(__FILE__, __LINE__, "inactive transaction");
+ }
+
long txnId = 0;
+
try
{
_connection->closeAllIterators();
@@ -41,19 +45,20 @@ Freeze::TransactionI::commit()
if(_txTrace >= 1)
{
- Trace out(_connection->communicator()->getLogger(), "Freeze.Map");
+ Trace out(_connection->communicator()->getLogger(), "Freeze.Transaction");
out << "committed transaction " << hex << txnId << dec;
}
}
catch(const ::DbDeadlockException& dx)
{
+
if(_txTrace >= 1)
{
- Trace out(_connection->communicator()->getLogger(), "Freeze.Map");
+ Trace out(_connection->communicator()->getLogger(), "Freeze.Transaction");
out << "failed to commit transaction " << hex << txnId << dec << ": " << dx.what();
}
- cleanup();
+ postCompletion(false, true);
DeadlockException ex(__FILE__, __LINE__);
ex.message = dx.what();
throw ex;
@@ -62,16 +67,16 @@ Freeze::TransactionI::commit()
{
if(_txTrace >= 1)
{
- Trace out(_connection->communicator()->getLogger(), "Freeze.Map");
+ Trace out(_connection->communicator()->getLogger(), "Freeze.Transaction");
out << "failed to commit transaction " << hex << txnId << dec << ": " << dx.what();
}
- cleanup();
+ postCompletion(false, false);
DatabaseException ex(__FILE__, __LINE__);
ex.message = dx.what();
throw ex;
}
- cleanup();
+ postCompletion(true, false);
}
void
@@ -93,7 +98,7 @@ Freeze::TransactionI::rollback()
if(_txTrace >= 1)
{
- Trace out(_connection->communicator()->getLogger(), "Freeze.Map");
+ Trace out(_connection->communicator()->getLogger(), "Freeze.Transaction");
out << "rolled back transaction " << hex << txnId << dec;
}
}
@@ -101,30 +106,39 @@ Freeze::TransactionI::rollback()
{
if(_txTrace >= 1)
{
- Trace out(_connection->communicator()->getLogger(), "Freeze.Map");
+ Trace out(_connection->communicator()->getLogger(), "Freeze.Transaction");
out << "failed to rollback transaction " << hex << txnId << dec << ": " << dx.what();
}
- cleanup();
- DeadlockException ex(__FILE__, __LINE__);
- ex.message = dx.what();
- throw ex;
+ postCompletion(false, true);
+ throw DeadlockException(__FILE__, __LINE__, dx.what());
}
catch(const ::DbException& dx)
{
if(_txTrace >= 1)
{
- Trace out(_connection->communicator()->getLogger(), "Freeze.Map");
+ Trace out(_connection->communicator()->getLogger(), "Freeze.Transaction");
out << "failed to rollback transaction " << hex << txnId << dec << ": " << dx.what();
}
- cleanup();
- DatabaseException ex(__FILE__, __LINE__);
- ex.message = dx.what();
- throw ex;
+ postCompletion(false, false);
+ throw DatabaseException(__FILE__, __LINE__, dx.what());
}
- cleanup();
+ postCompletion(true, false);
+}
+
+Freeze::ConnectionPtr
+Freeze::TransactionI::getConnection() const
+{
+ return _connection;
}
+
+void
+Freeze::TransactionI::setPostCompletionCallback(const Freeze::PostCompletionCallbackPtr& cb)
+{
+ _postCompletionCallback = cb;
+}
+
Freeze::TransactionI::TransactionI(ConnectionI* connection) :
_connection(connection),
@@ -138,7 +152,7 @@ Freeze::TransactionI::TransactionI(ConnectionI* connection) :
if(_txTrace >= 1)
{
long txnId = (_txn->id() & 0x7FFFFFFF) + 0x80000000L;
- Trace out(_connection->communicator()->getLogger(), "Freeze.Map");
+ Trace out(_connection->communicator()->getLogger(), "Freeze.Transaction");
out << "started transaction " << hex << txnId << dec;
}
}
@@ -146,7 +160,7 @@ Freeze::TransactionI::TransactionI(ConnectionI* connection) :
{
if(_txTrace >= 1)
{
- Trace out(_connection->communicator()->getLogger(), "Freeze.Map");
+ Trace out(_connection->communicator()->getLogger(), "Freeze.Transaction");
out << "failed to start transaction: " << dx.what();
}
@@ -165,9 +179,14 @@ Freeze::TransactionI::~TransactionI()
}
void
-Freeze::TransactionI::cleanup()
+Freeze::TransactionI::postCompletion(bool committed, bool deadlock)
{
_connection->clearTransaction();
_connection = 0;
_txn = 0;
+
+ if(_postCompletionCallback != 0)
+ {
+ _postCompletionCallback->postCompletion(committed, deadlock);
+ }
}
diff --git a/cpp/src/Freeze/TransactionI.h b/cpp/src/Freeze/TransactionI.h
index 04c44dc68c3..7a7922d1297 100644
--- a/cpp/src/Freeze/TransactionI.h
+++ b/cpp/src/Freeze/TransactionI.h
@@ -19,16 +19,27 @@ namespace Freeze
class ConnectionI;
typedef IceUtil::Handle<ConnectionI> ConnectionIPtr;
+class PostCompletionCallback : public virtual IceUtil::Shared
+{
+public:
+
+ virtual void postCompletion(bool, bool) = 0;
+};
+typedef IceUtil::Handle<PostCompletionCallback> PostCompletionCallbackPtr;
+
+
class TransactionI : public Transaction
{
public:
- virtual void
- commit();
+ virtual void commit();
- virtual void
- rollback();
+ virtual void rollback();
+
+ virtual ConnectionPtr getConnection() const;
+ void setPostCompletionCallback(const PostCompletionCallbackPtr&);
+
TransactionI(ConnectionI*);
~TransactionI();
@@ -38,14 +49,20 @@ public:
return _txn;
}
+ const ConnectionIPtr&
+ getConnectionI() const
+ {
+ return _connection;
+ }
+
private:
- void
- cleanup();
+ void postCompletion(bool, bool);
ConnectionIPtr _connection;
Ice::Int _txTrace;
DbTxn* _txn;
+ PostCompletionCallbackPtr _postCompletionCallback;
};
typedef IceUtil::Handle<TransactionI> TransactionIPtr;
diff --git a/cpp/src/Freeze/TransactionalEvictorContextI.cpp b/cpp/src/Freeze/TransactionalEvictorContext.cpp
index 891f6cb7630..4c40321a8a1 100644
--- a/cpp/src/Freeze/TransactionalEvictorContextI.cpp
+++ b/cpp/src/Freeze/TransactionalEvictorContext.cpp
@@ -7,7 +7,7 @@
//
// **********************************************************************
-#include <Freeze/TransactionalEvictorContextI.h>
+#include <Freeze/TransactionalEvictorContext.h>
#include <Freeze/TransactionalEvictorI.h>
#include <Freeze/Initialize.h>
#include <Freeze/Util.h>
@@ -20,75 +20,69 @@ using namespace Freeze;
using namespace Ice;
-Freeze::TransactionalEvictorContextI::TransactionalEvictorContextI(const SharedDbEnvPtr& dbEnv) :
+Freeze::TransactionalEvictorContext::TransactionalEvictorContext(const SharedDbEnvPtr& dbEnv) :
_tx((new ConnectionI(dbEnv))->beginTransactionI()),
- _rollbackOnly(false),
- _dbEnv(dbEnv),
_deadlockExceptionDetected(false)
-{
+{
+ _tx->setPostCompletionCallback(this);
}
-Freeze::TransactionalEvictorContextI::~TransactionalEvictorContextI()
+Freeze::TransactionalEvictorContext::TransactionalEvictorContext(const TransactionIPtr& tx) :
+ _tx(tx),
+ _deadlockExceptionDetected(false)
+{
+ _tx->setPostCompletionCallback(this);
+}
+
+
+Freeze::TransactionalEvictorContext::~TransactionalEvictorContext()
{
for_each(_invalidateList.begin(), _invalidateList.end(), ToInvalidate::destroy);
}
-void
-Freeze::TransactionalEvictorContextI::rollbackOnly()
+void
+Freeze::TransactionalEvictorContext::commit()
{
- _rollbackOnly = true;
+ if(_tx != 0)
+ {
+ _tx->commit();
+ }
}
-bool
-Freeze::TransactionalEvictorContextI::isRollbackOnly() const
+void
+Freeze::TransactionalEvictorContext::rollback()
{
- return _rollbackOnly;
+ if(_tx != 0)
+ {
+ _tx->rollback();
+ }
}
+
void
-Freeze::TransactionalEvictorContextI::complete()
+Freeze::TransactionalEvictorContext::postCompletion(bool committed, bool deadlock)
{
try
{
- if(_rollbackOnly)
+ if(committed)
{
- _tx->rollback();
- }
- else
- {
- if(!_stack.empty())
- {
- Warning out(_dbEnv->getCommunicator()->getLogger());
- out << "Committing TransactionalEvictorContext on DbEnv '" <<
- _dbEnv->getEnvName() << "' with " << _stack.size() << " unsaved objects.";
- }
-
- _tx->commit();
-
//
- // Finally, remove updated & removed objects from cache
+ // remove updated & removed objects from cache
//
-
for_each(_invalidateList.begin(), _invalidateList.end(), ToInvalidate::invalidate);
_invalidateList.clear();
- }
- }
- catch(const DeadlockException&)
- {
- deadlockException();
- finalize();
- throw;
+ }
+ finalize(deadlock);
}
catch(...)
{
- finalize();
+ finalize(deadlock);
throw;
}
- finalize();
}
-Freeze::TransactionalEvictorContextI::ServantHolder*
-Freeze::TransactionalEvictorContextI::findServantHolder(const Identity& ident, ObjectStore<TransactionalEvictorElement>* store) const
+Freeze::TransactionalEvictorContext::ServantHolder*
+Freeze::TransactionalEvictorContext::findServantHolder(const Identity& ident, ObjectStore<TransactionalEvictorElement>* store) const
{
for(Stack::const_iterator p = _stack.begin(); p != _stack.end(); ++p)
{
@@ -102,20 +96,22 @@ Freeze::TransactionalEvictorContextI::findServantHolder(const Identity& ident, O
}
void
-Freeze::TransactionalEvictorContextI::finalize()
+Freeze::TransactionalEvictorContext::finalize(bool deadlock)
{
- if(_dbEnv != 0)
+ Lock sync(*this);
+ if(_tx != 0)
{
- _dbEnv->clearCurrent(this);
-
- Lock sync(*this);
- _dbEnv = 0;
+ if(deadlock)
+ {
+ _deadlockExceptionDetected = true;
+ }
+ _tx = 0;
notifyAll();
}
}
void
-Freeze::TransactionalEvictorContextI::checkDeadlockException()
+Freeze::TransactionalEvictorContext::checkDeadlockException()
{
if(_deadlockException.get() != 0)
{
@@ -124,7 +120,7 @@ Freeze::TransactionalEvictorContextI::checkDeadlockException()
}
bool
-Freeze::TransactionalEvictorContextI::response(bool)
+Freeze::TransactionalEvictorContext::response(bool)
{
if(_owner == IceUtil::ThreadControl())
{
@@ -133,7 +129,7 @@ Freeze::TransactionalEvictorContextI::response(bool)
else
{
Lock sync(*this);
- while(_deadlockExceptionDetected == false && _dbEnv != 0)
+ while(_deadlockExceptionDetected == false && _tx != 0)
{
wait();
}
@@ -142,7 +138,7 @@ Freeze::TransactionalEvictorContextI::response(bool)
}
bool
-Freeze::TransactionalEvictorContextI::exception(const std::exception& ex)
+Freeze::TransactionalEvictorContext::exception(const std::exception& ex)
{
const DeadlockException* dx = dynamic_cast<const DeadlockException*>(&ex);
@@ -155,16 +151,16 @@ Freeze::TransactionalEvictorContextI::exception(const std::exception& ex)
}
bool
-Freeze::TransactionalEvictorContextI::exception()
+Freeze::TransactionalEvictorContext::exception()
{
return true;
}
Ice::ObjectPtr
-Freeze::TransactionalEvictorContextI::servantRemoved(const Identity& ident,
+Freeze::TransactionalEvictorContext::servantRemoved(const Identity& ident,
ObjectStore<TransactionalEvictorElement>* store)
{
- if(!_rollbackOnly)
+ if(_tx != 0)
{
//
// Lookup servant holder on stack
@@ -186,13 +182,14 @@ Freeze::TransactionalEvictorContextI::servantRemoved(const Identity& ident,
}
void
-Freeze::TransactionalEvictorContextI::deadlockException()
+Freeze::TransactionalEvictorContext::deadlockException()
{
- _rollbackOnly = true;
-
- Lock sync(*this);
- _deadlockExceptionDetected = true;
- notifyAll();
+ {
+ Lock sync(*this);
+ _deadlockExceptionDetected = true;
+ notifyAll();
+ }
+ rollback();
}
@@ -200,7 +197,7 @@ Freeze::TransactionalEvictorContextI::deadlockException()
// ServantHolder
//
-Freeze::TransactionalEvictorContextI::ServantHolder::ServantHolder(const TransactionalEvictorContextIPtr& ctx,
+Freeze::TransactionalEvictorContext::ServantHolder::ServantHolder(const TransactionalEvictorContextPtr& ctx,
const Current& current,
ObjectStore<TransactionalEvictorElement>* store,
bool useNonmutating) :
@@ -240,11 +237,11 @@ Freeze::TransactionalEvictorContextI::ServantHolder::ServantHolder(const Transac
}
-Freeze::TransactionalEvictorContextI::ServantHolder::~ServantHolder()
+Freeze::TransactionalEvictorContext::ServantHolder::~ServantHolder()
{
if(_ownServant)
{
- if(!_ctx->isRollbackOnly())
+ if(_ctx->_tx != 0)
{
if(!_readOnly && !_removed)
{
@@ -262,7 +259,7 @@ Freeze::TransactionalEvictorContextI::ServantHolder::~ServantHolder()
}
void
-Freeze::TransactionalEvictorContextI::ServantHolder::removed()
+Freeze::TransactionalEvictorContext::ServantHolder::removed()
{
_removed = true;
}
@@ -275,8 +272,8 @@ Freeze::TransactionalEvictorContextI::ServantHolder::removed()
// When constructed in the servant holder destructor, it's protected by the dispatch()
// deactivate controller guard
//
-Freeze::TransactionalEvictorContextI::ToInvalidate::ToInvalidate(const Identity& ident,
- ObjectStore<TransactionalEvictorElement>* store) :
+Freeze::TransactionalEvictorContext::ToInvalidate::ToInvalidate(const Identity& ident,
+ ObjectStore<TransactionalEvictorElement>* store) :
_ident(ident),
_store(store),
_evictor(store->evictor()),
@@ -285,14 +282,14 @@ Freeze::TransactionalEvictorContextI::ToInvalidate::ToInvalidate(const Identity&
}
void
-Freeze::TransactionalEvictorContextI::ToInvalidate::invalidate(ToInvalidate* obj)
+Freeze::TransactionalEvictorContext::ToInvalidate::invalidate(ToInvalidate* obj)
{
dynamic_cast<TransactionalEvictorI*>(obj->_store->evictor())->evict(obj->_ident, obj->_store);
delete obj;
}
void
-Freeze::TransactionalEvictorContextI::ToInvalidate::destroy(ToInvalidate* obj)
+Freeze::TransactionalEvictorContext::ToInvalidate::destroy(ToInvalidate* obj)
{
delete obj;
}
diff --git a/cpp/src/Freeze/TransactionalEvictorContextI.h b/cpp/src/Freeze/TransactionalEvictorContext.h
index 3686c21ffac..96c29c58fc4 100644
--- a/cpp/src/Freeze/TransactionalEvictorContextI.h
+++ b/cpp/src/Freeze/TransactionalEvictorContext.h
@@ -7,8 +7,8 @@
//
// **********************************************************************
-#ifndef FREEZE_TRANSACTIONAL_EVICTOR_CONTEXT_I_H
-#define FREEZE_TRANSACTIONAL_EVICTOR_CONTEXT_I_H
+#ifndef FREEZE_TRANSACTIONAL_EVICTOR_CONTEXT_H
+#define FREEZE_TRANSACTIONAL_EVICTOR_CONTEXT_H
#include <Ice/Ice.h>
#include <Freeze/TransactionalEvictor.h>
@@ -23,8 +23,8 @@ template<class T> class ObjectStore;
class TransactionalEvictorElement;
-class TransactionalEvictorContextI : public TransactionalEvictorContext, public Ice::DispatchInterceptorAsyncCallback,
- public IceUtil::Monitor<IceUtil::Mutex>
+class TransactionalEvictorContext : public Ice::DispatchInterceptorAsyncCallback, public PostCompletionCallback,
+ public IceUtil::Monitor<IceUtil::Mutex>
{
public:
@@ -32,7 +32,7 @@ public:
{
public:
- ServantHolder(const TransactionalEvictorContextIPtr&, const Ice::Current&, ObjectStore<TransactionalEvictorElement>*, bool);
+ ServantHolder(const TransactionalEvictorContextPtr&, const Ice::Current&, ObjectStore<TransactionalEvictorElement>*, bool);
~ServantHolder();
void removed();
@@ -53,7 +53,7 @@ public:
bool _ownServant;
bool _removed;
- const TransactionalEvictorContextIPtr& _ctx;
+ const TransactionalEvictorContextPtr& _ctx;
const Ice::Current& _current;
ObjectStore<TransactionalEvictorElement>* _store;
ObjectRecord _rec;
@@ -78,12 +78,12 @@ public:
};
- TransactionalEvictorContextI(const SharedDbEnvPtr&);
- virtual ~TransactionalEvictorContextI();
-
- virtual void rollbackOnly();
- virtual bool isRollbackOnly() const;
- virtual void complete();
+ TransactionalEvictorContext(const SharedDbEnvPtr&);
+ TransactionalEvictorContext(const TransactionIPtr&);
+
+ virtual ~TransactionalEvictorContext();
+
+ virtual void postCompletion(bool, bool);
virtual bool response(bool);
virtual bool exception(const std::exception&);
@@ -95,6 +95,9 @@ public:
void checkDeadlockException();
+ void commit();
+ void rollback();
+
const TransactionIPtr& transaction() const
{
return _tx;
@@ -106,7 +109,7 @@ private:
ServantHolder* findServantHolder(const Ice::Identity&, ObjectStore<TransactionalEvictorElement>*) const;
- void finalize();
+ void finalize(bool);
//
// Stack of ServantHolder*
@@ -126,8 +129,6 @@ private:
std::auto_ptr<DeadlockException> _deadlockException;
- SharedDbEnvPtr _dbEnv;
-
//
// Protected by this
//
@@ -135,7 +136,7 @@ private:
};
-typedef IceUtil::Handle<TransactionalEvictorContextI> TransactionalEvictorContextIPtr;
+typedef IceUtil::Handle<TransactionalEvictorContext> TransactionalEvictorContextPtr;
}
diff --git a/cpp/src/Freeze/TransactionalEvictorI.cpp b/cpp/src/Freeze/TransactionalEvictorI.cpp
index a28ee8a718e..74b9214c291 100644
--- a/cpp/src/Freeze/TransactionalEvictorI.cpp
+++ b/cpp/src/Freeze/TransactionalEvictorI.cpp
@@ -10,7 +10,7 @@
#include <Freeze/TransactionalEvictorI.h>
#include <Freeze/Initialize.h>
#include <Freeze/Util.h>
-#include <Freeze/TransactionalEvictorContextI.h>
+#include <Freeze/TransactionalEvictorContext.h>
#include <IceUtil/IceUtil.h>
@@ -91,25 +91,18 @@ Freeze::TransactionalEvictorI::TransactionalEvictorI(const ObjectAdapterPtr& ada
}
-TransactionalEvictorContextPtr
-Freeze::TransactionalEvictorI::getCurrentContext()
+TransactionPtr
+Freeze::TransactionalEvictorI::getCurrentTransaction() const
{
DeactivateController::Guard deactivateGuard(_deactivateController);
- return _dbEnv->getCurrent();
+ return _dbEnv->getCurrent()->transaction();
}
-TransactionalEvictorContextPtr
-Freeze::TransactionalEvictorI::createCurrentContext()
+void
+Freeze::TransactionalEvictorI::setCurrentTransaction(const TransactionPtr& tx)
{
DeactivateController::Guard deactivateGuard(_deactivateController);
-
- bool created = false;
- TransactionalEvictorContextPtr ctx = _dbEnv->getOrCreateCurrent(created);
- if(!created)
- {
- throw DatabaseException(__FILE__, __LINE__, "createCurrentContext: there is already a current context");
- }
- return ctx;
+ _dbEnv->setCurrentTransaction(tx);
}
@@ -134,7 +127,7 @@ Freeze::TransactionalEvictorI::addFacet(const ObjectPtr& servant, const Identity
+ facet + "'");
}
- DbTxn* tx = beforeQuery();
+ TransactionIPtr tx = beforeQuery();
updateStats(rec.stats, currentTime);
@@ -170,14 +163,14 @@ Freeze::TransactionalEvictorI::removeFacet(const Identity& ident, const string&
if(store != 0)
{
- TransactionalEvictorContextIPtr ctx = _dbEnv->getCurrent();
- DbTxn* tx = 0;
+ TransactionalEvictorContextPtr ctx = _dbEnv->getCurrent();
+ TransactionIPtr tx = 0;
if(ctx != 0)
{
- tx = ctx->transaction()->dbTxn();
+ tx = ctx->transaction();
if(tx == 0)
{
- throw DatabaseException(__FILE__, __LINE__, "invalid TransactionalEvictorContext");
+ throw DatabaseException(__FILE__, __LINE__, "inactive transaction");
}
}
@@ -239,7 +232,7 @@ Freeze::TransactionalEvictorI::hasFacet(const Identity& ident, const string& fac
return false;
}
- DbTxn* tx = beforeQuery();
+ TransactionIPtr tx = beforeQuery();
if(tx == 0)
{
@@ -271,7 +264,7 @@ Freeze::TransactionalEvictorI::hasAnotherFacet(const Identity& ident, const stri
storeMapCopy = _storeMap;
}
- DbTxn* tx = beforeQuery();
+ TransactionIPtr tx = beforeQuery();
for(StoreMap::iterator p = storeMapCopy.begin(); p != storeMapCopy.end(); ++p)
{
@@ -319,34 +312,29 @@ Freeze::TransactionalEvictorI::dispatch(Ice::Request& request)
{
public:
- CtxHolder(const TransactionalEvictorContextIPtr& ctx) :
- _ctx(ctx)
+ CtxHolder(const TransactionalEvictorContextPtr& ctx, const SharedDbEnvPtr& dbEnv) :
+ _ctx(ctx),
+ _dbEnv(dbEnv)
{
}
~CtxHolder()
{
- bool isRollbackOnly = _ctx->isRollbackOnly();
-
try
{
- _ctx->complete();
+ _ctx->commit();
}
catch(...)
{
- if(!isRollbackOnly)
- {
- throw;
- }
- //
- // Otherwise ignored, we could be unwinding the stack
- //
+ _dbEnv->setCurrentTransaction(0);
+ throw;
}
+ _dbEnv->setCurrentTransaction(0);
}
private:
- TransactionalEvictorContextIPtr _ctx;
-
+ TransactionalEvictorContextPtr _ctx;
+ const SharedDbEnvPtr& _dbEnv;
};
@@ -363,7 +351,7 @@ Freeze::TransactionalEvictorI::dispatch(Ice::Request& request)
//
// Is there an existing context?
//
- TransactionalEvictorContextIPtr ctx = _dbEnv->getCurrent();
+ TransactionalEvictorContextPtr ctx = _dbEnv->getCurrent();
if(ctx != 0)
{
@@ -372,7 +360,7 @@ Freeze::TransactionalEvictorI::dispatch(Ice::Request& request)
//
// If yes, use this context; there is no retrying
//
- TransactionalEvictorContextI::ServantHolder servantHolder(ctx, current, store, _useNonmutating);
+ TransactionalEvictorContext::ServantHolder servantHolder(ctx, current, store, _useNonmutating);
if(servantHolder.servant() == 0)
{
@@ -385,7 +373,7 @@ Freeze::TransactionalEvictorI::dispatch(Ice::Request& request)
if(dispatchStatus == DispatchUserException && _rollbackOnUserException)
{
- ctx->rollbackOnly();
+ ctx->rollback();
}
if(dispatchStatus == DispatchAsync)
@@ -400,14 +388,14 @@ Freeze::TransactionalEvictorI::dispatch(Ice::Request& request)
catch(...)
{
//
- // Important: this rollbackOnly() ensures that servant holder destructor won't perform
+ // Important: this rollback() ensures that servant holder destructor won't perform
// any database operation, and hence will not throw.
//
- ctx->rollbackOnly();
+ ctx->rollback();
throw;
}
//
- // servantHolder destructor runs here and may throw (if !rollback only)
+ // servantHolder destructor runs here and may throw (if tx was not rolled back)
//
}
catch(const DeadlockException&)
@@ -417,7 +405,7 @@ Freeze::TransactionalEvictorI::dispatch(Ice::Request& request)
}
catch(...)
{
- ctx->rollbackOnly();
+ ctx->rollback();
throw;
}
}
@@ -494,14 +482,12 @@ Freeze::TransactionalEvictorI::dispatch(Ice::Request& request)
{
try
{
- bool created = false;
- ctx = _dbEnv->getOrCreateCurrent(created);
- CtxHolder ctxHolder(ctx);
- assert(created);
+ ctx = _dbEnv->createCurrent();
+ CtxHolder ctxHolder(ctx, _dbEnv);
try
{
- TransactionalEvictorContextI::ServantHolder servantHolder(ctx, current, store, _useNonmutating);
+ TransactionalEvictorContext::ServantHolder servantHolder(ctx, current, store, _useNonmutating);
if(servantHolder.servant() == 0)
{
@@ -513,7 +499,7 @@ Freeze::TransactionalEvictorI::dispatch(Ice::Request& request)
DispatchStatus dispatchStatus = servantHolder.servant()->ice_dispatch(request, ctx);
if(dispatchStatus == DispatchUserException && _rollbackOnUserException)
{
- ctx->rollbackOnly();
+ ctx->rollback();
}
if(dispatchStatus == DispatchAsync)
{
@@ -528,14 +514,14 @@ Freeze::TransactionalEvictorI::dispatch(Ice::Request& request)
catch(...)
{
//
- // Important: this rollbackOnly() ensures that servant holder destructor won't perform
+ // Important: this rollback() ensures that servant holder destructor won't perform
// any database operation, and hence will not throw.
//
- ctx->rollbackOnly();
+ ctx->rollback();
throw;
}
//
- // servant holder destructor runs here and may throw (if !rollback only)
+ // servant holder destructor runs here and may throw (if !rolled back)
//
}
catch(const DeadlockException&)
@@ -545,12 +531,12 @@ Freeze::TransactionalEvictorI::dispatch(Ice::Request& request)
}
catch(...)
{
- ctx->rollbackOnly();
+ ctx->rollback();
throw;
}
//
- // complete occurs here!
+ // commit occurs here!
//
}
catch(const DeadlockException&)
@@ -600,17 +586,17 @@ Freeze::TransactionalEvictorI::~TransactionalEvictorI()
//
}
-DbTxn*
+Freeze::TransactionIPtr
Freeze::TransactionalEvictorI::beforeQuery()
{
- TransactionalEvictorContextIPtr ctx = _dbEnv->getCurrent();
- DbTxn* tx = 0;
+ TransactionalEvictorContextPtr ctx = _dbEnv->getCurrent();
+ TransactionIPtr tx = 0;
if(ctx != 0)
{
- tx = ctx->transaction()->dbTxn();
+ tx = ctx->transaction();
if(tx == 0)
{
- throw DatabaseException(__FILE__, __LINE__,"invalid TransactionalEvictorContext");
+ throw DatabaseException(__FILE__, __LINE__,"inactive transaction");
}
}
diff --git a/cpp/src/Freeze/TransactionalEvictorI.h b/cpp/src/Freeze/TransactionalEvictorI.h
index 73c2530d637..a55700a98bf 100644
--- a/cpp/src/Freeze/TransactionalEvictorI.h
+++ b/cpp/src/Freeze/TransactionalEvictorI.h
@@ -75,8 +75,8 @@ public:
virtual ~TransactionalEvictorI();
- virtual TransactionalEvictorContextPtr getCurrentContext();
- virtual TransactionalEvictorContextPtr createCurrentContext();
+ virtual TransactionPtr getCurrentTransaction() const;
+ virtual void setCurrentTransaction(const TransactionPtr&);
virtual Ice::ObjectPrx addFacet(const Ice::ObjectPtr&, const Ice::Identity&, const std::string&);
virtual Ice::ObjectPtr removeFacet(const Ice::Identity&, const std::string&);
@@ -86,7 +86,7 @@ public:
virtual void finished(const Ice::Current&, const Ice::ObjectPtr&, const Ice::LocalObjectPtr&);
virtual void deactivate(const std::string&);
- virtual DbTxn* beforeQuery();
+ virtual TransactionIPtr beforeQuery();
Ice::DispatchStatus dispatch(Ice::Request&);
diff --git a/java/CHANGES b/java/CHANGES
index 1d30c87ef58..030c332e546 100644
--- a/java/CHANGES
+++ b/java/CHANGES
@@ -1,6 +1,10 @@
Changes since version 3.2.X (binary incompabible)
-------------------------------------------------
+- Freeze evictor update:
+ - the existing evictor was renamed BackgroundSaveEvictor
+ - added new TransactionalEvictor
+
- Added support for udp multicast. See manual for more information.
- If a proxy contains a host which is multihomed, the client will now
diff --git a/java/src/Freeze/BackgroundSaveEvictorI.java b/java/src/Freeze/BackgroundSaveEvictorI.java
index 488adabadca..ca740cfa1b7 100644
--- a/java/src/Freeze/BackgroundSaveEvictorI.java
+++ b/java/src/Freeze/BackgroundSaveEvictorI.java
@@ -1366,7 +1366,7 @@ class BackgroundSaveEvictorI extends EvictorI implements BackgroundSaveEvictor,
}
}
- protected com.sleepycat.db.Transaction
+ protected TransactionI
beforeQuery()
{
saveNow();
diff --git a/java/src/Freeze/ConnectionI.java b/java/src/Freeze/ConnectionI.java
index 053d32fd353..517cc831da8 100755
--- a/java/src/Freeze/ConnectionI.java
+++ b/java/src/Freeze/ConnectionI.java
@@ -88,7 +88,7 @@ class ConnectionI extends Ice.LocalObjectImpl implements Connection
}
- if(_dbEnv != null && _ownDbEnv)
+ if(_dbEnv != null)
{
try
{
@@ -117,7 +117,6 @@ class ConnectionI extends Ice.LocalObjectImpl implements Connection
ConnectionI(Ice.Communicator communicator, String envName, com.sleepycat.db.Environment dbEnv)
{
this(SharedDbEnv.get(communicator, envName, dbEnv));
- _ownDbEnv = true;
}
@@ -213,7 +212,6 @@ class ConnectionI extends Ice.LocalObjectImpl implements Connection
private Ice.Communicator _communicator;
private SharedDbEnv _dbEnv;
- private boolean _ownDbEnv = false;
private String _envName;
private TransactionI _transaction;
private LinkedList _mapList = new Freeze.LinkedList();
diff --git a/java/src/Freeze/EvictorI.java b/java/src/Freeze/EvictorI.java
index 21d6d633036..0d029e81477 100644
--- a/java/src/Freeze/EvictorI.java
+++ b/java/src/Freeze/EvictorI.java
@@ -256,7 +256,7 @@ abstract class EvictorI extends Ice.LocalObjectImpl implements Evictor
{
facet = "";
}
- com.sleepycat.db.Transaction tx = beforeQuery();
+ TransactionI tx = beforeQuery();
return new EvictorIteratorI(findStore(facet, false), tx, batchSize);
}
finally
@@ -414,7 +414,7 @@ abstract class EvictorI extends Ice.LocalObjectImpl implements Evictor
this(adapter, envName, null, filename, facetTypes, initializer, indices, createDb);
}
- abstract com.sleepycat.db.Transaction beforeQuery();
+ abstract TransactionI beforeQuery();
static void
updateStats(Statistics stats, long time)
diff --git a/java/src/Freeze/EvictorIteratorI.java b/java/src/Freeze/EvictorIteratorI.java
index 437f527f0f7..c96a1fdd7ce 100644
--- a/java/src/Freeze/EvictorIteratorI.java
+++ b/java/src/Freeze/EvictorIteratorI.java
@@ -38,12 +38,12 @@ class EvictorIteratorI extends Ice.LocalObjectImpl implements EvictorIterator
}
}
- EvictorIteratorI(ObjectStore store, com.sleepycat.db.Transaction tx, int batchSize)
+ EvictorIteratorI(ObjectStore store, TransactionI tx, int batchSize)
{
_store = store;
_more = (store != null);
_batchSize = batchSize;
- _tx = tx;
+ _tx = tx == null ? null : tx.dbTxn();
assert batchSize > 0;
diff --git a/java/src/Freeze/Index.java b/java/src/Freeze/Index.java
index 42e72107baf..153640b4133 100644
--- a/java/src/Freeze/Index.java
+++ b/java/src/Freeze/Index.java
@@ -86,8 +86,9 @@ public abstract class Index implements com.sleepycat.db.SecondaryKeyCreator
Ice.Communicator communicator = _store.communicator();
- com.sleepycat.db.Transaction tx = _store.evictor().beforeQuery();
-
+ TransactionI transaction = _store.evictor().beforeQuery();
+ com.sleepycat.db.Transaction tx = transaction == null ? null : transaction.dbTxn();
+
java.util.List identities;
for(;;)
@@ -229,7 +230,8 @@ public abstract class Index implements com.sleepycat.db.SecondaryKeyCreator
// dlen is 0, so we should not retrieve any value
//
value.setPartial(true);
- com.sleepycat.db.Transaction tx = _store.evictor().beforeQuery();
+ TransactionI transaction = _store.evictor().beforeQuery();
+ com.sleepycat.db.Transaction tx = transaction == null ? null : transaction.dbTxn();
for(;;)
{
diff --git a/java/src/Freeze/ObjectStore.java b/java/src/Freeze/ObjectStore.java
index c2425c5bba5..41421446a19 100644
--- a/java/src/Freeze/ObjectStore.java
+++ b/java/src/Freeze/ObjectStore.java
@@ -153,8 +153,20 @@ class ObjectStore implements IceUtil.Store
}
boolean
- dbHasObject(Ice.Identity ident, com.sleepycat.db.Transaction tx)
+ dbHasObject(Ice.Identity ident, TransactionI transaction)
{
+ com.sleepycat.db.Transaction tx = null;
+
+ if(transaction != null)
+ {
+ tx = transaction.dbTxn();
+ if(tx == null)
+ {
+ throw new DatabaseException(_evictor.errorPrefix() + "inactive transaction");
+ }
+ }
+
+
byte[] key = marshalKey(ident, _communicator);
com.sleepycat.db.DatabaseEntry dbKey = new com.sleepycat.db.DatabaseEntry(key);
@@ -421,10 +433,14 @@ class ObjectStore implements IceUtil.Store
ObjectRecord
load(Ice.Identity ident, TransactionI transaction)
{
+ if(transaction == null)
+ {
+ throw new DatabaseException(_evictor.errorPrefix() + "no active transaction");
+ }
com.sleepycat.db.Transaction tx = transaction.dbTxn();
if(tx == null)
{
- throw new DatabaseException(_evictor.errorPrefix() + "invalid TransactionalEvictorContext");
+ throw new DatabaseException(_evictor.errorPrefix() + "inactive transaction");
}
byte[] key = marshalKey(ident, _communicator);
@@ -476,10 +492,14 @@ class ObjectStore implements IceUtil.Store
void
update(Ice.Identity ident, ObjectRecord objectRecord, TransactionI transaction)
{
+ if(transaction == null)
+ {
+ throw new DatabaseException(_evictor.errorPrefix() + "no active transaction");
+ }
com.sleepycat.db.Transaction tx = transaction.dbTxn();
if(tx == null)
{
- throw new DatabaseException(_evictor.errorPrefix() + "invalid TransactionalEvictorContext");
+ throw new DatabaseException(_evictor.errorPrefix() + "inactive transaction");
}
if(_sampleServant != null && !objectRecord.servant.ice_id().equals(_sampleServant.ice_id()))
@@ -524,8 +544,19 @@ class ObjectStore implements IceUtil.Store
}
boolean
- insert(Ice.Identity ident, ObjectRecord objectRecord, com.sleepycat.db.Transaction tx)
+ insert(Ice.Identity ident, ObjectRecord objectRecord, TransactionI transaction)
{
+ com.sleepycat.db.Transaction tx = null;
+
+ if(transaction != null)
+ {
+ tx = transaction.dbTxn();
+ if(tx == null)
+ {
+ throw new DatabaseException(_evictor.errorPrefix() + "invalid transaction");
+ }
+ }
+
com.sleepycat.db.DatabaseEntry dbKey = new com.sleepycat.db.DatabaseEntry(marshalKey(ident, _communicator));
com.sleepycat.db.DatabaseEntry dbValue = new com.sleepycat.db.DatabaseEntry(marshalValue(objectRecord, _communicator));
@@ -573,8 +604,19 @@ class ObjectStore implements IceUtil.Store
}
boolean
- remove(Ice.Identity ident, com.sleepycat.db.Transaction tx)
+ remove(Ice.Identity ident, TransactionI transaction)
{
+ com.sleepycat.db.Transaction tx = null;
+
+ if(transaction != null)
+ {
+ tx = transaction.dbTxn();
+ if(tx == null)
+ {
+ throw new DatabaseException(_evictor.errorPrefix() + "invalid transaction");
+ }
+ }
+
com.sleepycat.db.DatabaseEntry dbKey = new com.sleepycat.db.DatabaseEntry(marshalKey(ident, _communicator));
for(;;)
diff --git a/java/src/Freeze/PostCompletionCallback.java b/java/src/Freeze/PostCompletionCallback.java
new file mode 100644
index 00000000000..a8f52d28d1b
--- /dev/null
+++ b/java/src/Freeze/PostCompletionCallback.java
@@ -0,0 +1,15 @@
+// **********************************************************************
+//
+// Copyright (c) 2003-2007 ZeroC, Inc. All rights reserved.
+//
+// This copy of Ice is licensed to you under the terms described in the
+// ICE_LICENSE file included in this distribution.
+//
+// **********************************************************************
+
+package Freeze;
+
+interface PostCompletionCallback
+{
+ void postCompletion(boolean committed, boolean deadlock);
+}
diff --git a/java/src/Freeze/SharedDbEnv.java b/java/src/Freeze/SharedDbEnv.java
index 11233f95536..35940fc9425 100644
--- a/java/src/Freeze/SharedDbEnv.java
+++ b/java/src/Freeze/SharedDbEnv.java
@@ -205,49 +205,49 @@ class SharedDbEnv implements com.sleepycat.db.ErrorHandler, Runnable
//
- // Get/create an evictor context associated with the calling thread
+ // Create an evictor context associated with the calling thread
//
- synchronized TransactionalEvictorContextI
- getOrCreateCurrent(Ice.BooleanHolder created)
+ synchronized TransactionalEvictorContext
+ createCurrent()
{
- 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);
- }
+ TransactionalEvictorContext ctx = (TransactionalEvictorContext)_ctxMap.get(k);
+ assert ctx == null;
+
+ ctx = new TransactionalEvictorContext(this);
+ _refCount++; // owned by the underlying ConnectionI
+ _ctxMap.put(k, ctx);
+
return ctx;
}
- synchronized TransactionalEvictorContextI
+ synchronized TransactionalEvictorContext
getCurrent()
{
Object k = Thread.currentThread();
- return (TransactionalEvictorContextI)_ctxMap.get(k);
+ return (TransactionalEvictorContext)_ctxMap.get(k);
}
- //
- // Clear evictor context associated with the calling thread
- //
synchronized void
- clearCurrent(TransactionalEvictorContextI oldCtx)
+ setCurrentTransaction(Transaction tx)
{
- Object removedCtx = _ctxMap.remove(Thread.currentThread());
- assert removedCtx == oldCtx;
- }
+ Object k = Thread.currentThread();
+ if(tx != null)
+ {
+ TransactionalEvictorContext ctx = (TransactionalEvictorContext)_ctxMap.get(k);
+ if(ctx == null || !tx.equals(ctx.transaction()))
+ {
+ ctx = new TransactionalEvictorContext((TransactionI)tx);
+ _ctxMap.put(k, ctx);
+ }
+ }
+ else
+ {
+ _ctxMap.put(k, null);
+ }
+ }
private
SharedDbEnv(MapKey key, com.sleepycat.db.Environment dbEnv)
diff --git a/java/src/Freeze/TransactionI.java b/java/src/Freeze/TransactionI.java
index 7d4f7715661..3c97a843426 100755
--- a/java/src/Freeze/TransactionI.java
+++ b/java/src/Freeze/TransactionI.java
@@ -14,7 +14,14 @@ class TransactionI extends Ice.LocalObjectImpl implements Transaction
public void
commit()
{
+ if(_txn == null)
+ {
+ throw new DatabaseException(_errorPrefix + "inactive transaction");
+ }
+
String txnId = null;
+ boolean committed = false;
+ boolean deadlock = false;
try
{
@@ -26,18 +33,21 @@ class TransactionI extends Ice.LocalObjectImpl implements Transaction
}
_txn.commit();
+ committed = true;
if(_txTrace >= 1)
{
- _connection.communicator().getLogger().trace("Freeze.Map", _errorPrefix + "committed transaction " +
+ _connection.communicator().getLogger().trace("Freeze.Transaction", _errorPrefix + "committed transaction " +
txnId);
}
}
catch(com.sleepycat.db.DeadlockException e)
{
+ deadlock = true;
+
if(_txTrace >= 1)
{
- _connection.communicator().getLogger().trace("Freeze.Map", _errorPrefix +
+ _connection.communicator().getLogger().trace("Freeze.Transaction", _errorPrefix +
"failed to commit transaction " + txnId + ": " +
e.getMessage());
}
@@ -51,7 +61,7 @@ class TransactionI extends Ice.LocalObjectImpl implements Transaction
{
if(_txTrace >= 1)
{
- _connection.communicator().getLogger().trace("Freeze.Map", _errorPrefix +
+ _connection.communicator().getLogger().trace("Freeze.Transaction", _errorPrefix +
"failed to commit transaction " + txnId + ": " +
e.getMessage());
}
@@ -64,15 +74,26 @@ class TransactionI extends Ice.LocalObjectImpl implements Transaction
finally
{
_connection.clearTransaction();
+ if(_ownConnection)
+ {
+ _connection.close();
+ }
_connection = null;
_txn = null;
+ postCompletion(committed, deadlock);
}
}
public void
rollback()
{
+ if(_txn == null)
+ {
+ throw new DatabaseException(_errorPrefix + "inactive transaction");
+ }
+
String txnId = null;
+ boolean deadlock = false;
try
{
@@ -87,7 +108,7 @@ class TransactionI extends Ice.LocalObjectImpl implements Transaction
if(_txTrace >= 1)
{
- _connection.communicator().getLogger().trace("Freeze.Map", _errorPrefix + "rolled back transaction " +
+ _connection.communicator().getLogger().trace("Freeze.Transaction", _errorPrefix + "rolled back transaction " +
txnId);
}
}
@@ -95,11 +116,13 @@ class TransactionI extends Ice.LocalObjectImpl implements Transaction
{
if(_txTrace >= 1)
{
- _connection.communicator().getLogger().trace("Freeze.Map", _errorPrefix +
+ _connection.communicator().getLogger().trace("Freeze.Transaction", _errorPrefix +
"failed to rollback transaction " + txnId + ": " +
e.getMessage());
}
+ deadlock = true;
+
DeadlockException ex = new DeadlockException();
ex.initCause(e);
ex.message = _errorPrefix + "DbTxn.abort: " + e.getMessage();
@@ -109,7 +132,7 @@ class TransactionI extends Ice.LocalObjectImpl implements Transaction
{
if(_txTrace >= 1)
{
- _connection.communicator().getLogger().trace("Freeze.Map", _errorPrefix +
+ _connection.communicator().getLogger().trace("Freeze.Transaction", _errorPrefix +
"failed to rollback transaction " + txnId + ": " +
e.getMessage());
}
@@ -122,11 +145,22 @@ class TransactionI extends Ice.LocalObjectImpl implements Transaction
finally
{
_connection.clearTransaction();
+ if(_ownConnection)
+ {
+ _connection.close();
+ }
_connection = null;
_txn = null;
+ postCompletion(false, deadlock);
}
}
+ public Connection
+ getConnection()
+ {
+ return _connection;
+ }
+
TransactionI(ConnectionI connection)
{
_connection = connection;
@@ -141,7 +175,7 @@ class TransactionI extends Ice.LocalObjectImpl implements Transaction
{
String txnId = Long.toHexString((_txn.getId() & 0x7FFFFFFF) + 0x80000000L);
- _connection.communicator().getLogger().trace("Freeze.Map", _errorPrefix + "started transaction " +
+ _connection.communicator().getLogger().trace("Freeze.Transaction", _errorPrefix + "started transaction " +
txnId);
}
}
@@ -149,7 +183,7 @@ class TransactionI extends Ice.LocalObjectImpl implements Transaction
{
if(_txTrace >= 1)
{
- _connection.communicator().getLogger().trace("Freeze.Map", _errorPrefix +
+ _connection.communicator().getLogger().trace("Freeze.Transaction", _errorPrefix +
"failed to start transaction: " + e.getMessage());
}
@@ -160,15 +194,46 @@ class TransactionI extends Ice.LocalObjectImpl implements Transaction
}
}
+ void
+ setPostCompletionCallback(PostCompletionCallback cb)
+ {
+ _postCompletionCallback = cb;
+ }
+
+ void
+ adoptConnection()
+ {
+ _ownConnection = true;
+ }
+
+ ConnectionI
+ getConnectionI()
+ {
+ return _connection;
+ }
+
com.sleepycat.db.Transaction
dbTxn()
{
return _txn;
}
+
+ private void
+ postCompletion(boolean committed, boolean deadlock)
+ {
+ if(_postCompletionCallback != null)
+ {
+ _postCompletionCallback.postCompletion(committed, deadlock);
+ }
+ }
+
private ConnectionI _connection;
private int _txTrace;
private com.sleepycat.db.Transaction _txn;
+ private PostCompletionCallback _postCompletionCallback;
+
private String _errorPrefix;
+ private boolean _ownConnection = false;
}
diff --git a/java/src/Freeze/TransactionalEvictorContextI.java b/java/src/Freeze/TransactionalEvictorContext.java
index 91e96fcdf3b..4d5578a2f1e 100644
--- a/java/src/Freeze/TransactionalEvictorContextI.java
+++ b/java/src/Freeze/TransactionalEvictorContext.java
@@ -14,43 +14,17 @@ package Freeze;
// and a number of servants loaded using this transaction.
//
-class TransactionalEvictorContextI extends Ice.LocalObjectImpl
- implements TransactionalEvictorContext, Ice.DispatchInterceptorAsyncCallback
+class TransactionalEvictorContext implements Ice.DispatchInterceptorAsyncCallback, PostCompletionCallback
{
public void
- rollbackOnly()
- {
- _rollbackOnly = true;
- }
-
- public boolean
- isRollbackOnly()
- {
- return _rollbackOnly;
- }
-
- public void
- complete()
- {
+ postCompletion(boolean committed, boolean deadlock)
+ {
try
{
- if(_rollbackOnly)
- {
- _tx.rollback();
- }
- else
+ if(committed)
{
- if(!_stack.empty())
- {
- _dbEnv.getCommunicator().getLogger().warning
- ("Committing TransactionalEvictorContext on DbEnv '" + _dbEnv.getEnvName() + "' with "
- + _stack.size() + " unsaved objects.");
- }
-
- _tx.commit();
-
//
- // Finally, remove updated & removed objects from cache
+ // Remove updated & removed objects from cache
//
java.util.Iterator p = _invalidateList.iterator();
while(p.hasNext())
@@ -58,22 +32,20 @@ class TransactionalEvictorContextI extends Ice.LocalObjectImpl
ToInvalidate ti = (ToInvalidate)p.next();
ti.invalidate();
}
+ _invalidateList.clear();
}
}
- catch(DeadlockException ex)
- {
- deadlockException();
- throw ex;
- }
finally
{
synchronized(this)
{
- if(_dbEnv != null)
+ if(_tx != null)
{
- _dbEnv.clearCurrent(this);
- _dbEnv = null;
-
+ if(deadlock)
+ {
+ _deadlockExceptionDetected = true;
+ }
+ _tx = null;
notifyAll();
}
}
@@ -95,7 +67,7 @@ class TransactionalEvictorContextI extends Ice.LocalObjectImpl
{
return false;
}
- if(_dbEnv == null)
+ if(_tx == null)
{
return true;
}
@@ -163,7 +135,7 @@ class TransactionalEvictorContextI extends Ice.LocalObjectImpl
{
if(_ownServant)
{
- if(!_rollbackOnly)
+ if(_tx != null)
{
if(!_readOnly && !_removed)
{
@@ -215,14 +187,43 @@ class TransactionalEvictorContextI extends Ice.LocalObjectImpl
};
- TransactionalEvictorContextI(SharedDbEnv dbEnv)
+ TransactionalEvictorContext(SharedDbEnv dbEnv)
+ {
+ _tx = (TransactionI)(new ConnectionI(dbEnv).beginTransaction());
+ _owner = Thread.currentThread();
+ _tx.adoptConnection();
+
+ _tx.setPostCompletionCallback(this);
+ }
+
+ TransactionalEvictorContext(TransactionI tx)
{
- _dbEnv = dbEnv;
- _tx = (TransactionI)(new ConnectionI(_dbEnv).beginTransaction());
+ _tx = tx;
_owner = Thread.currentThread();
+
+ _tx.setPostCompletionCallback(this);
+ }
+
+ void
+ rollback()
+ {
+ if(_tx != null)
+ {
+ _tx.rollback();
+ }
}
void
+ commit()
+ {
+ if(_tx != null)
+ {
+ _tx.commit();
+ }
+ }
+
+
+ void
checkDeadlockException()
{
if(_deadlockException != null)
@@ -247,18 +248,19 @@ class TransactionalEvictorContextI extends Ice.LocalObjectImpl
void
deadlockException()
{
- _rollbackOnly = true;
synchronized(this)
{
_deadlockExceptionDetected = true;
notifyAll();
}
+
+ rollback();
}
Ice.Object
servantRemoved(Ice.Identity ident, ObjectStore store)
{
- if(!_rollbackOnly)
+ if(_tx != null)
{
//
// Lookup servant holder on stack
@@ -282,10 +284,10 @@ class TransactionalEvictorContextI extends Ice.LocalObjectImpl
protected void
finalize()
{
- if(_dbEnv != null)
+ if(_tx != null)
{
- _dbEnv.getCommunicator().getLogger().warning
- ("Finalizing incomplete TransactionalEvictorContext on DbEnv '" + _dbEnv.getEnvName() + "'");
+ _tx.getConnectionI().communicator().getLogger().warning
+ ("Finalizing incomplete TransactionalEvictorContext on DbEnv '" + _tx.getConnectionI().dbEnv().getEnvName() + "'");
}
}
@@ -333,15 +335,11 @@ class TransactionalEvictorContextI extends Ice.LocalObjectImpl
//
private final java.util.List _invalidateList = new java.util.LinkedList();
- private final TransactionI _tx;
+ private TransactionI _tx;
private final Thread _owner;
- private boolean _rollbackOnly = false;
-
private DeadlockException _deadlockException;
- private SharedDbEnv _dbEnv;
-
//
// Protected by this
//
diff --git a/java/src/Freeze/TransactionalEvictorI.java b/java/src/Freeze/TransactionalEvictorI.java
index 62696eb061c..143071eac1f 100644
--- a/java/src/Freeze/TransactionalEvictorI.java
+++ b/java/src/Freeze/TransactionalEvictorI.java
@@ -11,13 +11,13 @@ package Freeze;
class TransactionalEvictorI extends EvictorI implements TransactionalEvictor
{
- public TransactionalEvictorContext
- getCurrentContext()
+ public Transaction
+ getCurrentTransaction()
{
_deactivateController.lock();
try
{
- return _dbEnv.getCurrent();
+ return _dbEnv.getCurrent().transaction();
}
finally
{
@@ -25,21 +25,13 @@ class TransactionalEvictorI extends EvictorI implements TransactionalEvictor
}
}
- public TransactionalEvictorContext
- createCurrentContext()
+ public void
+ setCurrentTransaction(Transaction tx)
{
_deactivateController.lock();
try
{
- Ice.BooleanHolder created = new Ice.BooleanHolder();
- TransactionalEvictorContext ctx = _dbEnv.getOrCreateCurrent(created);
-
- if(created.value == false)
- {
- throw new DatabaseException(_errorPrefix +
- "createCurrentContext: there is already a current context");
- }
- return ctx;
+ _dbEnv.setCurrentTransaction(tx);
}
finally
{
@@ -73,7 +65,7 @@ class TransactionalEvictorI extends EvictorI implements TransactionalEvictor
throw ex;
}
- com.sleepycat.db.Transaction tx = beforeQuery();
+ TransactionI tx = beforeQuery();
updateStats(rec.stats, currentTime);
@@ -120,14 +112,14 @@ class TransactionalEvictorI extends EvictorI implements TransactionalEvictor
ObjectStore store = findStore(facet, false);
if(store != null)
{
- TransactionalEvictorContextI ctx = _dbEnv.getCurrent();
- com.sleepycat.db.Transaction tx = null;
+ TransactionalEvictorContext ctx = _dbEnv.getCurrent();
+ TransactionI tx = null;
if(ctx != null)
{
- tx = ctx.transaction().dbTxn();
+ tx = ctx.transaction();
if(tx == null)
{
- throw new DatabaseException(_errorPrefix + "invalid TransactionalEvictorContext");
+ throw new DatabaseException(_errorPrefix + "inactive transaction");
}
}
@@ -202,7 +194,7 @@ class TransactionalEvictorI extends EvictorI implements TransactionalEvictor
return false;
}
- com.sleepycat.db.Transaction tx = beforeQuery();
+ TransactionI tx = beforeQuery();
if(tx == null)
{
@@ -282,7 +274,7 @@ class TransactionalEvictorI extends EvictorI implements TransactionalEvictor
//
// Is there an existing context?
//
- TransactionalEvictorContextI ctx = _dbEnv.getCurrent();
+ TransactionalEvictorContext ctx = _dbEnv.getCurrent();
if(ctx != null)
{
@@ -291,7 +283,7 @@ class TransactionalEvictorI extends EvictorI implements TransactionalEvictor
//
// If yes, use this context; there is no retrying
//
- TransactionalEvictorContextI.ServantHolder sh = ctx.createServantHolder(current, store, _useNonmutating);
+ TransactionalEvictorContext.ServantHolder sh = ctx.createServantHolder(current, store, _useNonmutating);
if(sh.servant() == null)
{
@@ -304,7 +296,7 @@ class TransactionalEvictorI extends EvictorI implements TransactionalEvictor
if(dispatchStatus == Ice.DispatchStatus.DispatchUserException && _rollbackOnUserException)
{
- ctx.rollbackOnly();
+ ctx.rollback();
}
if(dispatchStatus == Ice.DispatchStatus.DispatchAsync)
{
@@ -314,7 +306,7 @@ class TransactionalEvictorI extends EvictorI implements TransactionalEvictor
}
catch(RuntimeException ex)
{
- ctx.rollbackOnly();
+ ctx.rollback();
throw ex;
}
finally
@@ -329,7 +321,7 @@ class TransactionalEvictorI extends EvictorI implements TransactionalEvictor
}
catch(RuntimeException ex)
{
- ctx.rollbackOnly();
+ ctx.rollback();
throw ex;
}
}
@@ -404,13 +396,13 @@ class TransactionalEvictorI extends EvictorI implements TransactionalEvictor
do
{
- ctx = _dbEnv.getOrCreateCurrent(null);
+ ctx = _dbEnv.createCurrent();
try
{
try
{
- TransactionalEvictorContextI.ServantHolder sh = ctx.createServantHolder(current, store, _useNonmutating);
+ TransactionalEvictorContext.ServantHolder sh = ctx.createServantHolder(current, store, _useNonmutating);
if(sh.servant() == null)
{
@@ -422,7 +414,7 @@ class TransactionalEvictorI extends EvictorI implements TransactionalEvictor
Ice.DispatchStatus dispatchStatus = sh.servant().ice_dispatch(request, ctx);
if(dispatchStatus == Ice.DispatchStatus.DispatchUserException && _rollbackOnUserException)
{
- ctx.rollbackOnly();
+ ctx.rollback();
}
if(dispatchStatus == Ice.DispatchStatus.DispatchAsync)
{
@@ -432,12 +424,13 @@ class TransactionalEvictorI extends EvictorI implements TransactionalEvictor
}
catch(RuntimeException ex)
{
- ctx.rollbackOnly();
+ ctx.rollback();
throw ex;
}
finally
{
sh.release();
+ ctx.commit();
}
}
catch(DeadlockException ex)
@@ -445,21 +438,19 @@ class TransactionalEvictorI extends EvictorI implements TransactionalEvictor
ctx.deadlockException();
throw ex;
}
- catch(RuntimeException ex)
- {
- ctx.rollbackOnly();
- throw ex;
- }
finally
{
- ctx.complete();
+ ctx.rollback();
}
}
catch(DeadlockException ex)
{
tryAgain = true;
}
-
+ finally
+ {
+ _dbEnv.setCurrentTransaction(null);
+ }
} while(tryAgain);
}
}
@@ -513,7 +504,7 @@ class TransactionalEvictorI extends EvictorI implements TransactionalEvictor
storeMapCopy = new java.util.HashMap(_storeMap);
}
- com.sleepycat.db.Transaction tx = beforeQuery();
+ TransactionI tx = beforeQuery();
java.util.Iterator p = storeMapCopy.entrySet().iterator();
while(p.hasNext())
@@ -562,17 +553,17 @@ class TransactionalEvictorI extends EvictorI implements TransactionalEvictor
}
}
- protected com.sleepycat.db.Transaction
+ protected TransactionI
beforeQuery()
{
- TransactionalEvictorContextI ctx = _dbEnv.getCurrent();
- com.sleepycat.db.Transaction tx = null;
+ TransactionalEvictorContext ctx = _dbEnv.getCurrent();
+ TransactionI tx = null;
if(ctx != null)
{
- tx = ctx.transaction().dbTxn();
+ tx = ctx.transaction();
if(tx == null)
{
- throw new DatabaseException(_errorPrefix + "invalid TransactionalEvictorContext");
+ throw new DatabaseException(_errorPrefix + "inactive transaction");
}
}