ORACLE
HOME > DB > ORACLE
2018.12.07 / 17:50

JBoss¿¡¼­ DataSource ¼³Á¤ ÀýÂ÷

hanulbit
Ãßõ ¼ö 242

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"?>
<datasources>
  <local-tx-datasource>
    <jndi-name>jdbc/OracleDS</jndi-name>
    <connection-url>jdbc:oracle:thin:@203.231.14.100:1521:XE</connection-url>
    <driver-class>oracle.jdbc.OracleDriver</driver-class>
    <user-name>scott</user-name>
    <password>tiger</password>
    <transaction-isolation>TRANSACTION_READ_COMMITTED</transaction-isolation>


    <min-pool-size>0</min-pool-size>
    <max-pool-size>20</max-pool-size>


    <blocking-timeout-millis>5000</blocking-timeout-millis>
    <idle-timeout-minutes>15</idle-timeout-minutes>


    <prepared-statement-cache-size>100</prepared-statement-cache-size>
    <track-statements>false</track-statements>


    <valid-connection-checker-class-name>
        org.jboss.resource.adapter.jdbc.vendor.OracleValidConnectionChecker
    </valid-connection-checker-class-name>
    <exception-sorter-class-name>
        org.jboss.resource.adapter.jdbc.vendor.OracleExceptionSorter
    </exception-sorter-class-name>


    <metadata>
         <type-mapping>Oracle9i</type-mapping>
    </metadata>
  </local-tx-datasource>
</datasources>

 

¸ÕÀú 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.³Ê´Ï³ª¾ß À̾߱â]