DBCP
¿©±â¼´Â Tomcat ¿¡¼ Á¦°øÇÏ´Â Pool À» ÀÌ¿ëÇÏ´Â DBCP ¿¬°á¹æ¹ýÀ» ¹è¿ì°í Struts °Ô½ÃÆÇ¿¡ Àû¿ëÇØ º¸°Ú½À´Ï´Ù.
¸¸ÀÏ ÀÌ´ë·Î ¾ÈµÈ´Ù¸é Tomcat Admin ÅøÀ» ÀÌ¿ëÇÏ´Â ¹æ¹ýÀ» Âü°íÇϽñ⠹ٶø´Ï´Ù.
server.xml ¼öÁ¤
server.xml ÆÄÀÏÀ» ¿°í GlobalNamingResources ¿¤¸®¸ÕÆ®ÀÇ ÀÚ½Ä ¿¤¸®¸ÕÆ®°¡ µÇµµ·Ï ¾Æ·¡ Resource ¿¤¸®¸ÕÆ®¸¦ Ãß°¡ÇÕ´Ï´Ù.
server.xml
<Resource name="jdbc/orcl" type="javax.sql.DataSource" maxActive="4" maxIdle="2" username="scott" maxWait="5000" driverClassName="oracle.jdbc.driver.OracleDriver" password="tiger" url="jdbc:oracle:thin:@127.0.0.1:1521:orcl"/>
dadam.xml ¼öÁ¤
dadam.xml ÆÄÀÏÀ» ¿°í À§ÀÇ ³»¿ëÀ» ±×´ë·Î Ãß°¡ÇÕ´Ï´Ù.
(ÆÄÀÏÀÇ À§Ä¡´Â {TOMCAT_HOME}/conf/Catalina/localhost/dadam.xml)
dadam.xml
<?xml version="1.0" encoding="UTF-8"?>
<Context
docBase="C:/www/jsp/dadam"
reloadable="true">
<Resource
name="jdbc/soctt"
type="javax.sql.DataSource"
maxActive="4"
maxIdle="2"
username="soctt"
maxWait="5000"
driverClassName="oracle.jdbc.driver.OracleDriver"
password="tiger"
url="jdbc:oracle:thin:@127.0.0.1:1521:orcl"/>
</Context>
web.xml ¼öÁ¤
web.xml ÆÄÀÏÀ» ¿°í ¾Æ·¡ ³»¿ëÀ» Ãß°¡ÇÕ´Ï´Ù.
web.xml
.. Áß°£ »ý·« ..
<resource-ref>
<description>Oracle Datasource</description>
<res-ref-name>jdbc/scott</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
</web-app>
DBCP ¸¦ ÀÌ¿ëÇÏ´Â Ä¿³Ø¼Ç °ü¸®ÀÚ Å¬·¡½º ÀÛ¼º
Áö±Ý±îÁö »ç¿ëÀÚ Á¤ÀÇ Ä¿³Ø¼Ç Ç®À» ÀÌ¿ëÇÏ´Â OracleConnectionManager Ŭ·¡½º¸¦ ÀÌ¿ëÇß½À´Ï´Ù.
ÀÌÁ¦ DBCP ¸¦ ÀÌ¿ëÇÏ´Â Ä¿³Ø¼Ç Ç® °ü¸®ÀÚ Å¬·¡½º¸¦ ÀÛ¼ºÇÕ´Ï´Ù.
JSConnectionManager.java
package net.java_school.db.dbpool;
import java.sql.*;
import javax.sql.*;
import javax.naming.*;
public class JSConnectionManager {
static private JSConnectionManager instance = null;
private DataSource ds;
private JSConnectionManager () {
Context ic = null;
try {
ic = new InitialContext();
ds = (DataSource)ic.lookup("java:comp/env/jdbc/blue");
} catch ( NamingException e ) {
System.out.println( e.getMessage() );
}
}
static synchronized public JSConnectionManager getInstance() {
if ( instance == null ) {
instance = new JSConnectionManager();
}
return instance;
}
public Connection getConnection() {
Connection con = null;
try {
con = ds.getConnection();
} catch ( Exception e ) {
System.out.println( e.getMessage() );
}
return con;
}
}
MyServletContextListener Ŭ·¡½º ¼öÁ¤
À¥ App °¡ ·ÎµåµÇ¸é¼ Ä¿³Ø¼Ç °ü¸®ÀÚ Å¬·¡½º¸¦ ¸Þ¸ð¸®¿¡ ·ÎµùÇÏ´Â ¿ªÇÒÀ» ÇÏ´Â MyServletContextListener Ŭ·¡½º°¡ ÀÌÁ¦´Â
JSConnectionManager ¸¦ ¸Þ¸ð¸®¿¡ ¿Ã¸®´Â ¿ªÇÒÀ» Çϵµ·Ï ¼Ò½º¸¦ ¼öÁ¤ÇÕ´Ï´Ù.
MyServletContextListener.java
package net.java_school.db.dbpool;
import javax.servlet.*;
public class MyServletContextListener implements ServletContextListener {
public void contextInitialized ( ServletContextEvent event) {
ServletContext sc = event.getServletContext();
// OracleConnectionManager dbMgr = OracleConnectionManager.getInstance();
JSConnectionManager dbMgr = JSConnectionManager.getInstance();
sc.setAttribute("dbMgr", dbMgr);
}
public void contextDestroyed ( ServletContextEvent event ) {}
}
Data Acess Object(DAO) Ŭ·¡½º ¼öÁ¤
JDBC Äڵ带 Àü´ãÇÏ´Â GulDAO Ŭ·¡½º°¡ Connection À» ¾òÀ» ¶§ JSConnectionManager¸¦ ÀÌ¿ëÇϵµ·Ï ¼Ò½º¸¦ ¼öÁ¤ÇÕ´Ï´Ù.
Connection À» ¹ÝȯÇÏ´Â Äڵ嵵 con.close(); °¡ µÇµµ·Ï ¼öÁ¤ÇÕ´Ï´Ù.
GulDAO.java
package com.dadam.board;
import java.util.*;
import net.java_school.db.dbpool.*;
import java.sql.*;
import net.java_school.util.*;
public class GulDAO {
// private OracleConnectionManager dbMgr;
private JSConnectionManager dbMgr;
public GulDAO() {
// dbMgr = OracleConnectionManager.getInstance();
dbMgr = JSConnectionManager.getInstance();>
.. Áß°£ »ý·« ..
} finally {
try {
if ( rs != null ) rs.close();
if ( pstmt != null) pstmt.close();
// if ( con != null) dbMgr.freeConnection(con);
if ( con != null) con.close();
log.close();
} catch ( SQLException e ) {}
}
.. Áß°£ »ý·« ..
