[JBOSS EAP] java.sql.SQLException: 지원되지 않는 문자 집합(클래스 경로에 orai18n.jar 추가): KO16MSWIN949

 JBoss EAP에서 Oracle DB 연동 시 문자셋 오류 해결을 위한 orai18n.jar 모듈 등록 방법을 정리합니다.


문제

JBoss EAP 7에서 Oracle DB 연동 후 다음과 같은 오류가 발생하는 경우가 있습니다.

java.sql.SQLException: 지원되지 않는 문자 집합(클래스 경로에 orai18n.jar 추가): KO16MSWIN949

원인

이 오류는 ojdbc8 드라이버가 KO16MSWIN949와 같은 특정 문자셋을 지원하지 않기 때문에 발생합니다. 오류 메시지에서도 명시하듯이, 해당 문자셋을 지원하려면 클래스 경로에 orai18n.jar 파일을 추가해야 합니다.


해결

문제 해결을 위해서는 KO16MSWIN949 문자셋을 지원하는 orai18n.jar 파일을 JDBC 드라이버에 추가해야 합니다. 단, JBoss에서는 단순히 jar 파일을 배포하는 방식이 아닌, 모듈로 등록하는 절차가 필요합니다.

따라서 orai18n.jar 파일을 포함한 Oracle JDBC 드라이버를 JBOSS_HOME/modules 디렉터리 하위에 모듈 방식으로 구성해야 정상적으로 인식됩니다.


orai18n.jar가 포함된 OJDBC 드라이버 추가 방법

Step 1: 드라이버 파일 준비

Oracle 공식 사이트에서 ojdbc8-full.tar.gz 파일을 다운로드합니다. 이 파일에는 ojdbc8.jarorai18n.jar가 함께 포함되어 있으므로, 하나만 다운로드한 후 압축을 해제하면 됩니다

https://www.oracle.com/database/technologies/appdev/jdbc-downloads.html




압축 해제 후 다음 두 파일을 확보합니다

  • ojdbc8.jar

  • orai18n-11.2.0.4.jar

 

Step 2: ojdbc 모듈 등록

다운로드한 jar 파일들과 함께 module.xml 파일을 생성하여 지정된 모듈 경로에 배치하면 JBoss가 해당 드라이버를 모듈로 인식할 수 있습니다.

  • 다운로드 한 파일을 EAP 엔진의 모듈 디렉터리 하위로 이동 ( 파일 위치와 모듈 이름은 동일 )
$ mkdir -p $JBOSS_HOME/modules/com/oracle/jdbc/main/

$ cp ojdbc8.jar orai18n-11.2.0.4.jar $JBOSS_HOME/modules/com/oracle/jdbc/main/

$ ls $JBOSS_HOME/modules/com/oracle/jdbc/main/
ojdbc8.jar  orai18n-11.2.0.4.jar
  • “module.xml” 파일 생성
$ vi $JBOSS_HOME/modules/com/oracle/jdbc/main/module.xml 
<?xml version='1.0' encoding='UTF-8'?>

<module xmlns="urn:jboss:module:1.1" name="com.oracle.jdbc">  ## 모듈 위치와 동일하게 설정

    <resources>
        <resource-root path="ojdbc8.jar"/>                    ## 파일명과 동일하게 설정
        <resource-root path="orai18n-11.2.0.4.jar"/>          ## 파일명과 동일하게 설정
    </resources>

    <dependencies>
        <module name="javax.api"/>
        <module name="javax.transaction.api"/>
    </dependencies>
</module>

위에서 본 바와 같이 모듈 등록은 jar 파일을 디렉터리 구조에 맞게 위치 시키고, module.xml 파일을 생성해서 드라이버 파일과 함께 넣어주게 되면 끝입니다.

이제 해당 모듈을 사용하는 datasource 설정에 드라이버를 추가하여 사용할 수 있습니다. 이 방법은 아래 Step3과 Step4에서 설명합니다.


Step 3: Oracle 드라이버 등록 (jboss-cli 실행)

  • 인스턴스의 jboss-cli에서 드라이버 설정
## 드라이버 생성
[standalone@192.168.243.151:9990 /] /subsystem=datasources/jdbc-driver=oracle:add(driver-name=oracle,driver-module-name="com.oracle.jdbc",driver-xa-datasource-class-name="oracle.jdbc.xa.client.OracleXADataSource")
{"outcome" => "success"}

## 드라이버 확인
[standalone@192.168.243.151:9990 /] ls /subsystem=datasources/jdbc-driver
h2      oracle         ## 등록된 oracle 드라이버 확인

Step 4: DataSource 설정

  • 이제 등록한 Oracle 드라이버를 실제 DataSource에 적용해야 합니다. 설정은 standalone.xml 파일의 <datasource> 항목에서 수행합니다.
# vi $BASE_DIR/configuration/standalone.xml
...
<datasource jta="false" jndi-name="java:jboss/oracleDS" pool-name="oracleDS" enabled="true" use-ccm="false">

...

<driver-class>oracle.jdbc.OracleDriver</driver-class>
<driver>oracle</driver>

...

</datasource>

<driver> 태그의 값은 Step 3에서 등록한 driver-name과 동일해야 하며, <driver-class>에는 JDBC 드라이버 클래스명을 명시합니다.

이제 해당 DataSource 설정을 통해 Oracle 데이터베이스와의 연결이 정상적으로 이루어집니다.


참조

https://access.redhat.com/documentation/ko-kr/red_hat_jboss_enterprise_application_platform/7.0/html/configuration_guide/datasource_management#example_oracle_datasource

댓글

이 블로그의 인기 게시물

[Linux] RHEL Local YUM Repository 구성

[Linux Command] sudo command 설명

[Ansible Modules] Fetch module 설명 및 활용