본문 바로가기

WAS/JBoss&WildFly

[JBoss EAP 7.4] ExampleDS 와 h2 driver 삭제

728x90
        <subsystem xmlns="urn:jboss:domain:datasources:6.0">
            <datasources>
                <datasource jndi-name="java:jboss/datasources/ExampleDS" pool-name="ExampleDS" enabled="true" use-java-context="true" statistics-enabled="${wildfly.datasources.statistics-enabled:${wildfly.statistics-enabled:false}}">
                    <connection-url>jdbc:h2:mem:test;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE</connection-url>
                    <driver>h2</driver>
                      .....
                </datasource>
                <datasource jndi-name="java:/testDS" pool-name="test" statistics-enabled="true">
                    <connection-url>jdbc:oracle:thin:@xxx.xxx.xxx.xxx:1521:orcl</connection-url>
                    <driver>oracle_jdbc_driver_19c</driver>
					  .....
                </datasource>
                <drivers>
                    <driver name="h2" module="com.h2database.h2">
                        <xa-datasource-class>org.h2.jdbcx.JdbcDataSource</xa-datasource-class>
                    </driver>
                    <driver name="oracle_jdbc_driver_19c" module="com.oracle.jdbc">
                        <driver-class>oracle.jdbc.OracleDriver</driver-class>
                    </driver>
                </drivers>
            </datasources>
        </subsystem>
        
        ........
        
        <subsystem xmlns="urn:jboss:domain:ee:6.0">
            <spec-descriptor-property-replacement>false</spec-descriptor-property-replacement>
            <concurrent>
               ......
            </concurrent>
            <default-bindings context-service="java:jboss/ee/concurrency/context/default" datasource="java:jboss/datasources/ExampleDS" managed-executor-service="java:jboss/ee/concurrency/executor/default" managed-scheduled-executor-service="java:jboss/ee/concurrency/scheduler/default" managed-thread-factory="java:jboss/ee/concurrency/factory/default"/>
        </subsystem>

 

JBoss에서 데이터소스를 구성하고자 하면 driver를 등록해주고, datasource를 생성해야 한다.

JBoss에서는 기본적으로 ExampleDS 라는 데이터소스와 h2 driver가 존재하는데,

프로젝트시 고객사의 요청으로 해당 데이터소스와 driver를 삭제해야하는 경우가 있다.

 

이경우 간단하게 생각하면, <datasource jndi-name="java:jboss/datasources/ExampleDS" ...> 에 해당하는 태그와 

<driver name="h2" module="com.h2database.h2"> 에 해당하는 태그를 삭제하면 될 거라 생각한다.

 

하지만 주의해야 할 것은, ExampleDS의 경우 JBoss standalone 인스턴스 기동 시에 기본적으로 묶여있는 데이터소스이다 보니, 단순히 <datasource>와 <driver>를 지운다고 해서 해결되는 문제가 아니다.

이 사실을 모른채 단순히 태그만 제거하고 기동했을 시 다음의 로그가 확인되며,

기본적인 페이지 조차 정상적으로 호출되지 않는 것을 확인할 수 있다.

09:02:20,519 ERROR [org.jboss.as.controller.management-operation] (Controller Boot Thread) 
WFLYCTL0013: Operation ("add") failed - address: ([("deployment" => "test11")]) 
- failure description: {
    "WFLYCTL0412: Required services that are not installed:" 
    => ["jboss.naming.context.java.jboss.datasources.ExampleDS"],
    "WFLYCTL0180: Services with missing/unavailable dependencies" 
    => ["jboss.naming.context.java.module.test11.test11.DefaultDataSource is missing 
    [jboss.naming.context.java.jboss.datasources.ExampleDS]"]
}

 

따라서 <datasource>와 <driver>를 지웠으면

<default-bindings ...  datasource="java:jboss/datasources/ExampleDS" ... /> 이 부분을

고객사의 datasource로 변경 해주어야 한다.

[BEFORE]
<default-bindings ... datasource="java:jboss/datasources/ExampleDS" ... />

[AFTER]
<default-bindings ... datasource="java:/testDS" ... />