diff options
author | Dwayne Boone <dwayne@zeroc.com> | 2009-09-28 11:05:44 -0230 |
---|---|---|
committer | Dwayne Boone <dwayne@zeroc.com> | 2009-09-28 11:05:44 -0230 |
commit | 7d20430028f05cc26c412465176a75ce4ea5af9e (patch) | |
tree | 593695acf366f7e3a7081d15af8f474683ce4af7 /cpp/src/IceStorm/DatabaseCache.cpp | |
parent | Removed unused __checkTwoway(const char*) from Proxy (diff) | |
download | ice-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.cpp | 78 |
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 |