summaryrefslogtreecommitdiff
path: root/cpp/src/IceStorm/DatabaseCache.cpp
diff options
context:
space:
mode:
authorDwayne Boone <dwayne@zeroc.com>2009-09-28 11:05:44 -0230
committerDwayne Boone <dwayne@zeroc.com>2009-09-28 11:05:44 -0230
commit7d20430028f05cc26c412465176a75ce4ea5af9e (patch)
tree593695acf366f7e3a7081d15af8f474683ce4af7 /cpp/src/IceStorm/DatabaseCache.cpp
parentRemoved unused __checkTwoway(const char*) from Proxy (diff)
downloadice-7d20430028f05cc26c412465176a75ce4ea5af9e.tar.bz2
ice-7d20430028f05cc26c412465176a75ce4ea5af9e.tar.xz
ice-7d20430028f05cc26c412465176a75ce4ea5af9e.zip
Bug 3231 - alternative storage for IceGrid and IceStorm
Diffstat (limited to 'cpp/src/IceStorm/DatabaseCache.cpp')
-rw-r--r--cpp/src/IceStorm/DatabaseCache.cpp78
1 files changed, 78 insertions, 0 deletions
diff --git a/cpp/src/IceStorm/DatabaseCache.cpp b/cpp/src/IceStorm/DatabaseCache.cpp
new file mode 100644
index 00000000000..ee4374028c3
--- /dev/null
+++ b/cpp/src/IceStorm/DatabaseCache.cpp
@@ -0,0 +1,78 @@
+// **********************************************************************
+//
+// Copyright (c) 2003-2009 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.
+//
+// **********************************************************************
+
+#include <IceStorm/DatabaseCache.h>
+#include <IceStorm/Instance.h>
+#ifdef QTSQL
+# include <Ice/Communicator.h>
+# include <Ice/Properties.h>
+#endif
+
+using namespace IceStorm;
+using namespace std;
+
+#ifdef QTSQL
+
+DatabaseCache::DatabaseCache(const InstancePtr& instance) :
+ IceSQL::DatabaseCache(instance->communicator(),
+ instance->communicator()->getProperties()->getProperty(instance->serviceName() + ".SQL.DatabaseType"),
+ instance->communicator()->getProperties()->getProperty(instance->serviceName() + ".SQL.DatabaseName"),
+ instance->communicator()->getProperties()->getProperty(instance->serviceName() + ".SQL.HostName"),
+ instance->communicator()->getProperties()->getProperty(instance->serviceName() + ".SQL.UserName"),
+ instance->communicator()->getProperties()->getProperty(instance->serviceName() + ".SQL.Password"),
+ false)
+{
+ Ice::PropertiesPtr properties = instance->properties();
+ string serviceName = instance->serviceName();
+
+ string tablePrefix = properties->getPropertyWithDefault(serviceName + ".InstanceName", "IceStorm");
+ string id = properties->getProperty(serviceName + ".NodeId");
+ if(!id.empty())
+ {
+ tablePrefix += "_";
+ tablePrefix += id;
+ }
+ replace(tablePrefix.begin(), tablePrefix.end(), '.', '_');
+ replace(tablePrefix.begin(), tablePrefix.end(), '-', '_');
+ replace(tablePrefix.begin(), tablePrefix.end(), ' ', '_');
+ replace(tablePrefix.begin(), tablePrefix.end(), ';', '_');
+
+ IceSQL::DatabaseConnectionPtr connection = getConnection();
+ IceSQL::TransactionHolder txn(connection);
+
+ const_cast<SqlLLUPtr&>(llu) = new SqlLLU(connection, tablePrefix + "_LLU");
+ const_cast<SqlSubscriberMapPtr&>(subscriberMap) =
+ new SqlSubscriberMap(connection, tablePrefix + "_Subscribers", _communicator);
+
+ txn.commit();
+}
+
+#else
+
+DatabaseCache::DatabaseCache(const InstancePtr& instance) :
+ _communicator(instance->communicator()),
+ _envName(instance->serviceName()),
+ _connection(Freeze::createConnection(_communicator, _envName))
+{
+}
+
+DatabaseConnectionPtr
+DatabaseCache::getConnection()
+{
+ return _connection;
+}
+
+DatabaseConnectionPtr
+DatabaseCache::newConnection()
+{
+ return Freeze::createConnection(_communicator, _envName);
+}
+
+
+#endif