JBoss EAP 7에서 MS SQL Server용 Non-XA Datasource를 설정할 때,
<datasource-class>태그를 사용하면<connection-url>설정이 무시되어 "Connection refused" 에러가 발생하는 현상을 해결합니다. 올바른 설정 방법은 무엇인지 정리합니다.
1. 문제 현상 (Issue)
MS SQL Server와 연결하기 위해 데이터소스를 설정하고 테스트 연결을 시도했으나, 아래와 같은 Connection refused 에러가 발생하며 실패합니다.
에러 로그
Caused by: com.microsoft.sqlserver.jdbc.SQLServerException:
The TCP/IP connection to the host localhost, port 1433 has failed.
Error: "Connection refused. Verify the connection properties. ... Make sure that TCP connections to the port are not blocked by a firewall."
방화벽이나 DB 서버 상태는 정상이지만, JBoss가 localhost:1433(기본값)으로만 접속을 시도하거나 URL 정보를 전혀 읽지 못하는 상황입니다.
2. 원인 분석 (Root Cause)
이 문제는 JBoss의 데이터소스 설정 우선순위 메커니즘 때문에 발생합니다.
- Non-XA 환경의 특성: JDBC 4 표준을 따르는 드라이버를 사용할 때, 일반적으로
java.sql.Driver메커니즘(URL 방식)을 사용합니다. - 충돌 발생: 설정 파일(
standalone.xml)에<datasource-class>가 명시되면, JBoss는 이를 우선시하여javax.sql.DataSource구현체를 사용하려고 시도합니다. - 결과: 이 과정에서
<connection-url>속성은 무시(Ignored)됩니다. 결과적으로 JDBC URL 정보가 전달되지 않아 연결에 실패하게 됩니다.
3. 해결 방법 (Resolution)
Non-XA 데이터소스 설정에서는 datasource-class를 제거하고, driver-class와 connection-url 조합을 사용해야 합니다.
설정 파일 수정 (standalone.xml)
<datasource-class> 태그가 있는 라인을 삭제하십시오.
<datasource jndi-name="java:/mssql" pool-name="mssqljdbc" statistics-enabled="true">
<connection-url>jdbc:sqlserver://127.0.0.1:1433;DatabaseName=ucpost</connection-url>
<driver-class>com.microsoft.sqlserver.jdbc.SQLServerDriver</driver-class>
<driver>sqlserver</driver>
...
</datasource>
4. 적용 및 검증 (Verification)
- 설정 파일 저장 후 JBoss를 재기동(Reload)합니다.
- 관리 콘솔 또는 CLI에서 데이터소스 연결 테스트(Test Connection)를 수행합니다.
- 정상적으로
Success메시지가 뜨는지 확인합니다.
Tip: 만약 XA Datasource(분산 트랜잭션용)를 설정하는 경우에는 반대로
xa-datasource-class 설정이 필수적이며 URL 방식은 사용되지 않을 수 있습니다. 설정하려는 타입(XA vs Non-XA)을 명확히 구분해야 합니다.