From 7d20430028f05cc26c412465176a75ce4ea5af9e Mon Sep 17 00:00:00 2001 From: Dwayne Boone Date: Mon, 28 Sep 2009 11:05:44 -0230 Subject: Bug 3231 - alternative storage for IceGrid and IceStorm --- cpp/src/IceGrid/DatabaseCache.cpp | 77 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 cpp/src/IceGrid/DatabaseCache.cpp (limited to 'cpp/src/IceGrid/DatabaseCache.cpp') diff --git a/cpp/src/IceGrid/DatabaseCache.cpp b/cpp/src/IceGrid/DatabaseCache.cpp new file mode 100644 index 00000000000..12f544ded7a --- /dev/null +++ b/cpp/src/IceGrid/DatabaseCache.cpp @@ -0,0 +1,77 @@ +// ********************************************************************** +// +// 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 +#ifdef QTSQL +# include +#endif + +using namespace IceGrid; +using namespace std; + +#ifdef QTSQL + +DatabaseCache::DatabaseCache(const Ice::CommunicatorPtr& communicator, + const string&, + const string& instanceName, + const string& replicaName) : + IceSQL::DatabaseCache(communicator, + communicator->getProperties()->getProperty("IceGrid.SQL.DatabaseType"), + communicator->getProperties()->getProperty("IceGrid.SQL.DatabaseName"), + communicator->getProperties()->getProperty("IceGrid.SQL.HostName"), + communicator->getProperties()->getProperty("IceGrid.SQL.UserName"), + communicator->getProperties()->getProperty("IceGrid.SQL.Password"), + true) +{ + string tablePrefix = instanceName + "_" + replicaName; + 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(applications) = + new SqlStringApplicationInfoDict(connection, tablePrefix + "_Applications", _communicator); + const_cast(adapters) = + new SqlStringAdapterInfoDict(connection, tablePrefix + "_Adapters", _communicator); + const_cast(objects) = + new SqlIdentityObjectInfoDict(connection, tablePrefix + "_Objects", _communicator); + const_cast(internalObjects) = + new SqlIdentityObjectInfoDict(connection, tablePrefix + "_InternalObjects", _communicator); + + txn.commit(); +} + +#else + +DatabaseCache::DatabaseCache(const Ice::CommunicatorPtr& communicator, + const string& envName, + const string&, + const string&) : + _communicator(communicator), + _envName(envName), + _connection(Freeze::createConnection(communicator, envName)) +{ +} + +DatabaseConnectionPtr +DatabaseCache::getConnection() +{ + return _connection; +} + +DatabaseConnectionPtr +DatabaseCache::newConnection() +{ + return Freeze::createConnection(_communicator, _envName); +} + +#endif -- cgit v1.2.3