JAKARTAPROJECT
JAKARTA TIPJSP TIPJSP Áú¹®&´äº¯DATABASE TIPJAVASCRIPT TIPWEBHACKING TIP±âŸ TIP
ÀÚÄ«¸£Å¸ ÇÁ·ÎÁ§Æ®
ÀÚÄ«¸£Å¸ ÇÁ·ÎÁ§Æ®
ÀÚÄ«¸£Å¸ ÇÁ·ÎÁ§Æ® ÆÁ °Ô½ÃÆÇ ÀÔ´Ï´Ù
Commons-digester Iź ±âº»Æí
GoodBug
À̹ÌÁö ½½¶óÀÌ´õ º¸±â

Commons-Digester

 

I. Digester ?

digester´Â XMLÆÄÀÏ·Î ÀúÀåµÈ Á¤º¸¸¦ java °´Ã¼¿¡ ¸ÅÇÎÇØ ÁÖ´Â APIÀÔ´Ï´Ù. ÇÏÁö¸¸ ±× ¹Ý´ë±â´ÉÀº µÇÁö ¾Ê½À´Ï´Ù.

º¸ÅëÀº XMLÆÄÀÏÀ» parsingÇÒ¶§ SAX¿Í DOMÀ» ÀÌ¿ëÇÏ¿´Áö¸¸ DOMÀº ¼º´ÉÀÌ Á» ´À¸®°í, SAX´Â DOMº¸´Ù´Â ºü¸£Áö¸¸ Äڵ尡 ³­ÀâÇØ Áý´Ï´Ù. digester´Â SAX±â¹ÝÀÌÁö¸¸ pattern ¸ÅĪÀ¸·Î ¾ÆÁÖ ½±°í ºü¸£°Ô XML ÆÄÀÏÀ» parsingÇÕ´Ï´Ù

 

¿ø·¡ digester´Â strutsÀÇ struts-config.xml Á¤º¸¸¦ ·ÎµùÇϱâÀ§ÇØ °³¹ßµÇ¾î strutsÀÇ ÇÑ ºÎºÐÀ̾ú´Âµ¥ µ¶¸³ÀûÀ¸·Î commons project·Î ºÐ¸®µÇ¾ú½À´Ï´Ù.

 

II. Áغñ¹°

digester¸¦ »ç¿ëÇϱâ À§Çؼ­´Â ´ÙÀ½ 4°¡Áö Áغñ¹°ÀÌ ÇÊ¿äÇÕ´Ï´Ù

commons-digester http://jakarta.apache.org/site/downloads/downloads_commons-digester.cgi

commons-beanutils http://jakarta.apache.org/site/downloads/downloads_commons-beanutils.cgi

commons-collections http://jakarta.apache.org/site/downloads/downloads_commons-collections.cgi

commons-logging http://jakarta.apache.org/site/downloads/downloads_commons-logging.cgi

¸¸¾à digester´Â SAX API¸¦ »ç¿ëÇϱ⠶§¹®¿¡ jdk1.4 ÀÌ»óÀÇ ¹öÁ¯ÀÌ ¾Æ´Ï¶ó¸é Xerces°°Àº XML parser°¡ ÇÊ¿äÇÕ´Ï´Ù

 

¾Æ·¡¿¹Á¦¸¦ ½ÇÇàÇÏ·Á¸é dbcp °ü·Ã ÆÄÀϵµ ÇÊ¿äÇϸç ÀÌ´Â Commons-dbcp ÆíÀ» ÂüÁ¶Çϼ¼¿ä~

 

Âü°í »çÀÌÆ®

commons-digester API http://jakarta.apache.org/commons/digester/commons-digester-1.6/docs/api/index.html

commons-digester Guide http://jakarta.apache.org/commons/digester/apidocs/org/apache/commons/digester/package-summary.html

 

III. ½ÃÀÛÇϱâ Àü¿¡..

º¸Åë digester´Â ¿©·¯ ¼³Á¤°ªµéÀ» xml¿¡ Á¤ÀÇÇØ ³õ°í À̸¦ ¾îÇø®ÄÉÀ̼ǿ¡¼­ ·ÎµåÇÏ´Â ¹æ½ÄÀ¸·Î ¸¹ÀÌ ÀÌ¿ëµË´Ï´Ù. ÀÌ °­Á¿¡¼­µµ µ¥ÀÌÅͺ£À̽º Á¤º¸¸¦ xml¿¡ Á¤ÀÇÇØ ³õ°í À̸¦ ·ÎµùÇÏ¿© µ¥ÀÌÅͺ£À̽º¿¡ ¿¬°áÇÏ´Â ¿¹Á¦¸¦ °­ÀÇÇÒ °ÍÀÔ´Ï´Ù.

½ÃÀÛÇϱâ Àü¿¡ XML¿¡ ´ëÇÑ ¾î´ÀÁ¤µµ ±âº» Áö½ÄÀÌ ÇÊ¿äÇÕ´Ï´Ù.

 

¨ç ÁÖ¿äÇÔ¼ö

´Ù¸¥ ÇÔ¼öµéµµ ¸¹À̸¸ °¡Àå ¸¹ÀÌ »ç¿ëµÇ´Â ´ÙÀ½ 4°¡Áö¸¸ µü ´«À¸·Î ÀÍÈ÷°í °©½Ã´Ù

 

-. addObjectCreate(element °æ·Î, ÀÚ¹ÙºóÅ©·¡½º) : ¾î¶² element °æ·Î¸¦ ÀÚ¹ÙºóŬ·¡½º·Î ¸ÅĪ?

-. addSetProperties(element ¼Ó¼º¸í, ÀÚ¹ÙºóÇÁ·ÎÆÛƼ¸í) : ¾î¶² element ¼Ó¼ºÀ» ÀÚ¹Ùºó º¯¼ö¿¡ ¼³Á¤?

-. addBeanPropertySetter(element °æ·Î, ÀÚ¹ÙºóÇÁ·ÎÆÛƼ¸í) : ¾î¶² element °æ·Î¸¦ ÀÚ¹Ùºó º¯¼ö¿¡ ¼³Á¤?

-. addSetNext(element °æ·Î, ÀÚ¹ÙºóÇÔ¼ö) : ¾î¶² element °æ·Î¸¦ ÀÚ¹Ùºó ÇÔ¼ö¿¡?

´ë°­Àº ÀÌ·± ¶æÀ¸·Î ¾Ë°í ³Ñ¾î °©½¬´Ù~!

±×·³ element °æ·Î°¡ ¸Õ°¡¿ä? ´ÙÀ½¿¡ ³ª¿É´Ï´Ù

 

¨è Element Matching Pattern

XML¿¡ elementµéÀÇ path¸¦ patternÀ¸·Î ÀνÄÇÏ´Â ¹æ¹ý¸¸ ÀÍÈü½Ã´Ù.

 

<a>                 -- Matches pattern "a"
    <b>             -- Matches pattern "a/b"
        <c/>        -- Matches pattern "a/b/c"
        <c/>        -- Matches pattern "a/b/c"
    </b>
    <b>             -- Matches pattern "a/b"
        <c/>        -- Matches pattern "a/b/c"
        <c/>        -- Matches pattern "a/b/c"
        <c/>        -- Matches pattern "a/b/c"
    </b>
</a>

 

À§ XMLÀ» º¸¸é element a°¡ ÃÖ»óÀ§ ·çÆ® element ÀÔ´Ï´Ù.

ÀÌ°ÍÀº "a"·Î ¸ÅĪµÇ¸ç ±×´ÙÀ½ aÀÇ ¼­ºê element b´Â "a/b" ·Î ¸ÅĪÇÕ´Ï´Ù

±×´ÙÀ½Àº .. "a/b/c".. 

½±ÁÒ?

Áï ÃÖ»óÀ§¸¸ "/"°¡ ºÙÁö ¾ÊÀ¸¸ç ±× ÀÌÇÏ´Â Æ®¸®±¸Á¶Ã³·³ "/"¸¦ ºÙ¿©ÁÖ¸é µË´Ï´Ù

 

ÀÚ ±×·³ Á»Àü¿¡ º¸¾Ò´ø ÇÔ¼öµé°ú ¿¬°üÁö¾î º¸¸é..

...

digester.addObjectCreate("a/b", B.class);

digester.addBeanPropertySetter("a/b/c", "c");

...

¿ä·¸°Ô ¾²ÀÔ´Ï´Ù.

 

IV. Digester¸¦ ÀÌ¿ëÇÏ¿© µ¥ÀÌÅͺ£À̽º Ä¿³Ø¼Ç Á¤º¸¸¦ DBCP·Î ¸ÖƼ ¼³Á¤ÇÏ¿© À¥¿¡¼­ »ç¿ëÇØ º¸ÀÚ!

ÀÚ ÀÌÁ¦ ½ÇÁúÀûÀÎ ¿¹Á¦¸¦ º¾½Ã´Ù~

 

¹«¾ùÀ» ÇÏ·Á°í ÇÏ·Á¸é mysql°ú oracle jdbcÁ¤º¸¸¦ xml ÆÄÀÏ¿¡ ±â·ÏÇØ µÎ°í À̸¦ µü Çѹø¸¸ Àо ÀÌÁ¤º¸¸¦ µ¥ÀÌÅͺ£À̽º Ä¿³Ø¼ÇÇ®ÀÎ dbcp¿¡ ¼³Á¤ÇÒ °ÍÀÔ´Ï´Ù

 

¨ç XML ÆÄÀÏ

´ÙÀ½°ú °°Àº XML ÆÄÀÏÀÌ ÀÖ½À´Ï´Ù. ÀÌ ÆÄÀÏÀº mysql°ú oracleÀ» ¿¬°áÇÏ´Â Ä¿³Ø¼Ç Á¤º¸¸¦ °¡Áö°í ÀÖ½À´Ï´Ù

ÀÌ ÆÄÀÏÀ̸§Àº C:\Tomcat 5.0\webapps\ROOT\WEB-INF\classes\config.xmlÀÔ´Ï´Ù

mysql°ú oracle µÎ°³ÀÇ jdbc poolÀ» dbcp·Î ¼³Á¤ÇÒ °ÍÀÔ´Ï´Ù.

ÀÌ ÆÄÀÏÀº Á¦°¡ ÀÓÀÇ·Î Á¤Çؼ­ ¸¸µç°Ì´Ï´Ù.

 

<?xml version="1.0" encoding="EUC-KR"?>

 

<connection-sources>
   <description>This script is a connection description</description>


   <JDBCConnectionPool name="mysql">
      <description>Mysql Connection Source</description>
      <defaultAutoCommit>true</defaultAutoCommit>
      <defaultReadOnly>false</defaultReadOnly>
      <driverClassName>org.gjt.mm.mysql.Driver</driverClassName>
      <maxActive>10</maxActive>
      <maxIdle>10</maxIdle>
      <maxWait>10000</maxWait>
      <username>unicorn</username>
      <password>iloveyou</password>
      <url>jdbc:mysql://localhost/unicorn</url>
   </JDBCConnectionPool>


   <JDBCConnectionPool name="oracle">
      <description>Oracle Connection Source</description>
      <defaultAutoCommit>true</defaultAutoCommit>
      <defaultReadOnly>false</defaultReadOnly>
      <driverClassName>oracle.jdbc.driver.OracleDriver</driverClassName>
      <maxActive>10</maxActive>
      <maxIdle>10</maxIdle>
      <maxWait>10000</maxWait>
      <username>unicorn</username>
      <password>iloveyoutoo</password>
      <url>jdbc:oracle:thin:@localhost:1521:unicorn</url>
   </JDBCConnectionPool>


</connection-sources>

 

¨è web.xml

À¥ ¹èÄ¡ÆÄÀÏ¿¡ ÀÇÇØ db.ConnectionInitialize.java¸¦ Ãʱ⠼­ºí¸´ ÄÁÅ×ÀÌ³Ê ·Îµù½Ã ½ÇÇàÇÏ¿© XMLÁ¤º¸¸¦ DBCP·Î ¼¼ÆÃÇÒ °ÍÀÔ´Ï´Ù

config.xml ÆÄÀÏ°æ·Î¸¦ config ÆĶó¹ÌÅÍ¿¡ ¼³Á¤ÇÕ´Ï´Ù

 

<?xml version="1.0" encoding="ISO-8859-1"?>

<!DOCTYPE web-app
    PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
    "http://java.sun.com/dtd/web-app_2_3.dtd">

<web-app>

  <servlet>
     <servlet-name>connectioninitialize</servlet-name>
     <servlet-class>db.ConnectionInitialize</servlet-class>
     <init-param>
        <param-name>config</param-name>
        <param-value>C:\Tomcat 5.0\webapps\ROOT\WEB-INF\classes\config.xml</param-value>
     </init-param>
     <load-on-startup>1</load-on-startup>
  </servlet>
   
</web-app>

 

¨é db.jdbc.ConnectionSources.java

XML ÆÄÀÏ¿¡¼­µµ º¸¸é ¾Ë¼öÀÖµíÀÌ connection-sources ¼­ºê¿ä¼ÒÀÎ description°ú JDBCConnectionPoolÀ» ÀúÀåÇÏ´Â °´Ã¼ÀÔ´Ï´Ù. º¯¼ö¸¦ ´«¿©°Ü º¾½Ã´Ù

 

package db.jdbc;

import java.util.HashMap;

public class ConnectionSources {

	private String description;
	private HashMap source = new HashMap();
	
	public void setDescription(String description) {
		this.description = description;
	}
	
	public void addSource(JDBCConnectionPool source) {
		this.source.put(source.getName(), source);
	}
	
	public String getDescription() {
		return this.description;
	}
	
	public JDBCConnectionPool getSource(String name) {
		return (JDBCConnectionPool)this.source.get(name);
	}
}

 

addSource ÇÔ¼ö´Â ¿©·¯ JDBCConnectionPool Á¤º¸¸¦ ConnectionSourcec ÀÇ source¿¡ ÀúÀåÇÕ´Ï´Ù. ÀÌ ÇÔ¼ö´Â ¹Ø¿¡¼­ ´Ù½Ã ³ª¿À´Ï ´«¿©°Ü º¾½Ã´Ù

 

¨ê db.jdbc.JDBCConnectionPool.java

º¯¼ö¿¡ ´ëÇØ ´Ü¼øÈ÷ setter, getter·Î ÀÌ·ç¾îÁ® ÀÖ½À´Ï´Ù.

XML ÆÄÀÏÀ» º¸¸éJDBCConnectionPool ÀÇ ¼­ºê elementµéÀ» ÀúÀåÇÏ´Â °´Ã¼À̸ç XMLÆÄÀÏ°ú  ÀÌ java º¯¼ö¸íµé°ú ¸ÅĪµÇ´Â°ÍÀ» ¾Ë¼ö ÀÖÀ»°Ì´Ï´Ù.

´ë°­ °¨ÀÌ ¿À³ª¿ä? ¤Ñ.¤Ñ? °¨ÁºÁ¾²~?

 

package db.jdbc;

public class JDBCConnectionPool {

	private String name;
	private String description;
	private boolean defaultAutoCommit;
	private boolean defaultReadOnly;
	private String driverClassName;
	private int maxActive;
	private int maxIdle;
	private int maxWait;
	private String username;
	private String password;
	private String url;
	
//for debug public void print() { String toString = "name : "+name+"\n"+ "description : "+description+"\n"+ "defaultAutoCommit : "+defaultAutoCommit+"\n"+ "defaultReadOnly : "+defaultReadOnly+"\n"+ "driverClassName : "+driverClassName+"\n"+ "maxActive : "+maxActive+"\n"+ "maxIdle : "+maxIdle+"\n"+ "maxWait : "+maxWait+"\n"+ "username : "+username+"\n"+ "password : "+password+"\n"+ "url : "+url; System.out.println(toString); } public void setName(String name) { this.name = name; } public void setDescription(String description) { this.description = description; } public void setDefaultAutoCommit(boolean defaultAutoCommit) { this.defaultAutoCommit = defaultAutoCommit; } public void setDefaultReadOnly(boolean defaultReadOnly) { this.defaultReadOnly = defaultReadOnly; } public void setDriverClassName(String driverClassName) { this.driverClassName = driverClassName; } public void setMaxActive(int maxActive) { this.maxActive = maxActive; } public void setMaxIdle(int maxIdle) { this.maxIdle = maxIdle; } public void setMaxWait(int maxWait) { this.maxWait = maxWait; } public void setUsername(String username) { this.username = username; } public void setPassword(String password) { this.password = password; } public void setUrl(String url) { this.url = url; } public String getName() { return this.name; } public String getDescription() { return this.description; } public boolean getDefaultAutoCommit() { return this.defaultAutoCommit; } public boolean getDefaultReadOnly() { return this.defaultReadOnly; } public String getDriverClassName() { return this.driverClassName; } public int getMaxActive() { return this.maxActive; } public int getMaxIdle() { return this.maxIdle; } public int getMaxWait() { return this.maxWait; } public String getUsername() { return this.username; } public String getPassword() { return this.password; } public String getUrl() { return this.url; } }

 

¨ë db.ConnectionInitialize.java

ÀÚ ÀÌÁ¦ ¿©±â°¡ ÇÙ½É Å¬·¡½ºÀÔ´Ï´Ù. À§ºÎºÐÀÌ ¸ðµÎÀÌÇØ°¡ µÇ¾úÀ¸¸é ´ÙÀ½ ¼Ò½ºÄڵ带 »ìÆ캾½Ã´Ù

web.xml¿¡¼­ Á¤ÀÇÇÑ config.xmlÀ» ·ÎµùÇÏ¿© ÆĽÌÇÏ°í ±× Á¤º¸¸¦ DBCP¿¡ ¼³Á¤ÇÕ´Ï´Ù

mysql°ú oracle µÎ°³ÀÇ jdbc¸¦ ¼³Á¤Çϵµ·Ï xml¿¡ Á¤ÀÇÇÏ¿´¾ú½À´Ï´Ù.

 

package db;

import java.sql.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;

import org.apache.commons.pool.ObjectPool;
import org.apache.commons.pool.impl.GenericObjectPool;
import org.apache.commons.dbcp.ConnectionFactory;
import org.apache.commons.dbcp.PoolingDriver;
import org.apache.commons.dbcp.PoolableConnectionFactory;
import org.apache.commons.dbcp.DriverManagerConnectionFactory;

import org.apache.commons.digester.Digester;
import java.io.*;
import org.xml.sax.SAXException;

import db.jdbc.ConnectionSources;
import db.jdbc.JDBCConnectionPool;

public class ConnectionInitialize extends HttpServlet {

	public void init() throws ServletException {

		String config = null;
		// web.xmlÀÇ ¹èÄ¡½ºÅ©¸³Æ®ÀÇ ÆĶó¹ÌÅÍÀ̸§À» °¡Á®¿Â´Ù
		Enumeration names = getServletConfig().getInitParameterNames();
		do {
			if(!names.hasMoreElements())
			break;
			String name = (String)names.nextElement();
			String value = getServletConfig().getInitParameter(name).trim();

			System.out.println(name+" : "+value);

			// config¿¡ Á¤ÀÇµÈ XML ÆÄÀÏÀ» °¡Á®¿Â´Ù
			if (name.startsWith("config"))
 				config = value;
		} while(true);

		//Digester¸¦ »ý¼ºÇÏ°í
		Digester digester = new Digester();
		//XML À¯È¿¼ºÀ» °ËÁõÇÒ°ÍÀΰ¡?
		digester.setValidating(false);

		//connection-sources ¿ä¼Ò¸¦ ConnectionSources.class °´Ã¼¿¡ ÀúÀåÇÏ°Ú´Ù
		digester.addObjectCreate("connection-sources",
		                          ConnectionSources.class);

		//connection-sources/description ¿ä¼Ò¸¦
		//ConnectionSources.classÀÇ description º¯¼ö¿¡ ÀúÀåÇÏ°Ú´Ù
		digester.addBeanPropertySetter("connection-sources/description",
						"description");

		//connection-sources/JDBCConnectionPool ¿ä¼Ò¸¦ JDBCConnectionPool.class °´Ã¼¿¡ÀúÀåÇÏ°Ú´Ù
		digester.addObjectCreate("connection-sources/JDBCConnectionPool",
		                         db.jdbc.JDBCConnectionPool.class);

		//connection-sources/JDBCConnectionPool ¿ä¼ÒÀÇ name ¼Ó¼ºÀ»
		//JDBCConnectionPool.classÀÇ name º¯¼ö¿¡ ÀúÀåÇÏ°Ú´Ù
		digester.addSetProperties("connection-sources/JDBCConnectionPool", "name", "name");

		//connection-sources/JDBCConnectionPool/description À»
		//JDBCConnectionPool.class °´¿¡ÀÇ description º¯¼ö¿¡ ÀúÀåÇÏ°Ú´Ù
		digester.addBeanPropertySetter("connection-sources/JDBCConnectionPool/description",
                                       "description");

		digester.addBeanPropertySetter("connection-sources/JDBCConnectionPool/defaultAutoCommit",
                                       "defaultAutoCommit");
		digester.addBeanPropertySetter("connection-sources/JDBCConnectionPool/defaultReadOnly",
                                       "defaultReadOnly");
		digester.addBeanPropertySetter("connection-sources/JDBCConnectionPool/driverClassName",
                                       "driverClassName");
		digester.addBeanPropertySetter("connection-sources/JDBCConnectionPool/maxActive",
                                       "maxActive");
		digester.addBeanPropertySetter("connection-sources/JDBCConnectionPool/maxIdle",
                                       "maxIdle");
		digester.addBeanPropertySetter("connection-sources/JDBCConnectionPool/maxWait",
                                       "maxWait");
		digester.addBeanPropertySetter("connection-sources/JDBCConnectionPool/username",
                                       "username");
		digester.addBeanPropertySetter("connection-sources/JDBCConnectionPool/password",
                                       "password");
		digester.addBeanPropertySetter("connection-sources/JDBCConnectionPool/url", "url");

		//connection-sources/JDBCConnectionPoolÀ»
		//ConnectionResources.classÀÇ addSource¸¦ ÀÌ¿ëÇÏ¿© ¹Ýº¹ÀûÀ¸·Î Ãß°¡ÇÏ°Ú´Ù
		digester.addSetNext("connection-sources/JDBCConnectionPool", "addSource");

		try {
			File file = new File(config);
			//digester ÆÄ½Ì ¹× °á°ú ¸®ÅÏ
			ConnectionSources connectionSources =
                                                             (ConnectionSources)digester.parse(file);

			System.out.println(connectionSources.getDescription());
			JDBCConnectionPool mysql = connectionSources.getSource("mysql");
			mysql.print(); //µð¹ö±ë
			JDBCConnectionPool oracle = connectionSources.getSource("oracle");
			oracle.print(); //µð¹ö±ë

			//À̺κРÀÌÇÏ´Â Commons-dbcp ºÎºÐÀ» ÂüÁ¶Çϱ⠹ٶõ´Ù
			setupDriver(mysql.getName(),
				mysql.getDriverClassName(),
				mysql.getUrl(),
				mysql.getUsername(),
				mysql.getPassword(),
				mysql.getDefaultAutoCommit(),
				mysql.getDefaultReadOnly(),
				mysql.getMaxActive(),
				mysql.getMaxIdle(),
				mysql.getMaxWait());

			setupDriver(oracle.getName(),
				oracle.getDriverClassName(),
				oracle.getUrl(),
				oracle.getUsername(),
				oracle.getPassword(),
				oracle.getDefaultAutoCommit(),
				oracle.getDefaultReadOnly(),
				oracle.getMaxActive(),
				oracle.getMaxIdle(),
				oracle.getMaxWait());

		} catch (FileNotFoundException filenotfoundexception) {
			System.out.println("Config file not found");
			filenotfoundexception.printStackTrace();
		} catch (Exception exception) {
			exception.printStackTrace();
		}
	}

	public void setupDriver(String poolName,
			String driverClassName,
			String url,
			String username,
			String password,
			boolean defaultAutoCommit,
			boolean defaultReadOnly,
			int maxActive,
			int maxIdle,
			long maxWait) throws Exception {
		try {
		    Class.forName(driverClassName);
		} catch (ClassNotFoundException classnotfoundexception) {
			System.out.println(driverClassName+" is not found");
		    classnotfoundexception.printStackTrace();
		    throw classnotfoundexception;
		}
		
		GenericObjectPool connectionPool = new GenericObjectPool(null);
		connectionPool.setMaxActive(maxActive);
		connectionPool.setMaxIdle(maxIdle);
		connectionPool.setMaxWait(maxWait);
		
		ConnectionFactory connectionFactory
			= new DriverManagerConnectionFactory(url, username, password);
		
		PoolableConnectionFactory poolableConnectionFactory
			= new PoolableConnectionFactory(connectionFactory,
		                                   connectionPool,
		                                   null,
		                                   null,
		                                   defaultReadOnly,
		                                   defaultAutoCommit);
		
		Class.forName("org.apache.commons.dbcp.PoolingDriver");
		PoolingDriver driver = (PoolingDriver) DriverManager.getDriver("jdbc:apache:commons:dbcp:");
		
		driver.registerPool(poolName,connectionPool);    
	}
}

 

¨ì ±×·³ ÀÌ·¸°Ô ¼³Á¤ÇÑ DBCP´Â ¾î¶»°Ô »ç¿ëÇÒ±î¿ä?

ÀÌÀü°­Á¿¡¼­ º¸¾Ò´ø ConnectionContext.java¿Í ConnectionResource.java¸¦ ´Ù½Ã »ç¿ëÇغ¾½Ã´Ù

package db;

public interface ConnectionContext {
	public java.sql.Connection getConnection();
	public void rollback();
	public void commit();
	public void release();
}

 

ConectionContext¸¦ ±¸ÇöÇÑ ConnectionResource´Â Ç®À̸§À» ¹Þ¾Æ ó¸®Çϴ°ÍÀ¸·Î ¼öÁ¤ÇÏ¿´½À´Ï´Ù

package db;

import java.sql.Connection;
import java.sql.DriverManager;
import javax.sql.DataSource;

public class ConnectionResource implements ConnectionContext {
	private Connection connection = null;
	private boolean transaction = false;

    public ConnectionResource(String poolName) throws Exception {
    	init(false, poolName);	
    }
    
    public ConnectionResource(boolean transaction, String poolName) throws Exception {
    	init(transaction, poolName);
    }
    
    public void init(boolean transaction, String poolName) throws Exception {
    	this.transaction = transaction;
    	connection = DriverManager.getConnection("jdbc:apache:commons:dbcp:"+poolName);
if (transaction) connection.setAutoCommit(false); if (connection == null) throw new Exception("fail to get connection"); } public Connection getConnection() { return connection; } public void rollback() { if (transaction) { if (connection != null) try { connection.rollback(); } catch (Exception e) {} } } public void commit() { if (transaction) { if (connection != null) try { connection.commit(); } catch (Exception e) {} } } public void release() { { if (connection != null) { if (transaction) { try { connection.setAutoCommit(true); } catch (Exception e) {} } try { connection.close(); } catch (Exception e) {} }     } }

 

¨í jsp ÆÄÀÏ

¸¶Áö¸·À¸·Î ConnectionContext´Â Ç®À̸§°ú ÇÔ²² »ç¿ëÇÏ¸é µÇ°Ú³×¿ä

<%@ page contentType="text/html;charset=EUC_KR" %>
<%@ page import="java.sql.*,db.*" %>

<%

ConnectionContext mysqlContext = new ConnectionResource("mysql");
// ȤÀº ConnectionContext oracleContext = new ConnectionResource("oracle");


Connection connection = null;

 

try {


    connection = mysqlContext.getConnection();
    out.println(connection);

 

} catch (Exception exception) {
    exception.printStackTrace();
} finally {
    if (connection != null) try { mysqlContext.release(); } catch (Exception exception) {}
}

%>

 

DBCP ºÎºÐÀº ÀÌÀü °­ÁÂÀÎ Commons-dbcp (http://www.jakartaproject.com/article/jakarta/1111890409958 )ºÎºÐÀ» ÂüÁ¶Çϼ¼¿ä~

 

ps. ÈÞ =3 ´Ù½è´ç ^_^

     Èì.. ½±°Ô¾´´Ù°í À̸® Àú¸® ÇÏ·çÁ¾ÀÏ ½è´Âµ¥ ¼³¸íÀÌ ¸¹ÀÌ ºÎÁ·ÇÑ°Í °°³×¿ä

     ±×¹Û¿¡ »çÇ×Àº ¾Ë¾Æ¼­ ã¾Æº¸±â~!

     digester IIź¿¡¼­´Â xml ¼³Á¤ÆÄÀϷκÎÅÍ ±ÔÄ¢À» Àоî xmlÀ» ÆĽÌÇÏ´Â ¹æ¹ýÀ» ¾Ë¾Æº¸°Ú½À´Ï´Ù~

 

=============================================

º»¹®¼­´Â ÀÚÀ¯·Ó°Ô ¹èÆ÷/º¹»ç ÇÒ¼ö ÀÖÁö¸¸

À̹®¼­ÀÇ ÀúÀÚ¿¡ ´ëÇÑ ¾ð±ÞÀ» »èÁ¦ÇÏ½Ã¸é ¾ÈµË´Ï´Ù

ÀúÀÚ : GoodBug (unicorn@jakartaproject.com)

ÃÖÃÊ : http://www.jakartaproject.com 

=============================================

2007-05-23 09:33:44
211.189.124.***

 

ÁÁÀº»ý°¢ ^^

÷ºÎÆÄÀÏ (ÃÑ 7°³)
  1. ConnectionResource.java 1.39 KB (167 ´Ù¿î·Îµå)
  2. JDBCConnectionPool.java 2.5 KB (186 ´Ù¿î·Îµå)
  3. ConnectionSources.java 542 Bytes (170 ´Ù¿î·Îµå)
  4. ConnectionInitialize.java 5.13 KB (238 ´Ù¿î·Îµå)
  5. ConnectionContext.java 175 Bytes (143 ´Ù¿î·Îµå)
  6. config.xml 1.15 KB (149 ´Ù¿î·Îµå)
  7. web.xml 657 Bytes (155 ´Ù¿î·Îµå)
10Á¡ (3¸í)
µ¡±Û 4°³ | ÅÂ±× 2°³ | °ü·Ã±Ûº¸±â
ű×ÀÔ·Â
½±Ç¥(,)±¸ºÐÀ¸·Î Çѹø¿¡ ¿©·¯ ű׸¦ ÀÔ·ÂÇÒ¼ö ÀÖ½À´Ï´Ù
commons (16) digester (1)
love
(0) (0)
¿ì¾Ó... °¨¼Ý... (²Ù¹÷) ±Ùµð... ÂÍ ¾î·Æ¶¥... ´Ù½Ã Çѹø ÀÐ¾î ºÁ¾ß¡... ÀÌÇØÇÏ´Â ±×³¯±î...Áö.. ¾ÆÀÚ¾ÆÀÚ...
222.109.21.*** 2005-04-07 12:50:21
¹Ì¸®³»
(0) (0)
°¨»ç. ¾ÆÁÖ Å« µµ¿ò µÆ½À´Ï´Ù^^
202.211.32.*** 2005-12-09 17:35:24
ºØ³ÉºØ
(0) (0)
¼³¸íÀÌ ½±³×¿ä. °¨»çÇÕ´Ï´Ù.=3
61.73.70.*** 2006-02-23 19:49:29
wonnabeyours
(0) (0)

ÁÁÀº Á¤º¸ °¨»çÇÕ´Ï´Ù... µÎ°íµÎ°í º¸·Á°í Á¦ ³×À̹ö ºí·Î±×¿¡ ÆÛ°©´Ï´Ù..

http://blog.naver.com/post/postList.jsp?blogId=wonnabeyours

º¸½Ã°í Ȥ½Ã ÀúÀ۱ǿ¡ ¹®Á¦°¡ ÀÖ´Ù¸é ¾Ë·ÁÁÖ¼¼¿ä..

°¨»çÇÕ´Ï´Ù..

211.236.162.*** 2006-09-12 11:07:56
À̸§ ºñ¹Ð¹øÈ£
ÀÚÄ«¸£Å¸ ÇÁ·ÎÁ§Æ®
ÀÚÄ«¸£Å¸ ÇÁ·ÎÁ§Æ® ÆÁ °Ô½ÃÆÇ ÀÔ´Ï´Ù
! ¹øÈ£ Á¦¸ñ ±Û¾´ÀÌ ÀÏÀÚ Á¶È¸
Hierarchy of the Apache Software Foundation GoodBug 2005-10-14 10,814
Jakarta Project °­Á °Ô½ÃÆÇÀÔ´Ï´Ù 8 GoodBug 2005-04-03 11,701
44 Log4J log4j¿¡¼­ e.printStackTrace() ¸Þ½ÃÁö¸¦ log¿¡ ³²±â´Â ¹æ¹ý 1 kaiser 2008-10-22 17,613
43 DBUtils DBUtils¿¡¼­ Clob »ç¿ëÇϱâ 3 1 GoodBug 2007-08-28 10,633
42 Spring Spring ¼³Á¤ ÆÄÀÏ ·Îµù 1 GoodBug 2007-07-16 11,317
41 POI POIÀÇ HSLF¸¦ ÀÌ¿ëÇÏ¿© PowerPoint ¹®¼­¸¦ ÀоÀÚ 2 GoodBug 2007-05-28 14,910
40 POI POIÀÇ HWPF¸¦ ÀÌ¿ëÇÏ¿© MS WORD¹®¼­¸¦ ÀоÀÚ 2 GoodBug 2007-05-28 16,839
39 Validator Validator ¼Ó¼ºµé 1 GoodBug 2007-05-11 10,404
38 dd Commons-Fileupload 1.2 1 2 GoodBug 2007-04-23 15,345
37 Apache Apache2 + Tomcat5.5 + mod_jk 4 ¹ÙÀÌ·¯½ºô¸国 2007-01-29 11,066
36 DBUtils DBUtils¿¡¼­ number ŸÀÔÀÇ Ä÷³ÀÌ intÇüÀ¸·Î ¾È³Ñ¾î¿Ã¶§.. 3 1 GoodBug 2006-06-28 10,755
35 ÈìÈì À§ÇèÇÑ static Logger Çʵå... 2 1 ¼­¿¬¾Æºü 2006-03-16 10,113
34 Installing Tomcat with commons-daemon (jsvc) GoodBug 2006-01-08 9,067
33 commons Commons DbUtils ¸î°¡Áö ¿¹Á¦ 3 2 GoodBug 2005-11-17 15,221
32 commons Jakarta Commons Net ¿¡¼­ FTP »ç¿ë½Ã ¸ñ·ÏÀÌ ¾Èº¸ÀÏ °æ¿ì 2 GoodBug 2005-11-15 21,776
31 listFiles() ¿¡¼­ null À» ¹Ýȯ ÃßÀû.. ½Å¸¸µÎ 2008-11-11 11,866
30 commons ¸ñ·ÏÀÌ ¾Èº¸ÀÏ °æ¿ì ÇØ°á±â Iź 1 2 GoodBug 2005-12-23 15,932
29 POI POI·Î ¿¢¼¿ÆÄÀÏ ÀÐÀ»¶§, Invalid header signature ¿¡·¯ 1 GoodBug 2005-11-12 16,540
28 log4j log4j, JSP¿¡¼­ ¿øÇÏ´Â Appender °ñ¶ó¾²±â 1 GoodBug 2005-11-07 13,894
27 commons Commons-Email~ 7 2 GoodBug 2005-10-13 17,860
copyright 2005-2024 by Unicorn