Server Enterprise/JDBC & DBCP
DBCP 에서 JNDI 설정 방법
denodo
2012. 7. 20. 21:40
# [유형1] JNDI & DataSource # 다음과 같이 JNDI lookup을 통한 DataSource를 사용하고 있을 경우는 특별한 설정 # 없이도, 자동으로 SQL을 추적합니다. # # InitialContext ctx = new InitialContext(); # DataSource ds = (DataSource)ctx.lookup("java:comp/env/jdbc/datasource"); # Connection conn = ds.getConnection(); # # NOTE: 다음과 같이 사용하고 있는 유형은 추적하지 못하니, 한번의 lookup()을 # 사용하는 위 유형으로 어플리케이션 소스 변경을 하셔야 합니다. # InitialContext ctx = new InitialContext(); # Context envCtx = (Context)ctx.lookup("java:comp/env"); # DataSource ds = (DataSource)envCtx.lookup("jdbc/datasource"); # (혹은 아래에 기술한 [유형3]방식을 고려해 보세요.) # #============================================================================== # [유형2]: DriverManager.getConnection() # JDBC SQL을 추적할 때, DriverManager.getConnection() 유형을 사용하는 경우에 # 아래의 파라메터를 설정하실 수 있습니다. 예를 들면, JEUS 4.0, Apache DBCP # Connection Pool, 혹은 단순히 DriverManager.getConnection() 유형 등입니다. # JDBC URL의 앞부분을 기술하시면 됩니다. 여러개라면 ","로 구분하여 기술하시면 # 됩니다. # ---------- # (예제1) Tmaxsoft JEUS 4.0 # Class.forName("jeus.jdbc.pool.Driver"); # Connection conn = DriverManager.getConnection("jdbc:jeus:pool:mypool"); # ==> #user_defined_jdbc_connectionpool_prefixes=jdbc:jeus:pool # ---------- # (예제2) Apache DBCP JDBC Connection Pool # conn = DriverManager.getConnection("jdbc:apache:commons:dbcp:/poolname"); # ==> #user_defined_jdbc_connectionpool_prefixes=jdbc:apache:commons:dbcp # ---------- # (예제3) Oracle Non-Pool사용시 # Class.forName("oracle.jdbc.driver.OracleDriver").newInstance(); # conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:ORACL", # "scott", "tiget"); # ==> #user_defined_jdbc_connectionpool_prefixes=jdbc:oracle:thin # NOTE: 단 위 (예제3)위 경우, 직접 맺고 끝는 경우가 아니라, JDBC Connection Pool # 내부에서 자체적으로 위와같이 사용되고 있는 경우는 Connection NOT CLOSED 예외를 # 감지하지 못합니다. 따라서, [유형2]의 경우는 특별한 경우를 제외하곤 사용하지 마십시요. # 이 경우는 어플리케이션의 ConnUtil.getConnection()와 같은 유형의 메소드를 # 확인하여 아래의 [유형3] 방식으로 전환하여 사용하십시오. # #============================================================================== # [유형 3] 자체제작한 db.DBConnectionManager.java 와 같은 유형 # JDBC Connection Pool을 자체 제작하여 사용하고 있을 때, getConnection()/ # freeConnection()등과 같이 JDBC연결을 얻어오는 부분과 반환하는 클래스 및 # 메소드를 명시적으로 등록해 줄 수 있습니다. 이러한 유틸리티 클래스는 # 프레임웍상에 하나 이상의 존재할 수 있으므로, ";"으로 구분하여 여러개를 등록할 # 수 있습니다. 예를 들면 다음과 같습니다. # ---------- # (예제1: 웹로직 5.x/6.x ) # Driver myDriver = (Driver)Class.forName("weblogic.jdbc.pool.Driver").newInstance( ); # Connection con = myDriver.connect("jdbc:weblogic:pool:demoPool", null); # ==> #jdbc_connection_get = weblogic.jdbc.pool.Driver.connect(String,Properties) # ---------- # (예제2: Hans Bergsten's DBConnectionManager Pool) #jdbc_connection_get = db.DBConnectionManager.getConnection(String);db.DBConnectionManager.getConnection(String,long) #jdbc_connection_close = db.DBConnectionManager.freeConnection(String,Connection) # ---------- # (예제3: Oracle JDBC Driver Connection Pool) #jdbc_connection_get = oracle.jdbc.pool.OracleConnectionCacheImpl.getConnection() # ---------- # (예제4): Oraccle ERP stadard JDBC connection SQL추적 기능 추가(Note: justget옵션) # jdbc_connection_justget = oracle.apps.fnd.common.Context.getJDBCConnection() # jdbc_connection_close = oracle.apps.fnd.common.Context.releaseJDBCConnection(Connection,String) # # NOTE: # (1) 앞부분의 패키지명/클래스명/메소드명은 반드시 full package명이 기술되어야 # 합니다. # ConnUtil.getConnection() --> com.db.ConnUtil.getConnection() # (2) jdbc_connection_get 혹은 jdbc_connection_justget 에 설정할 getConnection()류의 메소드는 # 반드시 return type이 java.sql.Connection 이어야 합니다. # (3) jdbc_connection_close 에 설정된 메소드에는 인자 중에 java.sql.Connection이 반드시 # 포함되어 있어야 합니다.(위치 상관없음) # (4) 파라메터는 다음과 같의 full package 명을 기술해도 되고, 클래스명만 기술해도 # 됩니다. # com.db.DBUtil.getConnection(String) == com.db.DBUtil.getConneciton(java.lang.String) # (5) 파라메터의 변수명도 지정 가능하며 내부적으로는 무시됩니다. # com.db.DBUtil.getConnection(String) == com.db.DBUtil.getConneciton(String name) # (6) jdbc_connection_get과 jdbc_connection_close 가 항상 쌍으로 존재할 필요는 # 없습니다. 예를 들어 ConnUtil.getConntion()으로 DB연결을 얻어오나 # conn.close()를 통해 pool로 돌려보내는 유형이라면, jdbc_connection_get만 # 등록하면 됩니다. # (7) 단 이 [유형3]의 경우는 설정 변경시 WAS의 재기동이 필요합니다. #----------------------------------------- # Oracle JDBC 9.x 버전에서 JDBC 2.0 표준 API가 아닌 Oracle 종속적인 CLOB/BLOB 형을 # 어플리케션에서 명시적으로 OracleResultSet으로 캐스팅(casting)하여 사용하고 있을 때, # ClassCastException이 발생할 수 있습니다. # 예: CLOB clob = ((OracleResultSet)rs).getCLOB(i); # 사실 이 경우는 Oracle 10g JDBC Driver로 바꾸고 표준 JDBC 2.0 API로 수정할 것을 # 권고드리나, 이것이 여타의 이유로 불가능할 경우는 아래의 옵션을 설정하여 # OracleResultSet으로 캐스팅이 가능하게 하실 수 있습니다. (default: false) #enable_jdbc_oracle_dependency_used = true