내용 목차
DataSource 객체는 데이터베이스의 모든 리소스를 지칭하는 포괄적인 개념으로 JDBC 2.0 표준의 확장 API로 처음 소개되었다. 여기서 설명하는 DataSource는 하나의 데이터베이스에 대응된다.
본 장에서는 tbJDBC에서 제공하는 DataSource 객체를 이용하여 데이터베이스에 연결하는 방법과 데이터베이스 URL에 대해 설명한다.
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 객체의 속성을 설정할 수 있는 메소드이다.
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 객체의 추가 속성을 설정할 수 있는 메소드이다.
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 객체를 이용하여 데이터베이스에 연결하는 방법은 JNDI를 사용하지 않는 방법과 사용하는 방법이 있다. JNDI(Java Naming and Directory Interface)는 Java로 작성된 애플리케이션 프로그램이 DNS, NDS 등과 같은 네이밍, 디렉터리 서비스에 접근하기 위한 API이다.
다음은 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를 사용하여 데이터베이스에 연결하는 예이다.
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(Uniform Resource Locator)은 다음과 같이 문자열 값으로 사용한다.
jdbc:tibero:thin:@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를 반드시 명시해야 한다.