本文展示如何使用 NetBeans IDE 構建基於 OpenESB 的企業級網上商城系統,涵蓋四大子系統劃分、BPEL 流程編排、Web 服務契約設計、JMS 異步通信等核心架構決策與實現細節。

| 子系統 | 技術棧 | 核心職責 |
|---|---|---|
| Store (前台商城) | Java EE 5 | 商品瀏覽、下單、訂單狀態查詢,面向終端用戶 |
| Inventory (庫存管理) | Java EE 5 | 商品信息維護、庫存扣減/回補、有效性校驗,面向商品管理員 |
| Shipping (配送管理) | Java EE 5 | 配送單生成、物流跟蹤、派送狀態更新,面向配送人員 |
| Process Management (流程編排) | OpenESB / BPEL | 跨系統業務流程協調、事務邊界控制、異常補償、服務編排 |
NetBeans 專案結構:

Order_Process:BPEL 流程專案,作為 JBI 模組部署在 Process_Management 組合應用中。
訂單信息採用 XML 格式,Schema 定義關鍵結構:
<xsd:element name="order">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="orderid" type="xsd:string"/>
<xsd:element name="userid" type="xsd:string"/>
<xsd:element name="orderitem" maxOccurs="unbounded">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="goodsid" type="xsd:string"/>
<xsd:element name="count" type="xsd:int"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="address" type="xsd:string"/>
<xsd:element name="tel" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
設計要點:orderitem 支持多商品,address/tel 滿足配送需求,命名空間隔離版本演進。
InventoryService.checkOrderAvailable(Document/Literal SOAP over HTTP)。OrderResult(true/false)。WSDL 關鍵片段:
<operation name="checkOrderAvailable">
<input message="tns:InventoryOperationRequest" /> <!-- part: ns:order -->
<output message="tns:InventoryOperationReply" /> <!-- part: ns0:result -->
</operation>
ShippingService.ShippingOperation 創建配送單 → 設置流程返回 true → 發送確認消息至 JMS → 結束。false → 發送失敗確認 → 結束(無補償動作,因庫存未扣減)。OrderConfirmResult 發送至指定 JMS Destination。orderid、isSuccess、comments 更新本地訂單狀態。確認結果 Schema:
<xsd:element name="orderresult">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="orderid" type="xsd:string"/>
<xsd:element name="isSuccess" type="xsd:boolean"/>
<xsd:element name="comments" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
成功/失敗 XML 示例:
<!-- 成功 -->
<orderresult>
<orderid>1</orderid>
<isSuccess>true</isSuccess>
<comments>Thanks for order</comments>
</orderresult>
<!-- 失敗 -->
<orderresult>
<orderid>2</orderid>
<isSuccess>false</isSuccess>
<comments>Sorry, we have no enough goods</comments>
</orderresult>
wsimport 生成骨架,BPEL 直接引用 Schema/WSDL,確保跨語言/平台互操作。OpenESB (Sun/Java CAPS 遺產) 社區活躍度已低,新建項目建議考慮:
但本案例展示的領域建模、契約設計、同步/異步邊界劃分、流程與服務分層等架構原理,在任何技術棧下均具備參考價值。