본문 바로가기

프로그래밍/Java

JBoss Application Server 7에 Oracle Database Connection Pool 생성시 주의점..

Spring을 사용하면서 Oracle Database Connection Pool을 등록할때마다 늘 발생하는 상황이지만..

Oracle 11g에 있는 ojdbc6.jar를 이용해서 Oracle Database Connection Pool을 구성하면 네트워크 관련 에러가 발생한다.

이 부분은 Spring 자체에서 Connection Pool을 만들든, Spring에서 별도의 Connection Pool 라이브러리(예를 들면 c3p0 같은 라이브러리..)를 사용하든, WAS에 Database Connection Pool을 만들어서 이용하든 항상 ojdbc6.jar를 사용하면 발생하게 되는데..
이것을 ojdbc14.jar(내가 알기론 JDK 1.4 버전에 맞춰진 Oracle용 JDBC 드라이버로 알고 있음)로 사용하면 에러가 발생하지 않는다.

이번에 프로젝트에 참여할 곳이 결정되어서 거기서 JBoss를 쓴다길래 한번도 사용해본 경험이 없어서 JBoss Application Server 7을 다운받아 셋팅을 시도해 보았다. 근데 여기서는 ojdbc14.jar를 사용하여 Database Connection Pool을 설정하는 방법대로 해도 되지를 않았다. 원인이 무엇인가 해서 열씨미 구글링 하여 해결책을 찾았다.

흔히 JBoss 설정파일에 Oracle JDBC 드라이버를 등록하면서 다음의 내용을 넣었을 것이다.(다음의 예는 ojdbc14.jar를 사용하다보니 module 디렉토리를 만들때 ojdbc14라는 네이밍을 썼다)

<driver name="OracleJDBCDriver" module="com.oracle.ojdbc14">
        <xa-datasource-class>oracle.jdbc.OracleDriver</xa-datasource-class>
</driver>
 

근데 구글링을 한 바로는 ojdbc14.jar는 jdbc4 규격에 호환이 되지 않는다고 한다. 그래서 다음과 같이 driver-class 태그를 따로 사용해서 등록해야 한다고 되어 있다.(아마 추측엔 ojdbc6.jar의 경우엔 oracle.jdbc.OracleDriver 클래스가 XA DataSource 역할도 같이 수행할수 있게끔 기능이 되어 있지만 ojdbc14.jar의 oracle.jdbc.OracleDriver 클래스의 경우엔 XA DataSource 역할을 할 수 없기 때문에 분리해서 등록해야 한다는 생각을 해본다)

<driver name="OracleJDBCDriver" module="com.oracle.ojdbc14">
        <driver-class>oracle.jdbc.OracleDriver</driver-class>
        <xa-datasource-class>oracle.jdbc.xa.client.OracleXADataSource</xa-datasource-class>
</driver>
이렇게 설정하면 JBoss에서 ojdbc14.jar를 이용하여 Database Connection Pool을 만들수가 있다.
관련 내용은 여기에서 참조했다(답글 달은 내용에 있음)