티스토리 뷰
본 포스팅에서는 WildFly의 datasouce 연동방식(Thin,OCI)에 대해 알아보겠습니다.
각 DB벤더사에서는 4가지 종류의 JDBC Driver가 있습니다. 그중에서도 Type2와 Type4형태의 Driver를 많이 제공합니다. Type2 Driver란, Oracle로 이야기한다면 Sql*Net을 필요로 하며, .dll또는 .so형태의 H/W 종속적인 Native Module을 통해서 DB와 연결합니다. Oracle의 경우, JDBC Type2형태를 OCI(Oracle Call Interface) Driver라고 부릅니다.
Type4 형태의 JDBC Driver는 순수하게 Java package만으로 바로 DB연결이 가능합니다. Oracle의 경우, JDBC Type4형태를 Thin Driver라고 부릅니다.
|
Type2(OCI) |
Type4(Thin) |
장점 |
성능이 빠르다. |
성능이 OCI에 비해 느리다 |
단점 |
Sql*Net과 같은 Native Module이 있어야하므로, 물리적인 H/W구성에 다소 종속적인 형태가 될수있다. |
Java Package만으로 DB와 접속이 가능하므로, 어떤 H/W, OS에서도 유연하게 연결이 가능하다. |
일반적으로 Type4 형태의 JDBC Driver를 많이 사용하며,
관련 포스팅은 아래에서 확인가능합니다.
[Web Application Server] WildFly - Datasource 연동
이번 포스팅에서는 DBC Type2형태의 OCI(Oracle Call Interface) Driver를 사용하여 연동하도록 하겠습니다.
먼저 연동에 필요한 OCI라이브러리들을 다운받아야겠지요. 이를 Oracle Instant Client라고 합니다.
1. Oracle Instant Client 설치파일을 다운받기위해, 아래 페이지에 접속합니다.
OS를 선택합니다.
|
2.아래 파일을 다운로드받습니다.
instantclient-basic-linux.x64-18.3.0.0.0dbru.zip
|
3.해당 파일의 압축을 해제하면, instantclient_18_3 이라는 디렉토리에 풀리게됩니다.
[oracledb@kmkang instantclient_18_3]$ pwd /home/oracledb/instantclient_18_3 [oracledb@kmkang instantclient_18_3]$ ls -al 합계 233376 drwxrwxr-x 4 oracledb oracledb 4096 10월 10 12:59 . drwx------ 25 oracledb oracledb 4096 10월 10 18:56 .. -rw-r--r-- 1 oracledb oracledb 1317 6월 28 19:53 BASIC_README -rwxr-xr-x 1 oracledb oracledb 40617 6월 28 19:53 adrci -rwxr-xr-x 1 oracledb oracledb 57556 6월 28 19:53 genezi lrwxrwxrwx 1 oracledb oracledb 17 10월 1 16:01 libclntsh.so -> libclntsh.so.18.1 -rwxrwxr-x 1 oracledb oracledb 77879517 6월 28 19:53 libclntsh.so.18.1 -rwxrwxr-x 1 oracledb oracledb 8348633 6월 28 19:53 libclntshcore.so.18.1 -r-xr-xr-x 1 oracledb oracledb 18744 6월 28 19:53 libheteroxa18.so -r-xr-xr-x 1 oracledb oracledb 3537979 6월 28 19:53 libipc1.so -r-xr-xr-x 1 oracledb oracledb 467468 6월 28 19:53 libmql1.so -r-xr-xr-x 1 oracledb oracledb 6636088 6월 28 19:53 libnnz18.so lrwxrwxrwx 1 oracledb oracledb 15 10월 1 16:01 libocci.so -> libocci.so.18.1 -rwxrwxr-x 1 oracledb oracledb 2229347 6월 28 19:53 libocci.so.18.1 -rwxr-xr-x 1 oracledb oracledb 126950232 6월 28 19:53 libociei.so -r-xr-xr-x 1 oracledb oracledb 160875 6월 28 19:53 libocijdbc18.so -r-xr-xr-x 1 oracledb oracledb 394835 6월 28 19:53 libons.so -rwxrwxr-x 1 oracledb oracledb 118171 6월 28 19:53 liboramysql18.so -rwxr-xr-x 1 oracledb oracledb 1616347 6월 28 19:53 libsqlplus.so -rwxr-xr-x 1 oracledb oracledb 1655813 6월 28 19:53 libsqlplusic.so -rwxr-xr-x 1 oracledb oracledb 1118312 6월 28 19:53 libsqora.so.18.1 drwxr-xr-x 3 oracledb oracledb 19 6월 28 19:53 network -rwxr-xr-x 1 oracledb oracledb 4961 6월 28 19:53 odbc_update_ini.sh -r--r--r-- 1 oracledb oracledb 4161744 6월 28 19:53 ojdbc8.jar -r--r--r-- 1 oracledb oracledb 1398331 6월 28 19:53 ucp.jar -rwxr-xr-x 1 oracledb oracledb 242009 6월 28 19:53 uidrvci -rw-r--r-- 1 oracledb oracledb 74263 6월 28 19:53 xstreams.jar [oracledb@kmkang instantclient_18_3]$ |
4. instantclient_18_3 디렉토리에서 ojdbc8.jar을 복사하여, WildFly module directory에 위치시킵니다.
[wildfly@kmkang~/wildfly13/modules/com/oracle/main$]pwd /home/wildfly/wildfly13/modules/com/oracle/main [wildfly@kmkang~/wildfly13/modules/com/oracle/main$]ls -al 합계 9752 drwxrwxr-x 3 wildfly wildfly 89 10월 10 13:07 . drwxrwxr-x 3 wildfly wildfly 18 8월 6 10:45 .. -rw-rw-r-- 1 wildfly wildfly 303 10월 10 13:07 module.xml -rw-r--r-- 1 wildfly wildfly 4161744 10월 10 10:58 ojdbc8.jar [wildfly@kmkang~/wildfly13/modules/com/oracle/main$] |
5.추가적으로, 해당 위치에 lib directory를 생성하며, 그 하위에 linux-x86_64 directory를 생성합니다. (directory명은 변경해도 무방합니다.
[wildfly@kmkang~/wildfly13/modules/com/oracle/main/lib/linux-x86_64$] |
5.module.xml 파일을 수정합니다.
<?xml version="1.0" encoding="UTF-8"?> <module xmlns="urn:jboss:module:1.3" name="com.oracle"> <resources> <resource-root path="ojdbc8.jar"/> <resource-root path="lib"/> </resources> <dependencies> <module name="javax.api"/> </dependencies> </module> |
6.instantclient_18_3 directory 하위에 존재하는 모든 .so 파일을, ~/wildfly13/modules/com/oracle/main/lib/linux-x86_64 경로에 copy합니다.
/home/wildfly/wildfly13/modules/com/oracle/main/lib/linux-x86_64 [wildfly@kmkang~/wildfly13/modules/com/oracle/main/lib/linux-x86_64$]ls -al 합계 303988 drwxrwxr-x 2 wildfly wildfly 4096 10월 10 13:02 . drwxrwxr-x 3 wildfly wildfly 26 10월 10 11:19 .. -rwxr-xr-x 1 wildfly wildfly 77879517 10월 10 11:26 libclntsh.so -rwxr-xr-x 1 wildfly wildfly 77879517 10월 10 11:26 libclntsh.so.18.1 -rwxr-xr-x 1 wildfly wildfly 8348633 10월 10 11:26 libclntshcore.so.18.1 -rwxr-xr-x 1 wildfly wildfly 18744 10월 10 13:02 libheteroxa18.so -rwxr-xr-x 1 wildfly wildfly 3537979 10월 10 11:26 libipc1.so -rwxr-xr-x 1 wildfly wildfly 467468 10월 10 11:26 libmql1.so -rwxr-xr-x 1 wildfly wildfly 6636088 10월 10 11:26 libnnz18.so -rwxr-xr-x 1 wildfly wildfly 2229347 10월 10 11:26 libocci.so -rwxr-xr-x 1 wildfly wildfly 2229347 10월 10 11:26 libocci.so.18.1 -rwxr-xr-x 1 wildfly wildfly 126950232 10월 10 11:26 libociei.so -rwxr-xr-x 1 wildfly wildfly 160875 10월 10 11:26 libocijdbc18.so -rwxr-xr-x 1 wildfly wildfly 394835 10월 10 11:27 libons.so -rwxr-xr-x 1 wildfly wildfly 118171 10월 10 11:27 liboramysql18.so -rwxr-xr-x 1 wildfly wildfly 1616347 10월 10 11:27 libsqlplus.so -rwxr-xr-x 1 wildfly wildfly 1655813 10월 10 11:27 libsqlplusic.so -rwxr-xr-x 1 wildfly wildfly 1118312 10월 10 13:02 libsqora.so.18.1 [wildfly@kmkang~/wildfly13/modules/com/oracle/main/lib/linux-x86_64$] |
7.WildFly standalone.xml파일의 datasource 항목을 oci로 수정합니다.
<datasources> <datasource jndi-name="java:jboss/oracleDataSource" pool-name="oracleDs" enabled="true" use-java-context="true" use-ccm="true"> <connection-url>jdbc:oracle:oci:@IP:PORT/SID</connection-url> <driver>oracle</driver> <security> <user-name>***</user-name> <password>***</password> </security> </datasource> <drivers> <driver name="oracle" module="com.oracle"> <driver-class>oracle.jdbc.driver.OracleDriver</driver-class> </driver> </drivers> </datasources> </subsystem> |
8. LD_LIBLARY_PATH를 so파일들이 위치하는 directory로 지정합니다. (.bash_profile수정)
export LD_LIBRARY_PATH=/home/wildfly/wildfly13/modules/com/oracle/main/lib/linux-x86_64 |
*LD_LIBLARY_PATH란?
우선 so 파일이 무엇인지 알아 보겠습니다. so 파일은 shared object 파일이란 뜻으로 *.so.* 일텐데, 특정한 기능을 구현해 놓은 파일을 의미합니다. 즉, 프로그램들은 일반적으로 필요한 기능을 전부 구현하기 보다는 특정 기능이 이미 구현되어 있으면 그 기능이 구현된 파일을 메모리에 올린 후 그 기능을 사용하게 됩니다. 해당 파일은 C로 구현되어있기때문에 non-JAVA영역이며, 이를 사용하기위해서는 명시적으로 지정을 해주어야 합니다. 따라서 환경변수로 지정해주게 됩니다.
9. WAS 재기동
10. Test connection in pool
[standalone@IP:PORT /] /subsystem=datasources/data-source=oracleDs:test-connection-in-pool { "outcome" => "success", "result" => [true] } |
연동이 완료되었습니다.
- 만약 LD_LIBLARY_PATH 를 지정해주지 않을 경우, 아래와 같은 error가 발생하게 됩니다.
2018-10-10 13:17:13,511 WARN [org.jboss.jca.core.connectionmanager.pool.strategy.OnePool] (management-handler-thread - 1) IJ000604: Throwable while attempting to get a new connection: null: javax.resource.ResourceException: IJ031084: Unable to create connection at org.jboss.jca.adapters.jdbc.local.LocalManagedConnectionFactory.createLocalManagedConnection(LocalManagedConnectionFactory.java:345) ... Caused by: java.lang.UnsatisfiedLinkError: /home/wildfly/wildfly13/modules/com/oracle/main/lib/linux-x86_64/libocijdbc18.so: libclntsh.so.18.1: 동적 오브젝트 파일을 열 수 없습니다: 그런 파일이나 디렉터리가 없습니다 |
Oracle의 driver마다 성능과 용이함에 장단점이 존재합니다. 따라서 시스템 환경에 맞는 database연동방식을 선택하는것이 좋습니다.
고맙습니다.
'④ 미들웨어 > ⓦ WildFly' 카테고리의 다른 글
[WildFly] 오픈소스 APM Scouter 설치 및 연동 (0) | 2019.01.03 |
---|---|
[WildFly] 외부캐시 서버와의 연동을 통한 세션 클러스터링 테스트 (0) | 2018.10.24 |
[WAS] JBoss Thread Pool (0) | 2018.09.13 |
[WildFly] 운영자 검검 리스트 (0) | 2018.08.21 |
[WildFly] 하나의 Standalone Server에서 동일 Context 사용 방법 (0) | 2018.08.10 |
- Total
- Today
- Yesterday
- Architecture
- OpenStack
- MSA
- kubernetes
- aa
- TA
- node.js
- 오픈스택
- aws
- Da
- git
- nodejs
- openstack token issue
- 마이크로서비스
- openstack tenant
- JBoss
- SWA
- webtob
- API Gateway
- k8s
- jeus
- JEUS6
- apache
- SA
- 마이크로서비스 아키텍처
- 쿠버네티스
- Docker
- 아키텍처
- wildfly
- JEUS7
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |