| 工具 | 版本 | 下載關鍵字 | 角色 |
|---|---|---|---|
| JDK | 5.0 (1.5.0_xx) | jdk-1_5_0_xx-windows-i586.exe | EJB 3.0 需 Java 5 註解支援 |
| Eclipse | 3.2.x | eclipse-SDK-3.2-win32.zip | IDE 基礎平台 |
| JBoss AS | 4.0.4.GA | jboss-4.0.4.GA-installer.jar | EJB 3.0 參考實作容器 |
| MyEclipse | 5.0+ | MyEclipse 5.0 GA | EJB 3.0 視覺化開發外掛 |
Program Files (空格、權限導致莫名錯誤),建議 D:/jboss-4.0.4.GA 或 /opt/jbossejb3-clustered (含叢集、EJB 3.0 完整功能)all (啟動所有服務,含叢集、IIOP、EJB 3.0)cd %JBOSS_HOME%\bin
run.bat -c all
# 必須指定 -c all,否則預設 default 配置缺少 EJB 3.0 服務會報錯
控制台出現 Started in XXs:XXXms 且無 ERROR 即成功。訪問 https://localhost:8080/jmx-console 驗證 JMX 主控台。
| 目錄 | 用途 | 操作建議 |
|---|---|---|
bin/ | 啟動/關閉腳本 (run.bat/shutdown.bat) | 修改 run.conf 調整 JVM 參數 (-Xms/Xmx/Metaspace) |
client/ | 客戶端通信 JAR (jnp-client.jar 等) | 獨立 Java 客戶端 CLASSPATH 依賴 |
docs/ | 範例配置檔 (資料庫 -ds.xml、資料源範例) | 參考配置資料源、安全域、JMS |
docs/dtd/ | XML DTD 定義 | 驗證部署描述檔 |
lib/ | 啟動時共享 JAR (所有配置共用) | 勿放應用 JAR,避免類別衝突 |
server/ | 各配置集 (minimal/default/all) | 本教程使用 server/all/ |
server/all/conf/ | 配置檔 (login-config.xml、standardjboss.xml 等) | 調整安全、事務、EJB 容器行為 |
server/all/data/ | 嵌入式資料庫檔案 (Hypersonic、JBossMQ) | 開發測試用,生產勿用 |
server/all/deploy/ | 熱部署目錄 (EAR/WAR/JAR/SAR/-ds.xml) | 放入即部署,修改即熱更新 |
server/all/lib/ | 配置專用共享 JAR | 放置 JDBC 驅動、共用庫 |
server/all/log/ | 日誌檔 (server.log、boot.log) | 除錯首選入口 |
server/all/tmp/ | 臨時檔案 (編譯 JSP、工作目錄) | 可定期清理 |
JBoss 掃描 server/all/deploy/ 目錄變化,任何合法封裝檔即時部署:
META-INF/ejb-jar.xml (可選,純註解可無) 或 persistence.xmlMETA-INF/application.xml無需重啟、無需管理主控台操作、無需部署工具——複製檔案即部署,刪除檔案即解除部署。
all-Xdebug -Xrunjdwp:transport=dt_socket,address=8787,server=y,suspend=n)// 實體類
@Entity
@Table(name = "USERS")
public class User implements Serializable {
@Id @GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String name;
private String email;
// getter/setter...
}
// Session Bean
@Stateless
public class UserServiceBean implements UserService {
@PersistenceContext
private EntityManager em;
public User createUser(String name, String email) {
User u = new User();
u.setName(name);
u.setEmail(email);
em.persist(u);
return u;
}
}
// persistence.xml (放在 META-INF/)
<?xml version="1.0" encoding="UTF-8"?>
<persistence>
<persistence-unit name="hello-pu">
<jta-data-source>java:/DefaultDS</jta-data-source>
<properties>
<property name="hibernate.hbm2ddl.auto" value="create-drop"/>
</properties>
</persistence-unit>
</persistence>
| 現象 | 原因 | 解決 |
|---|---|---|
啟動報 NoClassDefFoundError: javax/annotation/Resource | JDK 5 未正確配置 / JBoss lib 缺少 annotation API | 確認 JAVA_HOME 指向 JDK 5、JBoss lib 有 jboss-annotations-ejb3.jar |
| 實體不增強 / LazyInitializationException | MyEclipse 未啟用 EJB 3.0 增強 / 缺少 persistence.xml | 專案屬性啟用增強、檢查 META-INF/persistence.xml |
| 熱部署不生效 | 部署至錯誤目錄 / 封裝結構不正確 | 確認放入 server/all/deploy/、EAR 結構含 META-INF/application.xml |
| 資料源找不到 | 未部署 -ds.xml / JNDI 名稱不匹配 | 複製 docs/examples/jca/*-ds.xml 至 deploy、修改 jndi-name |
EJB 3.0 學習環境的核心在於:JDK 5 註解支援 + JBoss 4.0.4.GA all 配置 + 正確啟動參數 + 熱部署目錄機制。MyEclipse 5.0 提供視覺化開發加速,但理解底層 JBoss 目錄結構、部署掃描機制、類別載入層級對解決疑難雜症至關重要。建立標準化環境腳本 (安裝路徑、JVM 參數、資料源範本),可將團隊新成員環境搭建時間從半天壓縮至 30 分鐘內。