DataSource 객체 및 데이터베이스 URL
tbJDBC 제공 기능인 데이터소스 객체를 이용하여 데이터베이스 연결 방법과 URL에 대해 설명합니다.
DataSource 객체는 데이터베이스의 모든 리소스를 지칭하는 포괄적인 개념으로 JDBC 2.0 표준의 확장 API로 처음 소개되었습니다. 여기서 설명하는 DataSource는 하나의 데이터베이스에 대응됩니다.
DataSource 객체
javax.sql.DataSource에 정의된 기본 인터페이스는 아래와 같습니다.
public interface DataSource
{
Connection getConnection() throws SQLException;
Connection getConnection(String username, String password) throws SQLException;
...
}
Tibero에서는 com.tmax.tibero.jdbc.ext 패키지를 제공하고 있습니다. 즉, 각종 DataSource 객체의 속성을 설정할 수 있는 메소드를 제공하여 애플리케이션 프로그램 개발자의 편의를 제공하고 있습니다.
DataSource 객체의 속성
아래는 DataSource 객체에 설정할 수 있는 속성입니다.
databaseName
String
서버에 존재하는 특정 데이터베이스의 이름
dataSourceName
String
DataSource의 이름
description
String
DataSource에 대한 설명
networkProtocol
String
서버와 통신하는 네트워크 프로토콜의 이름 (기본값: TCP)
password
String
서버 접속을 위한 패스워드
portNumber
int
서버 리스너의 포트 번호
serverName
String
데이터베이스의 이름
user
String
서버 접속을 위한 사용자 이름
아래는 위 표에서 설명한 DataSource 객체의 속성을 설정할 수 있는 메소드입니다.
public String getDatabaseName()
public void setDatabaseName(String databaseName)
public String getDataSourceName()
public void setDataSourceName(String dataSourceName)
public String getDescription()
public void setDescription(String description)
public String getNetworkProtocol()
public void setNetworkProtocol(String networkProtocol)
public String getPassword()
public void setPassword(String password)
public int getPortNumber()
public void setPortNumber(int portNumber)
public String getServerName()
public void setServerName(String serverName)
public String getUser()
public void setUser(String user)
DataSource 객체의 추가 속성
아래는 추가로 설정할 수 있는 DataSource 객체의 속성입니다.
driverType
String
JDBC Driver의 타입
login_timeout
int
소켓의 read timeout을 지정
최소 소켓을 생성할 때부터 DB 연결 생성이 완료될 때까지 적용
DB 연결 생성이 완료된 뒤에는 read_timeout 속성이 적용
만약 응답이 없이 지정된 시간이 지나면 timeout 을 발생시키지만 설정값이 0일 경우에는 timeout을 발생시키지 않음 (단위: millisecond, 기본값: 0)
logWriter
java.io.PrintWriter
DataSource 객체를 위한 Log Writer
maxStatements
int
애플리케이션 프로그램 캐시에서 저장할 문장의 최댓값
read_timeout
int
DB 연결 생성이 완료된 이후의 소켓의 read timeout을 지정
만약 응답이 없이 지정된 시간이 지나면 timeout을 발생 시키지만 설정값이 0일 경우에는 timeout을 발생시키지 않음 (단위: millisecond, 기본값: 0)
program_name
String
프로그램 이름 (기본값: JDBC Thin Client)
self_keepalive
String
SELF KEEP ALIVE 기능을 활성화할지 여부를 지정
활성화한 경우에는 self_keepidle, self_keepintvl, self_keepcnt 속성 설정에 따라 연결 대상에 대한 네트워크 접근에 문제가 없는지 확인
전체 확인 과정에 실패하면, 해당 네트워크연결을 강제로 종료시킴 (기본값: false)
self_keepidle
int
접속 완료, DB 요청/응답 처리 등의 정상적인 네트워크 사용 이후, 다음 번의 정상 처리된 시간이 갱신되지 않을 때, 정상 상황으로 간주할 최대 시간을 지정
지정된 시간이 지나 면 네트워크 접근에 대한 확인 절차가 시작
self_keepalive 설정이 true인 경우에만 유효 (단위: 초, 기본값: 60)
self_keepintvl
int
매 확인할 때의 간격 및 한 번 확인할 때 최대 대기 시간을 지정
self_keepalive 설정이 true인 경우에만 유효 (단위: 초, 기본값: 10)
self_keepcnt
int
확인 절차를 총 몇 회까지 수행할 것인지를 지정
지정된횟수만큼 연속으로 실패하여야만 전체 확인과정이 실패한 것으로 처리
self_keepalive 설정이 true인 경우에만 유효 (기본값: 3)
URL
String
데이터베이스 연결을 위한 데이터베이스 URL
아래는 위 표에서 설명한 DataSource 객체의 추가 속성을 설정할 수 있는 메소드입니다.
public String getDriverType()
public void setDriverType(String driverType)
public int getLoginTimeout()
public void setLoginTimeout(int time)
public PrintWriter getLogWriter()
public void setLogWriter(PrintWriter writer)
public int getMaxStatements()
public void setMaxStatements(int maxStatements)
public int getReadTimeout()
public void setReadTimeout(int readTimeout)
public String getProgramName()
public void setProgramName(String name)
public boolean getSelfKeepalive()
public void setSelfKeepalive(boolean keepalive)
public int getSelfKeepidle()
public void setSelfKeepidle(int keepidle)
public int getSelfKeepintvl()
public void setSelfKeepintvl(int keepintvl)
public int getSelfKeepcnt()
public void setSelfKeepcnt(int keepcnt)
public String getURL()
public void setURL(String url)
DataSource 객체를 이용한 연결
DataSource 객체를 이용하여 데이터베이스에 연결하는 방법은 JNDI를 사용하지 않는 방법과 사용하는 방법이 있습니다. JNDI(Java Naming and Directory Interface)는 Java로 작성된 애플리케이션 프로그램이 DNS, NDS 등과 같은 네이밍, 디렉터리 서비스에 접근하기 위한 API입니다.
JNDI를 사용하지 않는 방법
아래는 JNDI를 사용하지 않고 DataSource 객체를 사용하여 데이터베이스에 연결하는 가장 일반적인 방법입니다. 방법은 TbDataSource 객체를 생성한 후 기본 속성을 설정하면 됩니다.
예를 들면 아래와 같습니다.
TbDataSource ds = new TbDataSource();
ds.setDriverType("thin");
ds.setServerName("tmaxh4");
ds.setNetworkProtocol("tcp");
ds.setDatabaseName("tibero");
ds.setPortNumber(8888);
ds.setUser("tibero");
ds.setPassword("tmax");
Connection conn = ds.getConnection();
JNDI를 사용한 방법
아래는 JNDI를 사용하여 데이터베이스에 연결하는 예입니다.
TbDataSource 객체를 생성한 후 기본 속성을 설정합니다.
TbDataSource ds = new TbDataSource();
ds.setDriverType("thin");
ds.setServerName("tmaxh4");
ds.setNetworkProtocol("tcp");
ds.setDatabaseName("tibero");
ds.setPortNumber(8888);
ds.setUser("tibero");
ds.setPassword("tmax");
초기화된 DataSource 객체를 JNDI에 등록합니다.
Context ctx = new InitialContext();
ctx.bind("tibero/webdb", ds);
InitialContext()를 호출하면 JNDI를 참조하는 context 객체가 생성되고, ctx.bind()를 호출하면 DataSource 객체와 JNDI 이름이 연결됩니다. 즉, 위에서 연결시킨 'tibero/webdb'만을 이용하여 아래의 예처럼 언제든지 데이터베이스에 연결할 수 있습니다.
TbDataSource ds = (TbDataSource)ctx.lookup("tibero/webdb");
Connection conn = ds.getConnection();
데이터베이스 URL과 데이터베이스 지시자
데이터베이스 URL(Uniform Resource Locator)은 아래와 같이 문자열 값으로 사용합니다.
jdbc:tibero:thin:@database_sepcifier
URL에 user name, password를 포함하는 형태도 제공합니다.
jdbc:tibero:thin:user/password@database_sepcifier
Tibero에서 제공하는 데이터베이스 지시자(database_specifier)는 아래와 같이 사용할 수 있습니다.
hostname:port:[service_name]
또한 여러 개의 데이터베이스 연결을 지정하기 위한 DESCRIPTION 형태도 제공합니다.
(DESCRIPTION=
(LOAD_BALANCE=ON)
(FAILOVER=ON)
(PROTOCOL=TCP)
(ADDRESS_LIST=
(ADDRESS=(HOST=dbsvr1)(PORT=8629))
(ADDRESS=(HOST=dbsvr2)(PORT=7629))
...
))
위의 예에서 LOAD_BALANCE와 FAILOVER 기능은 선택적으로 적용할 수 있습니다. (단, ADDRESS_LIST는 하나 이상의 ADDRESS를 반드시 명시해야 합니다.)
Last updated