ÃֽŠ°Ô½Ã±Û(JAVA)
2017.03.21 / 18:50

Jakarta DBCP¸¦ StandAlone Application¿¡¼­ »ç¿ëÇϱâ -

Ŭ·¡½Ã
Ãßõ ¼ö 347

java application standalone org.apache.commons.dbcp.BasicDataSource


Tomcat¿¡¼­µµ ¾²ÀÌ°í ÀÖ´Â À¯¸íÇÑ DB Connection Pool LibraryÀÎ DBCP¸¦ ÀÏ¹Ý StandAlone ÇüÅÂÀÇ Application¿¡¼­¾µ ÀÏÀÌ »ý°å´Ù.



º¸Åë WAS¿¡ °°ÀÌ »ç¿ëµÇ´ÂÁö¶ó WAS¿¡¼­ÀÇ ¼¼ÆÃ(JNDI¸¦ »ç¿ë)ÇÏ´Â ¿¹Àú´Â ¸¹¾ÒÀ¸³ª ÀÏ¹Ý Application ¿¹Á¦´Â Àß º¸ÀÌÁö ¾Ê¾Æ¼­ DBCP »çÀÌÆ®ÀÇ Example ÆÄÀÏÀ» Âü°íÇÏ¿© Å×½ºÆ® ÇØ º» ´ÙÀ½¿¡ »ç¿ëÇß´Ù.(÷ºÎÆÄÀÏ ÂüÁ¶)



¿¹Á¦ ÆÄÀÏÀ» º¸¸é Å©°Ô ³× ºÎºÐÀ¸·Î ³ª´²º¼ ¼ö ÀÖ´Ù.

DBCP¸¦ ¼³Á¤ÇÏ´Â ºÎºÐ, »ç¿ëÇÏ´Â ºÎºÐ, Á¾·áÇÏ´Â ºÎºÐ, ÇöÀç »ç¿ëÇöȲÀ» º¸´Â ºÎºÐÀÌ´Ù.

°¢ ºÎºÐ¿¡ ´ëÇؼ­ ³»°¡ »ç¿ëÇÑ ¼Ò½º´Â ´ÙÀ½°ú °°´Ù.

(±âº»ÀûÀ¸·Î ÷ºÎÇÑ ¼Ò½º¸¦ Âü°í·Î ÇÏ¿© »ç¿ëÇÏ¿´À¸¹Ç·Î °°ÀÌ Âü°íÇÏ´Â°Ô ÁÁÀ»µí..)




1. DBCP ¼³Á¤ºÎºÐ


private static void setupDriver() {

try {

/*

* ÀϹÝÀûÀÎ Object PoolÀ» »ý¼ºÇÑ´Ù.

* MAX_ACTIVE : Active °¡´ÉÇÑ ÃÖ´ë object °¹¼ö(ÇÊ¿ä¿¡ µû¶ó Á¤ÇÑ´Ù.)

* GenericKeyedObjectPool.WHEN_EXHAUSTED_BLOCK : PoolÀÌ °¡µæ Â÷¸é ´ÙÀ½

* ÀÌÀü °´Ã¼°¡ return µÉ ¶§±îÁö block ÇÏ°í ±â´Ù¸°´Ù.

* MAX_WAIT : Block ½Ã ±â´Ù¸± ÃÖ´ë ½Ã°£(ms, ÇÊ¿ä¿¡ µû¶ó Á¤ÇÑ´Ù.)

* MAX_IDLE : ÃÖ´ëÇÑ À¯ÁöÇÒ idle objectÀÇ °¹¼ö. ÁöÁ¤µÈ ÀÌ»ó ³²À¸¸é Æó±âÇÑ´Ù.

* (ÇÊ¿ä¿¡ µû¶ó Á¤ÇÑ´Ù.)

*/

connPool = new GenericObjectPool(null, MAX_ACTIVE,

GenericKeyedObjectPool.WHEN_EXHAUSTED_BLOCK,

MAX_WAIT, MAX_IDLE);

/*

* ¿¬°áÇÒ DBÀÇ URL, User¸í, Password¸¦ ¼¼ÆÃÇÑ´Ù.

*/

ConnectionFactory connectionFactory =

new DriverManagerConnectionFactory(ServerConnector.getDatabaseUrl(),

ServerConnector.getMisUser(),

ServerConnector.getDatabasePassword());

/*

* ConnectionPool Factory¸¦ »ý¼ºÇÑ´Ù.

PoolableConnectionFactory(ConnectionFactory connFactory,

* ObjectPool pool, KeyedObjectPoolFactory stmtPoolFactory,

* String validationQuery, boolean defaultReadOnly, boolean defaultAutoCommit)

*/

new PoolableConnectionFactory(connectionFactory, connPool, null, null,

false, true);

/*

* Pool Driver¸¦ ·ÎµùÇÑ´Ù.(org.apache.commons.dbcp.PoolingDriver)

*/

Class.forName(POOLING_DRIVER);

/*

* DB Driver¸¦ ·ÎµùÇÑ´Ù.(oracle.jdbc.driver.OracleDriver)

*/

Class.forName(ORACLE_DRIVER);

/*

* Pooling Driver¸¦ ·ÎµùÇÑ´Ù.(jdbc:apache:commons:dbcp:)

*/

PoolingDriver driver = (PoolingDriver) DriverManager.getDriver(DRIVER_URL);

/*

* driver¸¦ µî·ÏÇÑ´Ù.(º»ÀÎÀÌ ÁöÁ¤ÇÑ À̸§)

*/

driver.registerPool(POOL_NAME, connPool);

CommonLogger.getAllLogger().info("DB Connection setup completed.");

} catch (Throwable th) {

}

}


2. DBCP »ç¿ëÇÏ´Â ¹æ¹ý

¿¬°áµÈ Connection PoolÀ» »ç¿ëÇÒ ¶§¿¡´Â ÀϹÝÀûÀÎ JDBC ÇÁ·Î±×·¥°ú °°ÀÌ »ç¿ëÇÑ´Ù



public static Connection getConnection() {

try {

/*

* °¢ º¯¼ö°¡ ÀǹÌÇÏ´Â ¹Ù´Â 1¹ø ¿¹Á¦ ÂüÁ¶

*/

return DriverManager.getConnection(DRIVER_URL + POOL_NAME);

} catch (Exception e) {

logger.error("Error getting Connection.", e);

return null;

}

}

Âü°í·Î »ç¿ëÇÏ´ø DBCP¸¦ ¸®ÅÏÇÒ °æ¿ì¿¡µµ ÀÏ¹Ý JDBC ÇÁ·Î±×·¡¹Ö ÇϵíÀÌ connection.close¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù.




3. DBCP »ç¿ë Á¾·áÇÏ´Â ºÎºÐ

´õÀÌ»ó ÇØ´ç Connection PoolÀ» »ç¿ëÇÏÁö ¾ÊÀ» ¶§¿¡´Â ´ÙÀ½°ú °°ÀÌ Á¾·áÇÑ´Ù.



public static void shutdownDriver() throws Exception {

PoolingDriver driver = (PoolingDriver) DriverManager.getDriver(DRIVER_URL);

driver.closePool(POOL_NAME);

}






4. DBCP »ç¿ëÇöȲÀ» Ãâ·ÂÇÏ´Â ºÎºÐ

1 ¹ø¿¡¼­ »ý¼ºÇÑ connPool °´Ã¼¸¦ ÀÌ¿ëÇÑ »ç¿ë·® üũ

- ÇöÀç Active »óÅ¿¡ ÀÖ´Â ConnectionÀÇ ¼ö : connPool.getNumActive()

- ÇöÀç ³î°í ÀÖ´Â(Idle) ConnectionÀÇ ¼ö : connPool.getNumIdle()

ManualPoolingDriverExample.java