JBoss EJB 部署涉及 7 個核心配置文件,分佈在 EAR、EJB-JAR、WAR 三類歸檔中:
| # | 文件路徑 | 用途 |
|---|---|---|
| 1 | jboss/conf/default/jboss.jcml | 數據源 (XADataSource) 定義 |
| 2 | jboss/conf/default/standardjaws.xml | 數據庫類型映射 (Type Mapping) |
| 3 | [project.ear]/META-INF/application.xml | 項目基本信息 (模塊列表、顯示名等) |
| 4 | [project_ejb.jar]/META-INF/ejb-jar.xml | EJB 標準元數據 (Home/Remote、方法、事務屬性) |
| 5 | [project_ejb.jar]/META-INF/jboss.xml | JBoss 專用配置 (JNDI 名、安全域、實體命令) |
| 6 | [project_ejb.jar]/META-INF/jaws.xml | CMP 字段與數據庫列映射 |
| 7 | [project_web.war]/WEB-INF/web.xml | Web 模塊配置 (Servlet、Welcome 文件、過濾器) |
<!-- ejb-jar.xml -->
<ejb-ref>
<ejb-ref-name>ejb/OtherEJB</ejb-ref-name>
<ejb-ref-type>Session</ejb-ref-type>
<home>com.other.OtherHome</home>
<remote>com.other.Other</remote>
</ejb-ref>
<!-- jboss.xml -->
<ejb-ref>
<ejb-ref-name>ejb/OtherEJB</ejb-ref-name>
<jndi-name>jndi/OtherEJB</jndi-name> <!-- 目標 EJB 實際 JNDI 名 -->
</ejb-ref>
代碼查找:ctx.lookup("java:comp/env/ejb/OtherEJB")。
<!-- ejb-jar.xml -->
<resource-ref>
<res-ref-name>jdbc/MyDB</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
<!-- jboss.xml -->
<resource-ref>
<res-ref-name>jdbc/MyDB</res-ref-name>
<resource-name>MyDBPool</resource-name> <-- 對應 jboss.jcml 中的 PoolName -->
</resource-ref>
<resource-managers>
<resource-manager res-class="javax.sql.DataSource">
<res-name>MyDBPool</res-name>
<res-jndi-name>MySQLDS</res-jndi-name> <-- JNDI 名 -->
</resource-manager>
</resource-managers>
<!-- standardjaws.xml -->
<datasource>MySQLDS</datasource>
<type-mapping>mySQL</type-mapping>
<mbean code="org.jboss.jdbc.XADataSourceLoader"
name="DefaultDomain:service=XADataSource,name=MySQLDS">
<attribute name="PoolName">MyDBPool</attribute>
<attribute name="DataSourceClass">
org.opentools.minerva.jdbc.xa.wrapper.XADataSourceImpl
</attribute>
<attribute name="URL">jdbc:mysql://localhost:3306/mydb</attribute>
<attribute name="JDBCUser">root</attribute>
<attribute name="PassWord">password</attribute>
</mbean>
<default-entity>
<create-table>false</create-table>
<remove-table>false</remove-table>
<tuned-updates>false</tuned-updates>
<read-only>false</read-only>
<time-out>300</time-out> <!-- 緩存超時秒數 -->
</default-entity>
ejb-jar.xml 的 ejb-name、jboss.xml 的 jndi-name、代碼 lookup() 參數三者必須對應。res-ref-name 必須以 jdbc/ 或 ejb/ 開頭 (J2EE 規範慣例)。type-mapping 必須與數據庫廠商匹配 (mySQL, Oracle, PostgreSQL 等),影響 CMP SQL 生成。standalone.xml/domain.xml,但 EJB 部署描述符結構基本兼容。