JBoss AS 4.2.x 系列雖屬舊版本,但仍有存量系統在運行。本文以 MySQL 為例,詳細說明 -ds.xml 數據源配置全過程,並標註 Oracle 遷移差異點,助你快速完成資料庫接入。
jboss-4.2.2.GA(本文基準版本)mysql-connector-java-5.1.xx.jar(或 8.0.x 版本,需對應 com.mysql.cj.jdbc.Driver)$JBOSS_HOME/server/default/lib/ 目錄(全域共享)或專案 WEB-INF/lib/(隔離部署)在 $JBOSS_HOME/server/default/deploy/ 目錄新建 mysql-ds.xml(命名慣例:*-ds.xml 會被自動識別部署)。
可從 $JBOSS_HOME/docs/examples/jca/mysql-ds.xml 複製模板修改。
<?xml version="1.0" encoding="UTF-8"?>
<datasources>
<local-tx-datasource>
<jndi-name>MySQLDS</jndi-name>
<connection-url>jdbc:mysql://localhost:3306/your_db?useUnicode=true&characterEncoding=utf8&useSSL=false</connection-url>
<driver-class>com.mysql.jdbc.Driver</driver-class>
<user-name>db_user</user-name>
<password>db_password</password>
<min-pool-size>5</min-pool-size>
<max-pool-size>20</max-pool-size>
<exception-sorter-class-name>org.jboss.resource.adapter.jdbc.vendor.MySQLExceptionSorter</exception-sorter-class-name>
<metadata>
<type-mapping>mySQL</type-mapping>
</metadata>
</local-tx-datasource>
</datasources>
| 屬性 | 說明 | 建議值 |
|---|---|---|
| jndi-name | JNDI 查找名稱,程式碼中 new InitialContext().lookup("java:/MySQLDS") | MySQLDS / jdbc/MySQLDS |
| connection-url | JDBC 連接串,MySQL 8.0+ 需加 serverTimezone=Asia/Shanghai | 見範例 |
| driver-class | 驅動類全限定名 | MySQL 5.1: com.mysql.jdbc.DriverMySQL 8.0: com.mysql.cj.jdbc.Driver |
| min/max-pool-size | 連接池最小/最大連接數 | 視並發量調整,開發 5/20,生產 10/100 |
| exception-sorter-class-name | 異常分類器,識別可重試的 SQL 錯誤 | MySQL 專用 |
| type-mapping | 型別映射,影響 CMP/EJB3 自動建表 SQL 方言 | mySQL / Oracle9i / Oracle10g |
若需接入 Oracle,只需修改以下項目,其餘結構完全一致:
| 項目 | MySQL 配置 | Oracle 配置 |
|---|---|---|
| 檔案名 | mysql-ds.xml | oracle-ds.xml |
| driver-class | com.mysql.jdbc.Driver | oracle.jdbc.driver.OracleDriver |
| connection-url | jdbc:mysql://host:3306/db | jdbc:oracle:thin:@host:1521:SID 或 jdbc:oracle:thin:@//host:1521/service_name |
| exception-sorter-class-name | org.jboss.resource.adapter.jdbc.vendor.MySQLExceptionSorter | org.jboss.resource.adapter.jdbc.vendor.OracleExceptionSorter |
| type-mapping | mySQL | Oracle9i / Oracle10g / Oracle11g |
| 驅動包 | mysql-connector-java.jar | ojdbc14.jar / ojdbc6.jar / ojdbc8.jar(對應 JDK 版本) |
$JBOSS_HOME/bin/run.sh -c defaultserver.log,出現 Bound ConnectionManager 'jboss.jca:service=DataSourceBinding,name=MySQLDS' to JNDI name 'java:/MySQLDS' 表示成功https://localhost:8080/jmx-console/ → 搜尋 MySQLDS → 檢視 ConnectionPool 狀態Context ctx = new InitialContext();
DataSource ds = (DataSource) ctx.lookup("java:/MySQLDS");
Connection conn = ds.getConnection();
// 業務邏輯...
conn.close(); // 必須關閉,歸還連接池
server/default/lib/ 或版本不匹配bind-address、防火牆 3306 端口、skip-networking 參數max-pool-size 過小、長事務阻塞useUnicode=true&characterEncoding=utf8、資料庫/表/欄位字符集為 utf8mb4JBoss 4.2 的 -ds.xml 配置機制清晰且強大,掌握核心屬性與驅動對應關係,即可快速完成異構資料庫接入。新專案建議遷移至 WildFly / JBoss EAP 7+,享受 Jakarta EE 8/9 標準與更佳效能。