首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

WebLogic 開發 EJB 3 實戰避坑指南:JNDI、JDBC、映射、EQL 與 WebService

     編輯:Java 相關知識

WebLogic 作為重量級 Java EE 容器,EJB 3 開發中有別於 JBoss/GlassFish 的特有坑點。本文彙總實戰踩過的 9 大核心問題與解決方案。

1. JNDI 命名差異

  • JBoss: EjbTestBean/remote
  • WebLogic: EjbTestBean#com.full.Interface (介面全限定名)

2. JDBC 資料源配置

Console → Services → Data Sources → New,設定 JNDI 名稱 (如 jdbc/myDS),persistence.xml 引用 <jta-data-source>jdbc/myDS</jta-data-source>。

3. @Stateless 必加 mappedName

@Stateless(mappedName = "EjbTest") // 否則遠端查找失敗
public class EjbTestBean implements IEjbTest { ... }

4. 不支援獲取父類泛型參數

Type genType = clazz.getGenericSuperclass(); // WebLogic 下回傳 null 或 Object
// 解法:避免依賴此反射手法,改用顯式傳遞 Class 參數

5. EQL/JPQL 寫法限制

  • 必須以 select / update / delete 開頭。
  • COUNT(entity) 而非 COUNT(*)。
  • FETCH JOIN 子查詢不可直接用於 COUNT (會立即載入關聯導致外鍵缺失)。

6. List 回傳偶發問題

自訂 class MyList extends ArrayList 實作 List 介面繞過序列化/代理問題。

7. 一對多映射範例

// 多方 (商品)
@ManyToOne(cascade = CascadeType.REFRESH)
@JoinColumn(name = "lb_id", insertable = false, updatable = false)
public LbBean getLbBean() { return lbBean; }

// 一方 (類別)
@OneToMany(cascade = CascadeType.PERSIST, fetch = FetchType.LAZY, mappedBy = "lbBean")
@OrderBy("spId desc")
public List getSpSet() { return spSet; }

注意:JPA 不支援級聯刪除一方時自動刪多方,需手寫刪除 SQL (先刪多方再刪一方)。

8. EJB WebService 回傳複雜類型

  • List、單 Bean 可直接回傳。
  • Map 需封裝:XmlAdapter> + @XmlJavaTypeAdapter。

9. 產生 wlfullclient.jar (客戶端調用必備)

cd $WL_HOME/server/lib
java -jar ../../../modules/com.bea.core.jarbuilder_1.0.0.0.jar
# 產生 wlfullclient.jar,放入客戶端 classpath (如 JBoss server/default/lib)
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved