在這一新系列文章中,您將學習如何最佳設計和優化 Enterprise JavaBeans 組件、如何減少 RMI 通信和 JNDI 訪問以及最有效地使用企業應用程序。在每篇技巧文章中,企業 Java 編程方面的主要權威人士 Brett McLaughlin 將提供最佳實踐或設計模式。許多技巧文章將建立在前面的文章之上。建議您按順序閱讀這些技巧文章,因為它們將幫助您構建有助於您自己的企業應用程序編程的策略和設計方法。在本篇(也是第一篇)技巧文章中,Brett 演示了業務接口模式如何能夠改進遠程對象設計。
如果您開發過許多 EJB 組件,那麼您很清楚遠程對象設計的難點。分布 EJB 組件的核心是能夠將 bean 的實現(由 Bean 類表示)與其接口(由遠程或本地接口表示)分開。接口是公開給客戶機的,並且通常用在與實際的實現類不同的 JVM 中。這意味著在代碼這一級它們彼此之間很少有依賴關系;又意味著,接口中可能有一些不在實現中的方法,反之亦然。例如,實現類的實用程序方法不必放在遠程接口上。
警告:不要將這種模式與實體 bean 一起使用!
業務接口模式僅適用於會話 bean 和消息驅動的 bean;該模式不適用於實體 bean,它永遠都不應該直接公開給應用層。事實上,業務接口模式在 EJB 2.0 實體 bean 中會停止工作,因為這些類被聲明為 abstract,所以不能被選中。
到目前為止,沒有什麼是聽起來不可管理的,但您要認識到有時方法中的不匹配是無意的,這時情況就會有所變化。在部署 bean 時,您會認識到需要一個新方法,此時,很自然地就會發生這種情況。將方法添加到了 bean 實現類中,但隨後忘記將它添加到遠程接口。現在您已經添加了所必需的功能,但還沒有辦法讓遠程用戶真正訪問它。這時就需引入業務接口(Business Interface)模式。
注:業務接口模式不是避免遠程對象設計中不匹配的方法的唯一方法。請閱讀補充文章“業務接口模式的替代方法”以學習其它解決方案。
業務接口模式
首先,需要編寫一個定義所有業務方法的接口。這非常象遠程接口,但不具備 EJB 語義。清單 1 顯示了 Library 對象的一個簡單的業務接口。
清單 1. Library 業務接口
package com.ibm.library;
import com.ibm.library.exceptions.NoSuchBookException;
import java.util.List;
public interface ILibrary {
public List getBooks();
public List getBooks(String category);
public Book getBook(String isbn)