아직 DBCP 와 Connection Pooling 의 차이를 잘 모르겠지만 일단 기초적인 Connection Pooling 을 사용하고 있다.

다음은 Connection Pooling 을 지원하는 클래스이다.

ConnectionManager.java


package net.rukikuki.db;

import java.sql.Connection;
import java.sql.SQLException;

import snaq.db.ConnectionPoolManager;

/**
 * Connection Pooling의 Connection 객체를 관리하는 클래스.
 */
public class ConnectionManager {
   
    /**
     * Connection 객체를 반환하는 메써드.
     * @return
     * @throws SQLException
     */
    public static Connection getConnection() throws SQLException {
       
   
        ConnectionPoolManager dbm = ConnectionPoolManager.getInstance();
         return dbm.getConnection("mysql");
        }
}

이 ConnectionManager 를 사용하기 위해서는 일단 dbpool.properties 를 설정해서 jdbc드라이버를 통해 DB에 접속해야 한다.

오늘 MySQL 에 간단한 질의를 던지고 결과를 받는 프로그램을 만들어 봤다. 폼에 검색조건을 입력하고  버튼을 누르면 데이터를 가져오는 프로그램이다.

문제는 submit 하면 다음 페이지로 넘어가지도 않고 Exception 도 발생하지 않는 애매한 상황이 발생했다.

일단 my.cnf 에 Error Log 외의 일반 로그도 기록하도록 설정했다.

[mysqld]
log            = /opt/local/var/run/mysql5/mysql/mysqld.log   //일반로그
log-error    = /opt/local/var/run/mysql5/mysql/mysqld.err   //에러로그


일반로그의 내용은 주로 쿼리의 실행과 결과를 리턴하는 과정이다.

추적하여 얻어낸 결론은 JDBC 설정의 지정된 인코딩과 DB의 인코딩이 다르면 UserID 와 Password 가 제대로 전달되지 못해 로그인 처리에 실패한다는 것이다.

 26925 Init DB     Access denied for user ''@'localhost' to database 'devspace'
          26926 Connect     nobody@localhost as anonymous on

=>  사용자 아이디 가 전달되지 않았다.

3003 Connect     Access denied for user '"devid"'@'localhost' (using password: YES)

=> mysql.user="devid" 로 설정했을 때 (아이디를 "devid"  로 인식)


47639 Connect     Access denied for user 'devid'@'localhost' (using password: YES)

=> mysql.password="패스워드" 로 설정했을때 (패스워드를 "패스워드" 로 인식)


여튼 다음과 같이 설정하면 된다.


dbpool.properties

drivers=org.gjt.mm.mysql.Driver
 
#mysql.url=jdbc:mysql://localhost:3306/devspace?useUnicode=true&characterEncoding=utf8
mysql.url=jdbc:mysql://localhost:3306/devspace?useUnicode=false&characterEncoding=euckr

mysql.user=devid

mysql.password=1234321

mysql.initsize=5

mysql.maxpool=10


----------------------------------------

my.cnf


[mysqld]
#skip-networking
#user                           = mysql
default-character-set          = euckr
character-set-server           = euckr
default-collation              = euckr_korean_ci
#port                           = 3306
#default-character-set          = utf8
#character-set-server           = utf8
#default-collation              = utf8_general_ci
#socket                         = /opt/local/var/run/mysql5/mysqld.sock
socket                         = /tmp/mysqld.sock
#pid-file                       = /opt/local/var/run/mysql5
log-error                      = /opt/local/var/db/mysql5/mysqld.err
log                            = /opt/local/var/db/mysql5/mysqld.log
datadir                         = /opt/local/var/db/mysql5
#default-character-set           = utf8
lower_case_table_names=1

#Path to the character-sets directory.
character_sets-dir=/opt/local/share/mysql5/mysql/korean




[client]
#default-character-set=utf8
character-sets-dir=/usr/share/mysql/charsets
default-character-set=euckr

-------------------

euc-kr 환경과 utf8 환경으로 바꾸려면 각각의 코멘트처리를 바꿔주면 된다.







,