아직 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 환경으로 바꾸려면 각각의 코멘트처리를 바꿔주면 된다.