JBoss¿¡¼ DataSource ¼³Á¤ ÀýÂ÷
JBoss¿¡¼ DataSource ¼³Á¤ ÀýÂ÷
(1) JDBC ¶óÀ̺귯¸® ¼³Ä¡
ÇØ´ç DB º¥´õÀÇ JDBC ¶óÀ̺귯¸®¸¦ $JBOSS_HOME/server/<instance>/lib µð·ºÅ͸®¿¡ º¹»çÇÑ´Ù.
Àý´ë·Î ¾îÇø®ÄÉÀ̼ǰú ÇÔ²² ÆÐŰ¡Çؼ´Â ¾ÈµÈ´Ù. ¿¹¸¦ µé¾î ojdbc14.jar¸¦ WEB-INF/lib¿¡ µÎ¸é ´Ù¾çÇÑ ¿¡·¯¸¦ °æÇèÇÒ ¼ö ÀÖ´Ù.
(2) xxx-ds.xml ÀÛ¼º ¹× µðÇ÷ÎÀÌ
JBoss¿¡¼ µ¥ÀÌÅͼҽº ¼³Á¤Àº ÆÄÀϸíÀÌ -ds.xml·Î ³¡³ª´Â XML ÆÄÀÏÀ» ÀÛ¼ºÇØ deploy µð·ºÅ͸®¿¡ µÎ¸é µÈ´Ù. $JBOSS_HOME/docs/examples/jca µð·ºÅ͸®¸¦ º¸¸é º¥´õº° µ¥ÀÌÅͼҽº ¼³Á¤ ¿¹Á¦µéÀ» º¼ ¼ö ÀÖ´Ù.
ÀÌÁ¦ ¿¹Á¦¸¦ ÅëÇØ ¼³Á¤Ç׸ñµéÀ» »ìÆ캻´Ù.
$JBOSS_HOME/server/default/deploy/example-ds.xml |
<?xml version="1.0" encoding="UTF-8"?>
|
¸ÕÀú root element°¡ <datasources>·Î º¹¼öÇüÀÎ°Ô ´«¿¡ ¶ç´Âµ¥ ±ÛÀÚ ±×´ë·Î ÇϳªÀÇ -ds.xml ÆÄÀÏ Çϳª¿¡ ¿©·¯ °³ÀÇ µ¥ÀÌÅͼҽº¸¦ ¼³Á¤ÇÒ ¼ö ÀÖ´Ù.
±× ÇÏÀ§¿¡ <local-tx-datasource>°¡ ¼±¾ðµÇ¾î Àִµ¥ JBoss¿¡¼´Â Æ®·£Àè¼Ç À¯Çü¿¡ µû¶ó <local-tx-datasource>, <xa-datasource>, <no-tx-datasource>·Î element ·¹º§¿¡¼ ±¸ºÐÇؼ µ¥ÀÌÅͼҽº¸¦ ¼³Á¤ÇÑ´Ù. ºÐ»ê Æ®·£Àè¼Ç 󸮸¦ À§ÇØ XA¸¦ »ç¿ëÇÑ´Ù¸é <xa-datasource>¸¦, ±×·¸Áö ¾Ê´Ù¸é <local-tx-datasource>¸¦ »ç¿ëÇÏ¸é µÈ´Ù.
±×·¯¸é <local-tx-datasource>·Î ¼±¾ðÇÒ ¶§ÀÇ ±âº» ¼³Á¤ Ç׸ñºÎÅÍ »ìÆ캻´Ù.
±âº» ¼³Á¤ Ç׸ñ
1) <driver-class>
À§ÀÇ example-ds.xml¿¡¼¿Í °°ÀÌ <local-tx-datasource>¸¦ »ç¿ëÇÒ °æ¿ì¿¡´Â java.sql.Driver ÀÎÅÍÆäÀ̽º¸¦ ±¸ÇöÇÑ µå¶óÀ̹ö Ŭ·¡½º¸¦ <driver-class>¿¡ ¼³Á¤ÇÑ´Ù.
Oracle 8i | oracle.jdbc.driver.OracleDriver |
Oracle 9i/10g | oracle.jdbc.OracleDriver |
Informix | com.informix.jdbc.IfxDriver |
MS SQL | com.microsoft.jdbc.sqlserver.SQLServerDriver |
MySQL | com.mysql.jdbc.Driver |
2) <connection-url>
DBÁ¢¼Ó URLÀ» ¸í½ÃÇÑ´Ù.
Oracle thin | jdbc:oracle:thin:@host:port:sid |
Oracle thin (description) | jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=host)(PORT=port))(CONNECT_DATA=(SERVICE_NAME=sid))) |
Oracle oci | jdbc:oracle:oci:@sid |
Informix | jdbc:informix-sqli://host:port/dbname:INFORMIXSERVER=servername |
MS SQL | jdbc:microsoft:sqlserver://host:port;DatabaseName=dbname |
MySQL | jdbc:mysql://host:port/dbname |
3) <jndi-name>°ú <use-java-context>
JNDI¿¡¼ µ¥ÀÌÅͼҽº¸¦ ãÀ» ¶§ »ç¿ëÇÒ À̸§À¸·Î jdbc/xxx Çü½ÄÀ» »ç¿ëÇÏ´Â °ÍÀ» ±ÇÀåÇÑ´Ù.
ÁÖÀÇÇÒ Á¡Àº µ¥ÀÌÅͼҽº´Â JNDI¿¡ ¹ÙÀεùµÉ ¶§ java: ³×ÀÓ½ºÆäÀ̽º·Î ¹ÙÀεùµÈ´Ù´Â Á¡ÀÌ´Ù. À̶§¹®¿¡ Context.lookup()½Ã¿¡ java:/jdbc/xxx¿Í °°ÀÌ ¸í½ÃÇØ¾ß µ¥ÀÌÅͼҽº¸¦ ãÀ» ¼ö ÀÖ´Ù.
¸¸¾à WebLogic¿¡¼ ó·³ globalÇÏ°Ô ¹ÙÀεùÇÏ·Á¸é <use-java-context>false</use-java-context>·Î ¼³Á¤ÇÏ¸é µÈ´Ù. ÀÌ ¶§´Â Context.lookup()½Ã¿¡ jdbc/xxx·Î ¸í½ÃÇÑ´Ù.
4) <user-name>°ú <password>
DB Á¢¼Ó °èÁ¤°ú Æнº¿öµå¸¦ ¸í½ÃÇÑ´Ù. Æнº¿öµå¸¦ µû·Î ¾ÏÈ£ÈÇÒ ÇÊ¿ä°¡ ÀÖ´Ù¸é ÀÌÀü Æ÷½ºÆ®¸¦ Âü°íÇÑ´Ù.
5) <transaction-isolation>
Æ®·£Àè¼Ç °Ý¸® ·¹º§À» ¼³Á¤ÇÑ´Ù. TRANSACTION_NONE, TRANSACTION_READ_UNCOMMITTED, TRANSACTION_READ_COMMITTED, TRANSACTION_REPEATABLE_READ,
TRANSACTION_SERIALIZABLE Áß¿¡¼ DB¿¡¼ Áö¿øÇÏ´Â ·¹º§À» ¼³Á¤ÇÒ ¼ö ÀÖ´Ù.
Connection Pool Å©±â ¼³Á¤
1) <min-pool-size>
Pool¿¡ À¯ÁöÇÒ ÃÖ¼Ò connection °³¼ö·Î ±âº»°ªÀº 0. ±âº»ÀûÀ¸·Î ÃÖÃÊ getConnection() È£ÃâÀü±îÁö ¹°¸®ÀûÀÎ db connectionÀº ¸¸µé¾îÁöÁö ¾Ê´Â´Ù. µ¥ÀÌÅͼҽº µðÇ÷ÎÀ̽ÿ¡ <min-pool-size>¸¸Å connectionÀ» ¸¸µé°íÀÚ ÇÑ´Ù¸é <prefill>true</prefill>À» Ãß°¡·Î ¼³Á¤ÇØÁØ´Ù.
2) <max-pool-size>
ÃÖ´ë connection °³¼ö¸¦ ¼³Á¤ÇÑ´Ù. ±âº»°ªÀº 20.
°¢Á¾ Timeout ¼³Á¤
1) <blocking-timeout-millis>
¸ðµç connectionÀÌ »ç¿ëÁßÀÏ ¶§ getConnection()¿¡¼ connectionÀÌ ¹ÝȯµÉ ¶§±îÁö ±â´Ù¸± ½Ã°£À¸·Î ms ´ÜÀ§ÀÌ´Ù.
2) <idle-timeout-minute>
pool¿¡¼ ÀÏÁ¤ ½Ã°£µ¿¾È »ç¿ëµÇÁö ¾Ê°í ÀÖ´Â connectionÀ» ´Ýµµ·Ï ¼³Á¤ÇÒ ¼ö Àִµ¥ ±× ½Ã°£À» ºÐ ´ÜÀ§·Î ¼³Á¤ÇÑ´Ù.
3) <query-timeout>
query¿¡ ´ëÇÑ ÀÀ´äÀ» ±â´Ù¸®¸ç ´ë±âÇÒ ¼ö ÀÖ´Â ½Ã°£À» ÃÊ ´ÜÀ§·Î ¼³Á¤ÇÑ´Ù. Æ®·£Àè¼Ç TimeoutÀÌ ¼³Á¤µÇ¾î ÀÖ´Â °æ¿ì¿¡´Â <set-tx-query-timeout>true</set-tx-query-timeout>À» Ãß°¡·Î ¼³Á¤ÇØ Æ®·£Àè¼Ç timeout±îÁö ³²¾Æ ÀÖ´Â ½Ã°£À» query timeoutÀ¸·Î ÀÚµ¿À¸·Î ¼³Á¤ÇÒ ¼ö ÀÖ´Ù.
Connection ¿¡·¯ ó¸® ¼³Á¤
1) <check-valid-connection-sql>
getConnection()½Ã pool¿¡¼ ¾îÇø®ÄÉÀ̼ǿ¡ connectionÀ» ¹ÝȯÇϱâ Àü¿¡ connection »óŸ¦ üũÇϴµ¥ »ç¿ëÇÒ SQLÀ» ¸í½ÃÇÑ´Ù.
ex) SELECT 1 FRORM DUAL
2) <valid-connection-checker-class-name>
getConnection()½Ã pool¿¡¼ ¾îÇø®ÄÉÀ̼ǿ¡ connectionÀ» ¹ÝȯÇϱâ Àü¿¡ connection »óŸ¦ üũÇÏ´Â DB º¥´õº° Ŭ·¡½º¸¦ ¸í½ÃÇÑ´Ù. Oracle, MySQL¿¡ ´ëÇÑ ±¸Çöü°¡ Á¦°øµÈ´Ù
Oracle | org.jboss.resource.adapter.jdbc.vendor.OracleValidConnectionChecker |
MySQL | org.jboss.resource.adapter.jdbc.vendor.MySQLValidConnectionChecker |
3) <exception-sorter-class-name>
SQLException ¹ß»ý½Ã connection error¸¦ °ËÃâÇϴµ¥ »ç¿ëÇÒ Å¬·¡½º¸¦ ¸í½ÃÇÑ´Ù. ¿¹¿Ü°¡ Connection ¹®Á¦·Î ¹ß»ýÇÑ °æ¿ì ÇØ´ç connectionÀ» closeÇÏ°Ô µÈ´Ù.
Oracle | org.jboss.resource.adapter.jdbc.vendor.OracleExceptionSorter |
MySQL | org.jboss.resource.adapter.jdbc.vendor.MySQLExceptionSorter |
Sybase | org.jboss.resource.adapter.jdbc.vendor.SybaseExceptionSorter |
Informix | org.jboss.resource.adapter.jdbc.vendor.InformixExceptionSorter |
4) <background-validation>
connection »óŸ¦ ¸Å¹ø getConnection()½Ã¸¶´Ù üũÇÏÁö ¾Ê°í ÀÏÁ¤ÁÖ±â·Î ¹é±×¶ó¿îµå¿¡¼ üũÇÒÁö ¿©ºÎ¸¦ ¼³Á¤ÇÑ´Ù. ±âº»°ªÀº falseÀÌ´Ù.
5) <background-validation-minutes>
connection »óŸ¦ ¹é±×¶ó¿îµå·Î üũÇϵµ·Ï ¼³Á¤ÇÑ °æ¿ì ±× Áֱ⸦ ºÐ ´ÜÀ§·Î ¼³Á¤ÇÑ´Ù. ±âº»°ªÀº 10ºÐ
ÃÖÀûÈ °ü·Ã ¼³Á¤ Ç׸ñ
1) <prepared-statement-cache-size>
PreparedStatement¸¦ ij½¬Çؼ ¼º´É Çâ»óÀ» ²ÒÇÑ´Ù. ±âº»°ªÀº 0ÀÌ´Ù. ÀÌ °ªÀÌ Oracle¿¡ ¼³Á¤µÈ open_cursor °ª º¸´Ù Å©¸é ORA-01000 "maximum open cursors exceeded"°¡ ¹ß»ýÇÒ ¼ö ÀÖ´Ù.
Connection Ãʱ⠼³Á¤
1) <new-connection-sql>
»õ·Î ¹°¸®ÀûÀÎ connectionÀ» »ý¼ºÇÒ ¶§ ¸¶´Ù ¼öÇàÇÒ SQLÀ» ¼³Á¤ÇÑ´Ù. DB session ¼³Á¤ÀÌ ÇÊ¿äÇÑ °æ¿ì À¯¿ëÇÏ´Ù.
ex) <new-connection-sql>ALTER SESSION SET nls_date_format="YYYY-MM-DD HH24:MI:ss"</new-connection-sql>
Ãâó: http://nuninaya.tistory.com/426 [1.³Ê´Ï³ª¾ß À̾߱â]