No. 12237

OC4J의 data-sources.xml 파일 셋업 및 활용
========================================

/* OC4J(Oracle Container For J2EE)는 IAS 1.0.2.2 에서부터
제공되는 J2EE Container로, 현재 모든 J2EE Spec 1.2 및 1.3
Spec 일부를 지원하고 있다. J2EE에 관한 추가 정보는 Sun
Homepage에서 찾아볼 수 있다. 본 document는 oc4j 1.0.2.2
version을 기준으로 작성되었다.
/*

data-sources.xml 파일은 JDBC 2.0 확장 API인 dataSource
Object를 지원하기 위해 OC4J에서 제공하는 configuration
파일 이다.

dataSource Object를 이용함으로써 동일한 logical name으로
Standard Connection 및 Connection Pooling을 이용한
Connection, 둘 다를 얻어 사용할 수 있으며, DB 관련 정보들이
변경되는 경우가 발생하더라도 data-sources.xml 파일 안에 해당
내용을 반영해주면 소스 레벨의 수정없이 프로그램이 동작하는 것등
많은 장점이 있다.

일반적으로 필드에서 Connection Pooling을 다루는데
엔지니어가 가장 골머리를 썩는 부분은 다음과 같은 프로그램
실수 및 환경이다.

- connection을 획득한 후 release하지 않는다.
- release된 connection을 같은 jsp에서 다시 사용한다.
- 한번 cache된 connection이 물리적인 오류로 끊어진 경우,
이를 복구할 방법이 없다.

일반적으로 현재 존재하는 DB Connection Pooling driver에는
위의 문제에 대한 명확한 해답을 가지고 있는 것이 없는 관계로,
개발자의 이런 문제를 회피하려는 노력이 무엇보다도 중요하다.

일단 본 자료에서는 OC4J에서 제공하는 DB Connection Pooling을
활용하는 방법과 그 사용 샘플 코드를 살펴보겠다.

1. data-sources.xml 파일
1.1. 위치 : $OC4J_HOMEconfig
1.2 내용 :
<data-source
  class="com.evermind.sql.DriverManagerDataSource"
  name="OracleDS"
  location="jdbc/OracleDS"
  pooled-location="jdbc/pooled/OracleDS"
  xa-location="jdbc/xa/OracleDS"
  ejb-location="jdbc/ejb/OracleDS"
  connection-driver="oracle.jdbc.driver.OracleDriver"
  min-connections="5"
  max-connections="25"
  inactivity-timeout="360000"
  username="scott"
  password="tiger"
  url="jdbc:oracle:thin:@152.69.42.30:1521:ora817"
/>
1.3. entry 내용 설명 :
  location <= Standard Connection Object를 얻어내기 위한 logical name
  pooled-location <= Pooled Connection으로부터 Connection을 얻어내기
  위해 기술하는 logical name
  username/password : db의 schema명과 password
  url : db 접속을 위한 jdbc url string.

* location entry는 일반적인 connection을 활용할 때 참조하기 위해
entry이고, pooled-location 부분이 connection pooling을 활용할 때
참조되는 entry이며, 이름은 임의의 유일한 값이 부여되면 된다.

1.4. 코드에서 DataSource 참조하는 방법은 다음과 같다.

<html>
<body>
<%@ page contentType="text/html;charset=EUC-KR"%>
<%@ page import="java.util.*, java.sql.*, javax.sql.*, javax.naming.InitialContext" %>

<%
InitialContext ic = null;
DataSource ds = null;
Connection conn = null;
String mydate = null;
Statement stmt = null;
ResultSet rset = null;

try {
  ic = new InitialContext();
  ds = (DataSource) ic.lookup("jdbc/pooled/OracleDS"); <= pooled-location entry의 값.
  conn = ds.getConnection();
  stmt = conn.createStatement();
  rset = stmt.executeQuery("select sysdate from dual");
  rset.next();
  mydate = rset.getString(1);
%>

Current Server Date = <%= mydate %> <br>
<%
} catch (Exception e) {
%>
Exception : <%= e %>
<%
} finally {
  if (rset != null) try { rset.close(); } catch (Exception e) {}
  if (stmt != null) try { stmt.close(); } catch (Exception e) {}
  if (conn != null) try { conn.close(); } catch (Exception e) {}
}
%>
</body>
</html>

=> resultSet, Statement, Connection object에 대해서는 finally 구문
안에서 close를 시켜주어야 한다. 그렇지 않고 일반 block에서
close를 하는 경우에는 runtime error 발생시 해당 object가 반환되지
않는 문제에 접할 수 있다.




    
           



***** 아름다운프로님에 의해서 게시물 복사 + 카테고리변경되었습니다 (2003-12-18 16:49)
Posted by 아름프로
BLOG main image

카테고리

분류 전체보기 (539)
이야기방 (19)
토론/정보/사설 (16)
IBM Rational (9)
U-IT (0)
SOA/WS/ebXML (110)
개발방법론/모델링 (122)
J2SE (34)
J2EE (60)
DataBase (39)
Open Projects (30)
BP/표준화 (50)
Apache Projects (15)
Web/보안/OS (22)
Tools (7)
AJAX/WEB2.0 (1)
Linux/Unix (1)
영어 (0)
비공개방 (0)

최근에 올라온 글

최근에 달린 댓글

최근에 받은 트랙백

달력

«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31

글 보관함

Total :
Today : Yesterday :