JNetLibray
로딩중...
검색중...
일치하는것 없음
jnet::JNetDBConnPool 클래스 참조

DB 커넥션 인스턴스 Pool 더 자세히 ...

#include <JNetDB.h>

Public 멤버 함수

 JNetDBConnPool ()
 
 JNetDBConnPool (bool dbConnErrorLog)
 
 ~JNetDBConnPool ()
 
bool Connect (INT32 connectionCount, const WCHAR *connectionString)
 
void Clear ()
 
JNetDBConnPop ()
 
void Push (JNetDBConn *connection, bool isDisconnected=false, bool tryToConnect=false, const WCHAR *connectionString=NULL)
 

Private 속성

SQLHENV m_SqlEnvironment = SQL_NULL_HANDLE
 
std::queue< JNetDBConn * > m_DBConnectionsQueue
 
std::mutex m_DBConnectionsMtx
 
bool m_DBConnErrorLogFlag
 

상세한 설명

DB 커넥션 인스턴스 Pool

생성자 & 소멸자 문서화

◆ JNetDBConnPool() [1/2]

jnet::JNetDBConnPool::JNetDBConnPool ( )
inline
122: JNetDBConnPool(false) {}
JNetDBConnPool()
Definition JNetDB.h:122

◆ JNetDBConnPool() [2/2]

jnet::JNetDBConnPool::JNetDBConnPool ( bool dbConnErrorLog)
inline
123: m_DBConnErrorLogFlag(dbConnErrorLog) {}
bool m_DBConnErrorLogFlag
Definition JNetDB.h:119

◆ ~JNetDBConnPool()

jnet::JNetDBConnPool::~JNetDBConnPool ( )
inline
124 {
125 Clear();
126 }
void Clear()
Definition JNetDB.cpp:487

멤버 함수 문서화

◆ Connect()

bool JNetDBConnPool::Connect ( INT32 connectionCount,
const WCHAR * connectionString )
461{
462 // 1. SQL 환경 핸들을 할당
463 if (::SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &m_SqlEnvironment) != SQL_SUCCESS)
464 return false;
465
466 // 2. SQL 환경 핸들 이용하여 ODBC 버전 설정
467 if (::SQLSetEnvAttr(m_SqlEnvironment, SQL_ATTR_ODBC_VERSION, reinterpret_cast<SQLPOINTER>(SQL_OV_ODBC3), 0) != SQL_SUCCESS)
468 return false;
469
470 // 3. connectionCount 갯수만큼 연결을 맺어준다(연결 생성).
471 // - DBConnection 객체를 통해 간접적으로 DB에 연결을 요청한다.
472 // - (DB와 연결된 스레드가 여러 개라면, 커넥션 카운터를 이 스레드 갯수만큼 만들수도 있다.)
473 std::lock_guard<std::mutex> lockGuard(m_DBConnectionsMtx);
474 for (INT32 i = 0; i < connectionCount; i++)
475 {
476 JNetDBConn* connection = new JNetDBConn(m_DBConnErrorLogFlag);
477 // 할당 받은 SQL 환경 핸들을 전달한다.
478 if (connection->Connect(m_SqlEnvironment, connectionString) == false)
479 return false;
480 //m_DBConnections.push_back(connection);
481 m_DBConnectionsQueue.push(connection);
482 }
483
484 return true;
485}
SQLHENV m_SqlEnvironment
Definition JNetDB.h:112
std::mutex m_DBConnectionsMtx
Definition JNetDB.h:117
std::queue< JNetDBConn * > m_DBConnectionsQueue
Definition JNetDB.h:116
DB Connection 추상화
Definition JNetDB.h:17
bool Connect(SQLHENV henv, const WCHAR *connectionString)
Definition JNetDB.cpp:12

◆ Clear()

void JNetDBConnPool::Clear ( )
488{
489 // 1. SQL 환경 핸들 반환
490 if (m_SqlEnvironment != SQL_NULL_HANDLE)
491 {
492 ::SQLFreeHandle(SQL_HANDLE_ENV, m_SqlEnvironment);
493 m_SqlEnvironment = SQL_NULL_HANDLE;
494 }
495
496 // 2. 커넥션 풀의 커넥션 들에 대한 메모리를 반환
497 std::lock_guard<std::mutex> lockGuard(m_DBConnectionsMtx);
498 //for (DBConnection* connection : m_DBConnections)
499 // delete connection;
500 //
501 //m_DBConnections.clear();
502
503 while (!m_DBConnectionsQueue.empty()) {
504 JNetDBConn* dbConn = m_DBConnectionsQueue.front();
506 delete dbConn;
507 }
508}

◆ Pop()

JNetDBConn * JNetDBConnPool::Pop ( )
511{
512 std::lock_guard<std::mutex> lockGuard(m_DBConnectionsMtx);
513
514 //if (m_DBConnections.empty())
515 if (m_DBConnectionsQueue.empty())
516 return nullptr;
517
518 //DBConnection* connection = m_DBConnections.back();
519 //m_DBConnections.pop_back();
520 JNetDBConn* connection = m_DBConnectionsQueue.front();
522 return connection;
523}

◆ Push()

void JNetDBConnPool::Push ( JNetDBConn * connection,
bool isDisconnected = false,
bool tryToConnect = false,
const WCHAR * connectionString = NULL )
526{
527 std::lock_guard<std::mutex> lockGuard(m_DBConnectionsMtx);
528
529 if (isDisconnected) {
530 if (!connection->Ping()) {
531 delete connection;
532
533 if (tryToConnect) {
534 connection = new JNetDBConn(m_DBConnErrorLogFlag);
535 if (!connection->Connect(m_SqlEnvironment, connectionString)) {
536 return;
537 }
538 //m_DBConnections.push_back(connection);
539 m_DBConnectionsQueue.push(connection);
540 }
541 }
542 else {
543 // isDisconnected: true -> ping 성공?
544 //m_DBConnections.push_back(connection);
545 m_DBConnectionsQueue.push(connection);
546 }
547 }
548 else {
549 //m_DBConnections.push_back(connection);
550 m_DBConnectionsQueue.push(connection);
551 }
552}
bool Ping()
Definition JNetDB.cpp:88

멤버 데이터 문서화

◆ m_SqlEnvironment

SQLHENV jnet::JNetDBConnPool::m_SqlEnvironment = SQL_NULL_HANDLE
private

◆ m_DBConnectionsQueue

std::queue<JNetDBConn*> jnet::JNetDBConnPool::m_DBConnectionsQueue
private

◆ m_DBConnectionsMtx

std::mutex jnet::JNetDBConnPool::m_DBConnectionsMtx
private

◆ m_DBConnErrorLogFlag

bool jnet::JNetDBConnPool::m_DBConnErrorLogFlag
private

이 클래스에 대한 문서화 페이지는 다음의 파일들로부터 생성되었습니다.: