資深 J2EE 開發者無不深知其複雜度:開發一個簡單應用往往需編寫大量樣板程式碼(如 EJB 元件)與無數 XML 部署描述檔。J2EE 1.4 規範基於 JDK 1.2 撰寫,未能善用新版 JDK 特性,導致學習曲線陡峭,初學者望而卻步。
Java EE 5.0(原 J2EE 更名)的首要任務是在維持企業級功能完整性的前提下,讓常見開發任務變得輕鬆。核心策略包含:
這些改進使企業應用程式更輕量、啟動更快、維護成本更低。
註解是一種修飾符,語法為 @AnnotationName(element=value),可用於類別、方法、欄位等任何可置放修飾符的位置。它不直接改變程式語意,但影響工具與程式庫對程式碼的處理方式,進而影響執行行為。註解資訊保留於原始碼、Class 檔,甚至執行期(透過反射),實現了「定義與執行分離」,提升框架靈活度。常見範例:Javadoc 標籤、@Override、@Deprecated。
傳統 J2EE 需為每個業務介面撰寫 Home/Remote 介面與 XML 設定。Java EE 5.0 透過 @EJB 註解直接注入 Session Bean 參考:
@EJB private PurchaseOrder po;
// 進階指定
@EJB(
name = "ejb/myEnterpriseApp",
beanName = "po1",
beanInterface = PurchaseOrder.class,
description = "The Purchase Order for my enterprise application"
)
private PurchaseOrder po;
容器自動透過 JNDI 名稱 java:comp/env/ejb/po 解析目標。現有業務方法只需加上註解並部署至相容容器,即可無縫遷移。為相容舊版,部署描述檔優先權高於註解。
@Resource 替代 JNDI 程式碼以往需撰寫 InitialContext.lookup() 取得設定值,現可直接注入:
@Resource int numberOfItems; // 可由部署者配置
public void validatePO(PurchaseOrder po) throws NumberOfItemsException {
if (po.getItemCount() > numberOfItems)
throw new NumberOfItemsException("My PO cannot have more than 10 items");
}
對應的部署描述檔寫法仍被支援,容器負責查找與注入,程式碼更乾淨。
開發者僅需指定資料表與欄位對應,其餘由容器處理:
@Entity
@Table(name = "ACCOUNT")
public class Account implements java.io.Serializable {
@Id
public String getUserId() { return userId; }
@Embedded
public ContactDetails getContactDetails() { return info; }
@Column(name = "FIRSTNAME")
public String getGivenName() { return givenName; }
}
透過 @WebService、@SOAPBinding、@WebMethod、@WebResult 等註解,直接在介面層定義 Web 服務契約:
@WebService(name="MyPOIntf", targetNamespace = "urn:MyPurchaseOrderService")
@SOAPBinding(style = SOAPBinding.Style.RPC)
public interface MyPOIntf extends Remote {
@WebMethod
@WebResult(name="result")
public String submitPODetails(String poXMLString) throws RemoteException;
}
工具可自動處理這些中繼資料,生成 WSDL、Stub 等成品,讓資深開發者也能輕鬆將既有業務邏輯發布為 Web 服務。
Java EE 5.0 預計半年至一年內正式上市,屆時將催生大量 Web 服務開發者。其核心價值在於「慣例優於配置」與「註解驅動開發」,讓開發者聚焦業務邏輯而非基礎設施配置,真正實現「易學、好開發」的企業級 Java 平台願景。