ConnectionManager.cxx
上传用户:xfwatch
上传日期:2020-12-14
资源大小:872k
文件大小:4k
源码类别:

中间件编程

开发平台:

Java

  1. /*
  2.  * JBoss, Home of Professional Open Source
  3.  * Copyright 2008, Red Hat, Inc., and others contributors as indicated
  4.  * by the @authors tag. All rights reserved.
  5.  * See the copyright.txt in the distribution for a
  6.  * full listing of individual contributors.
  7.  * This copyrighted material is made available to anyone wishing to use,
  8.  * modify, copy, or redistribute it subject to the terms and conditions
  9.  * of the GNU Lesser General Public License, v. 2.1.
  10.  * This program is distributed in the hope that it will be useful, but WITHOUT A
  11.  * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
  12.  * PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more details.
  13.  * You should have received a copy of the GNU Lesser General Public License,
  14.  * v.2.1 along with this distribution; if not, write to the Free Software
  15.  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
  16.  * MA  02110-1301, USA.
  17.  */
  18. #include "log4cxx/basicconfigurator.h"
  19. #include "log4cxx/propertyconfigurator.h"
  20. #include "log4cxx/logger.h"
  21. #include "log4cxx/logmanager.h"
  22. #include "AtmiBrokerServer.h"
  23. #include "ConnectionManager.h"
  24. #include "AtmiBrokerEnv.h"
  25. #include "SymbolLoader.h"
  26. #include "xatmi.h"
  27. log4cxx::LoggerPtr loggerConnectionManager(log4cxx::Logger::getLogger(
  28. "ConnectionManager"));
  29. extern char server[30];
  30. extern int serverid;
  31. #ifdef IDE_DEBUG
  32. #include "HybridConnectionImpl.h"
  33. #endif
  34. ConnectionManager::ConnectionManager() {
  35. LOG4CXX_TRACE(loggerConnectionManager, (char*) "constructor");
  36. lock = new SynchronizableObject();
  37. }
  38. ConnectionManager::~ConnectionManager() {
  39. LOG4CXX_TRACE(loggerConnectionManager, (char*) "destructor");
  40. this->closeConnections();
  41. delete lock;
  42. }
  43. void ConnectionManager::closeConnections() {
  44. LOG4CXX_TRACE(loggerConnectionManager, (char*) "closeConnections");
  45. lock->lock();
  46. ConnectionMap::iterator it;
  47. for (it = manager.begin(); it != manager.end(); it++) {
  48. delete (*it).second;
  49. }
  50. manager.clear();
  51. lock->unlock();
  52. }
  53. Connection*
  54. ConnectionManager::getConnection(char* side) {
  55. char* transportLibrary;
  56. char adm[XATMI_SERVICE_NAME_LENGTH + 1];
  57. ACE_OS::snprintf(adm, XATMI_SERVICE_NAME_LENGTH + 1, "%s_ADMIN_%d", server,
  58. serverid);
  59. #ifdef WIN32
  60. transportLibrary = (char*) "atmibroker-hybrid.dll";
  61. #else
  62. transportLibrary = (char*) "libatmibroker-hybrid.so";
  63. #endif
  64. LOG4CXX_DEBUG(loggerConnectionManager, (char*) "transport is " << transportLibrary);
  65. std::string key = side;
  66. key.append("/");
  67. key.append(transportLibrary);
  68. lock->lock();
  69. ConnectionMap::iterator it;
  70. it = manager.find(key);
  71. if (it != manager.end()) {
  72. LOG4CXX_DEBUG(loggerConnectionManager, (char*) "Found Connection in map " << (*it).second);
  73. lock->unlock();
  74. return (*it).second;
  75. } else {
  76. #ifdef IDE_DEBUG
  77. Connection* connection = new HybridConnectionImpl(side);
  78. manager.insert(ConnectionMap::value_type(key, connection));
  79. LOG4CXX_DEBUG(loggerConnectionManager, (char*) "insert service " << key << " connection " << connection);
  80. lock->unlock();
  81. return connection;
  82. #else
  83. connection_factory_t* connectionFactory =
  84. (connection_factory_t*) ::lookup_symbol(transportLibrary,
  85. "connectionFactory");
  86. if (connectionFactory != NULL) {
  87. Connection* connection = connectionFactory->create_connection(side);
  88. manager.insert(ConnectionMap::value_type(key, connection));
  89. LOG4CXX_DEBUG(loggerConnectionManager, (char*) "insert service "
  90. << key << " connection " << connection);
  91. lock->unlock();
  92. return connection;
  93. }
  94. #endif
  95. }
  96. LOG4CXX_WARN(loggerConnectionManager,
  97. (char*) "can not create connection for service " << side);
  98. lock->unlock();
  99. return NULL;
  100. }
  101. Connection*
  102. ConnectionManager::getClientConnection() {
  103. return getConnection((char*) "client");
  104. }
  105. Connection*
  106. ConnectionManager::getServerConnection() {
  107. return getConnection((char*) "server");
  108. }