UML 至 EJB 轉換將「統一塑型語言 (UML)」模型元素轉換為 Enterprise Bean 和 Java 程式碼。「UML 至 EJB」轉換與 UML 至 Java 轉換相同,不過,它也可以從標示為 EJB 轉換設定檔中之造型的 UML 元素來產生 Enterprise Bean。
在使用「UML 至 EJB」轉換之前,您應先熟悉 UML 至 Java 轉換。
支援處理 UML 元素和視覺化 Enterprise Bean 或 Java 類別之間的關係
您可以從「模型瀏覽器」視圖選取一或多個項目,以作為 UML 至 EJB 轉換的來源。下表列出被轉換視為有效來源的項目:
來源 |
結果 |
UML 模型 |
轉換模型中的所有套件、類別和介面 |
UML 套件 |
轉換套件以及該套件所含的所有類別和介面 |
UML 類別 |
轉換類別以及類別包含的所有屬性、作業、類別和介面 附註:類別的母項必須是 UML 套件 |
UML 介面 |
轉換介面以及介面包含的所有屬性、作業、類別和介面 附註:介面的母項必須是 UML 套件 |
UML 列舉 |
轉換列舉和所有的列舉文字 附註:列舉的母項必須是 UML 套件 |
如果要從來源模型產生 Enterprise Bean, 您必須將 EJB 轉換設定檔套用到該來源模型上, 並以 EJB 轉換設定檔中的造型來標示模型元素。
「UML 至 EJB」轉換接受單一 EJB 專案作為其目標。您可以建立具有或沒有用戶端專案的 EJB 專案。這項轉換會在它於 EJB 專案中所偵測到的第一個來源資料夾中(通常是 ejbModule),以及在它於用戶端專案(如果有的話)中所偵測到的第一個來源資料夾(通常是 src)中,產生程式碼。
和 EJB 專案相關聯的 EJB 儲存器版本,會影響 UML 至 EJB 轉換。每一個 EJB 儲存器版本各有不同的規則必須遵循,如此 UML 至 EJB 轉換才能正常運作與處理。下表列出不同 EJB 儲存器版本的相關聯規則:
EJB 儲存器版本 |
影響轉換的規則 |
2.1 |
產生的儲存器管理的持續性 (CMP) 1.1 Bean 只能具有遠端介面 |
2.0 |
產生的 CMP 1.1 Bean 只能具有遠端介面 |
1.1 |
|
在您執行轉換前,如果沒有遵循上述規則,EJB 轉換便不會處理來源模型以及進行任何轉換。
EJB 轉換設定檔會定義 UML-to-EJB 至 EJB 轉換在產生 Enterprise Bean 時所解譯的造型。下表列出 EJB 轉換設定檔所定義的造型:
造型 |
目標元素 |
UML 至 EJB 轉換的解譯 |
<<entity>> |
UML 類別 |
代表 Entity Bean |
<<service>> |
UML 類別 |
代表具有造型內容 hasState 的 Session Bean 起啟是設為 False,表示 Session Bean 為 Stateless。 |
<<messageprocessor>> |
UML 類別 |
代表訊息驅動 Bean |
<<ID>> |
UML 屬性 |
代表要作為 Entity Bean 主鍵之一部分的 CMP 或 BMP 欄位 |
<<query>> |
UML 作業 |
代表 Entity Bean 中的查詢方法 |
EJB 轉換設定檔亦定義了下列限制:
在您使用 EJB 轉換設定檔來驗證模型時,這些限制會產生警告。在您執行 UML 至 EJB 轉換前,應更正這些產生警告的問題。不過,這些警告不會阻止您執行轉換。
EJB 轉換配置視窗含有下列六個標籤:目標、實體、階段作業、進階、對映 和 共用。本節說明前三個標籤如何影響 EJB 轉換。
目標標籤可用來選取目標 EJB 專案, 以便讓 EJB 轉換在其中產生輸出檔。即使有 EJB 專案可用,您也可以另建新目標儲存器。每一個專案各有單一相關聯的 EJB 儲存器。EJB 轉換支援 EJB 專案精靈所提供之所有可用的 EJB 儲存器版本。
目標 EJB 專案儲存器的版本可能會限制實體與階段作業標籤中可用的選項。如需有關各種 EJB 儲存器類型之限制的詳細資訊,請參閱目標 EJB 儲存器一節。
實體標籤可用來自訂新產生的 Entity Bean。您可以在實體標籤上配置兩個不同的選項:Entity bean 類型和 Entity bean 介面。下圖顯示 EJB 轉換配置視窗中的實體標籤:
視專案中的 EJB 儲存器版本而定,您必須先選出某些內容組合, 才能執行 EJB 轉換。下表列出轉換支援的 Entity Bean 類型、 Entity Bean 支援的介面,以及預設的介面選項:
EJB 儲存器版本 |
Entity Bean 類型 |
支援的 Entity Bean 介面 |
預設選項 |
2.x |
CMP 2.x |
本端與遠端 |
僅本端介面 |
2.x |
CMP 1.1 |
遠端 |
僅遠端介面 |
2.x |
BMP |
本端與遠端 |
僅本端介面 |
1.1 |
CMP 2.x |
無 |
N/A |
1.1 |
CMP 1.1 |
遠端 |
僅遠端介面 |
1.1 |
BMP |
遠端 |
僅遠端介面 |
表格中的預設選項會影響 Entity Bean 建立精靈的預設行為。
如果您選取無效的選項組合,EJB 轉換配置視窗上方會顯示一則錯誤訊息,且用以執行轉換的執行按鈕無法使用。當您選取有效的選項組合,執行按鈕即變成可用,且錯誤訊息消失。
階段作業標籤可用來為新產生的 Session Bean 自訂介面的產生方式。下圖顯示 EJB 轉換配置視窗中的階段作業標籤:
視專案中的 EJB 儲存器版本而定,您必須先選出某些內容組合, 才能執行 EJB 轉換。下表根據 EJB 儲存器版本列出轉換所支援的 Session Bean 介面, 以及預設的介面選項:
EJB 儲存器版本 |
支援的 Session Bean 介面 |
預設選項 |
1.1 |
遠端 |
僅遠端介面 |
2.0 |
本端與遠端 |
僅遠端介面 |
2.1 |
本端與遠端 |
僅遠端介面 |
如果您選取無效的選項組合,EJB 轉換配置視窗上方會顯示一則錯誤訊息,且用以執行轉換的執行按鈕無法使用。要您選取有效的選項組合,執行按鈕即變成可用,且錯誤訊息消失。
如需進階標籤的相關資訊,請參閱 UML 至 Java 轉換說明文件。
本節說明「UML 至 EJB」轉換如何解譯 UML 模型中的元素,和轉換產生的輸出。
UML 至 EJB 轉換在解譯初始類型時所用的方法和 UML 至 Java 轉換 一樣。如果需要詳細資訊, 請參閱 UML 至 Java 轉換說明文件。
UML 至 EJB 轉換在解譯套件時所用的方法和 UML 至 Java 轉換一樣:它會將這些轉換成 Java 套件。如果需要詳細資訊,請參閱 UML 至 Java 轉換說明文件。
UML 至 EJB 轉換在解譯未標示的類別時所用的方法和 UML 至 Java 轉換一樣:它會將這些轉換成 Java 類別。如果需要詳細資訊,請參閱 UML 至 Java 轉換說明文件。
如果未標示之類別中所含的某些屬性的類型,為具備 <<entity>>、<<service>> 或 <<messageprocessor>> 造型之類別的類型,則轉換程序不會產生屬性。轉換反而會在日誌檔中寫入一則訊息, 指出不會轉換來源屬性。
UML 至 EJB 轉換在解譯未標示的介面時所用的方法和 UML 至 Java 轉換一樣:它會將這些轉換成 Java 介面。如果需要詳細資訊,請參閱 UML 至 Java 轉換說明文件。
如果未標示之介面中所含的某些屬性的類型,為具備 <<entity>>、<<service>> 或 <<messageprocessor>> 造型之類別的類型,則轉換程序不會產生屬性。轉換反而會在日誌檔中寫入一則訊息, 指出不會轉換來源屬性。
UML 至 EJB 轉換在解譯未標示的列舉時所用的方法和 UML 至 Java 轉換一樣:它會將這些轉換成 Java 介面。如果需要詳細資訊,請參閱 UML 至 Java 轉換說明文件。
「UML 至 EJB」轉換會將標示為 <<entity>> 造型的類別轉換成 CMP 2.x、CMP 1.1 或 BMP Entity Bean,且其 Bean 名稱等於來源 UML 類別的名稱。所產生之 Entity Bean 的類型會對應至您在 EJB 轉換配置視窗之實體標籤中所選的選項。
這項轉換一律會為 Entity Bean 產生下列的 Java 類別:
當您在實體標籤上按一下僅遠端介面時,這項轉換會產生下列的 Java 類別:
當您在實體標籤上按一下僅本端介面時,這項轉換會產生下列的 Java 類別:
當您在實體標籤上按一下本端與遠端介面時,這項轉換會產生下列的 Java 類別:
轉換會在針對來源 UML 類別之母套件產生的套件資料夾中,產生所有的類別。如果您所建立的 UML 模型不含套件,轉換會產生一個預設套件名稱為 ejbs。
轉換會在目標 EJB 專案的來源樹狀結構中產生 Bean 類別檔與索引鍵類別檔。
轉換會在目標 EJB 專案之用戶端專案的來源樹狀結構中,產生四個介面檔。如果沒有任何用戶端專案存在, 轉換會在目標 EJB 專案中產生介面檔。
轉換會將定義 Entity Bean 的資料新增到部署描述子 (ejb-jar.xml)。
一般化關係
如果 Entity Bean 的來源 UML 類別和另一個具有 <<entity>> 造型的 UML 類別間,存在一般化關係(例如延伸關係),則該類別所代表的 Entity Bean 會成為所要產生之 Entity Bean 的 EJB 超類別。
這兩個 Entity Bean 的類型必須相同。因此,這兩個 Entity Bean 必須是 CMP 2.x、 CMP 1.1 或 BMP。比方說,如果 Super Bean 為 CMP 2.x Entity Bean, 則所有 Child Bean 必須是 CMP 2.x Entity Bean。如果 Super Bean 的類型和預期的 Child Bean 類型不同, 轉換所產生的 Child Bean 將沒有一般化關係。
實現化關係
如果 Entity Bean 的來源 UML 類別和介面元素間存在實現化關係(例如,實作關係),則來源介面所代表的介面會由四個介面(遠端、Home、本端、本端 Home)來實作。
未標示的屬性 - CMP 2.x
轉換會將來源 UML 類別上的屬性轉換成 Entity Bean 上的 CMP 欄位, 且具有下表中所列的內容:
CMP 2.x 欄位內容 |
CMP 欄位值 |
名稱 |
UML 屬性名稱,其中欄位名稱的第一個字元變更為小寫。 |
類型 |
類型取決於屬性類型而定(請參閱「類型對映」表)。 |
索引鍵欄位 |
False |
在 Bean 實作類別中產生欄位 |
False |
產生 getter 和 setter |
True |
將 getter 和 setter 提升至本端介面 |
True(若有本端介面的話) |
將 getter 和 setter 提升至遠端介面 |
True(若有遠端介面的話) |
IsArray |
若 UML 屬性具有有限的上限值即為 True |
如果屬性類型是另一個 CMP 2.x Entity Bean 的屬性類型, 則轉換不會將屬性轉換成 CMP 欄位,但會假設該屬性是關聯的一部分, 而應轉換成 EJB 關係。不過,如果屬性類型是另一個 Enterprise Bean(但非 CMP 2.x Entity Bean)的屬性類型,則轉換不會將屬性轉換成 CMP 欄位或關聯。轉換反而會在日誌檔中寫入一則訊息, 指出不會轉換來源屬性。
未標示的屬性 - CMP 1.1
轉換會將來源 UML 類別上的屬性轉換成 Entity Bean 上的 CMP 欄位, 且具有下表中所列的內容:
CMP 1.1 欄位內容 |
CMP 欄位值 |
名稱 |
UML 屬性名稱,其中欄位名稱的第一個字元變更為小寫。 |
類型 |
類型取決於屬性類型而定(請參閱「類型對映」表)。 |
索引鍵欄位 |
False |
在 Bean 實作類別中產生欄位 |
False |
產生 getter 和 setter |
True |
將 getter 和 setter 提升至本端介面 |
False |
將 getter 和 setter 提升至遠端介面 |
True(固定) |
IsArray |
若 UML 屬性具有有限的上限值即為 True |
如果屬性類型是另一個 Entity Bean 或 Enterprise Bean 的屬性類型, 則轉換不會將屬性轉換成 CMP 欄位或關聯。轉換反而會在日誌檔中寫入一則訊息, 指出不會轉換來源屬性。
未標示的屬性 - BMP
轉換會將來源 UML 類別上的屬性轉換成 Entity Bean 上的 BMP 欄位, 且具有下表中所列的內容:
BMP 欄位內容 |
BMP 欄位值 |
名稱 |
UML 屬性名稱,其中欄位名稱的第一個字元變更為小寫。 |
類型 |
類型取決於屬性類型而定(請參閱「類型對映」表)。 |
索引鍵欄位 |
False |
在 Bean 實作類別中產生欄位 |
True |
產生 getter 和 setter |
True |
將 getter 和 setter 提升至本端介面 |
True(若有本端介面的話) |
將 getter 和 setter 提升至遠端介面 |
True(若有遠端介面的話) |
IsArray |
若 UML 屬性具有有限的上限值即為 True |
如果屬性類型是另一個 Entity Bean 或 EJB 的屬性類型, 則轉換不會將屬性轉換成 BMP 欄位或關聯。轉換反而會在日誌檔中寫入一則訊息, 指出不會轉換來源屬性。
<<ID>> 屬性 - CMP 2.x 和 CMP 1.1
轉換也會將來源 UML 類別上標示為 <<ID>> 屬性的屬性轉換成 CMP 欄位,但具有不同的內容值(請見下表)。這些 CMP 欄位協助形成主鍵。
CMP 2.x 與 CMP 1.1 欄位內容 |
CMP 欄位值 |
名稱 |
UML 屬性名稱,其中欄位名稱的第一個字元變更為小寫。 |
類型 |
類型取決於屬性類型而定(請參閱「類型對映」表)。 |
索引鍵欄位 |
True |
在 Bean 實作類別中產生欄位 |
False |
產生 getter 和 setter |
True |
將 getter 和 setter 提升至本端介面 |
False |
將 getter 和 setter 提升至遠端介面 |
False |
IsArray |
若 UML 屬性具有有限的上限值即為 True |
如果屬性類型是另一個 Entity Bean 或 Enterprise Bean 的屬性類型, 則轉換不會將屬性轉換成 CMP 索引鍵欄位或關聯。轉換反而會在日誌檔中寫入一則訊息, 指出不會轉換來源屬性。
<<ID>> 屬性 - BMP
轉換也會將來源 UML 類別上標示為 <<ID>> 的屬性轉換成 BMP 欄位,但具有不同的內容值(請見下表)。這些 BMP 欄位協助形成主鍵。
BMP 欄位內容 |
BMP 欄位值 |
名稱 |
UML 屬性名稱,其中欄位名稱的第一個字元變更為小寫。 |
類型 |
類型取決於屬性類型而定(請參閱「類型對映」表)。 |
索引鍵欄位 |
True |
在 Bean 實作類別中產生欄位 |
True |
產生 getter 和 setter |
True |
將 getter 和 setter 提升至本端介面 |
False |
將 getter 和 setter 提升至遠端介面 |
False |
IsArray |
若 UML 屬性具有有限的上限值即為 True |
如果屬性類型是另一個 Entity Bean 或 Enterprise Bean 的屬性類型, 則轉換不會將屬性轉換成 BMP 索引鍵欄位或關聯。轉換反而會在日誌檔中寫入一則訊息, 指出不會轉換來源屬性。
如同您在下表中所見,轉換所產生之 CMP 與 BMP 欄位的類型取決於來源屬性的類型而定:
UML 屬性類型 |
CMP/BMP 欄位類型 |
Boolean |
Boolean |
byte |
byte |
char |
char |
float |
float |
int |
int |
long |
long |
short |
short |
Boolean |
java.lang.Boolean |
Byte |
java.lang.Byte |
Char |
java.lang.Char |
Float |
java.lang.Float |
Integer |
java.lang.Integer |
Long |
java.lang.Long |
Short |
java.lang.Short |
String |
java.lang.String |
其他 |
完整名稱 |
未標示的作業
這項轉換會將來源 UML 類別上的未標示作業轉換成 Entity Bean 上的商業方法。一開始, 轉換作業的方式和未標示之 UML 類別上的作業一樣。如果方法名稱的第一個字元是有效的大寫字元,轉換會將其變成小寫字體,強制實施小寫的命名方式。轉換後的作業會新增到下表所列的類別中, 並有部分修改。
類別 |
方法修正 |
Bean 類別 |
無變更 |
本端介面 |
介面方法 |
遠端介面 |
介面方法,擲出 java.rmi.RemoteException |
<<query>> 作業 - CMP 2.x
這項轉換會將來源 UML 類別上的 <<query>> 作業轉換成兩種類型的查詢方法之一:finder 方法和 select 方法。請選取僅存在於 CMP 2.x Entity Bean 中的方法。
轉換會在下表所列的類別中產生 finder 方法,並有部分修改。
類別 |
方法修正 |
本端 Home 介面 (若有本端介面的話) |
|
遠端 Home 介面 (若有遠端介面的話) |
|
UML 作業名稱 |
finder 方法名稱 |
xxx |
findXxx |
findXxx |
findXxx |
FindXxx |
findXxx |
Java 轉換剖析的傳回類型 |
finder 方法傳回類型 |
被對映的集合(例如「集合」、「清單」、「集」等等) |
java.util.Collection |
<來源類別名稱>[] |
java.util.Collection |
<來源類別名稱> 或 void |
|
<使用者定義的類型名稱>[] |
java.util.Collection |
<非來源類別名稱(如 String、Integer 等)>[] |
java.util.Collection |
<使用者定義的類型名稱> |
產生 select 方法而非 finder 方法 |
<非來源類別名稱(如 String、Integer 等)> |
產生 select 方法而非 finder 方法 |
EJB 轉換會建立一項作業,指出您必須手動新增查詢到每一個產生之 finder 方法的部署描述子中。
如果作業上的可見性是 private, 或是傳回類型和來源 UML 類別的名稱不同,且 Entity Bean 類型為 CMP 2.x, 則這項轉換會將查詢作業轉換成 select 方法。
作業可見性 |
傳回類型 |
方法類型 |
Private |
等於來源類別名稱 |
Select 方法 |
不是 private |
等於來源類別名稱 |
finder 方法 |
Private |
不是來源類別名稱 |
Select 方法 |
不是 private |
不是來源類別名稱 |
Select 方法 |
轉換會在 Bean 類別中產生 select 方法,但有部分修改:
UML 作業名稱 |
Select 方法名稱 |
xxx |
ejbSelectXxx |
selectXxx |
ejbSelectXxx |
SelectXxx |
ejbSelectXxx |
ejbSelectXxx |
ejbSelectXxx |
Java 轉換剖析的傳回類型 |
選取方法傳回類型 |
被對映的集合(例如「集合」、「清單」、「集」等等) |
集合類型的完整名稱(例如,java.util.Collection) |
<來源類別名稱>[] |
java.util.Collection |
<來源類別名稱> 或 void |
本端介面名稱 |
<使用者定義的類型名稱>[] |
java.util.Collection |
<非來源類別名稱(如 String、Integer 等)>[] |
java.util.Collection |
<使用者定義的類型名稱> |
使用者定義的類型名稱 |
<非來源類別名稱(如 String、Integer 等)> |
非來源類別名稱 |
EJB 轉換會建立一項作業,指出您必須手動新增查詢到每一個產生之 select 方法的部署描述子中。
<<query>> 作業 - CMP 1.1
這項轉換會將來源 UML 類別上的 <<query>> 作業轉換成下列這種查詢方法類型:finder 方法。CMP 1.1 Entity Bean 不支援 select 方法, 這是因為只有 CMP 2.x Entity Bean 才有提供這些方法。因此,不論 <<query>> 作業的傳回類型與可見性為何,轉換一律會在 Entity Bean 的遠端 Home 介面中產生一個 finder 方法。
如同您在下表中所見,轉換會固定在遠端 Home 介面中產生 finder 方法,並有部分修改:
類別 |
方法修正 |
遠端 Home 介面 |
|
UML 作業名稱 |
finder 方法名稱 |
xxx |
findXxx |
findXxx |
findXxx |
FindXxx |
findXxx |
Java 轉換剖析的傳回類型 |
finder 方法傳回類型 |
被對映的集合(例如「集合」、「清單」、「集」等等) |
java.util.Collection |
<來源類別名稱>[] |
java.util.Collection |
<來源類別名稱> 或 void |
遠端介面名稱 |
<使用者定義的類型名稱>[] |
java.util.Collection |
<非來源類別名稱(如 String、Integer 等)>[] |
java.util.Collection |
<使用者定義的類型名稱> |
遠端介面名稱 |
<非來源類別名稱(如 String、Integer 等)> |
遠端介面名稱 |
EJB 轉換會建立一項作業,指出您必須手動新增查詢到每一個產生之 finder 方法的部署描述子中。
<<query>> 作業 - BMP
這項轉換會將來源 UML 類別上的 <<query>> 作業轉換成下列這種查詢方法類型:finder 方法。任何版本的 BMP Entity Bean 皆不支援 select 方法, 這是因為只有 CMP 2.x Entity Bean 才有提供這些方法。因此,不論 <<query>> 作業的傳回類型與可見性為何,轉換一律會在 Bean實作類別中產生一個 finder 方法。然後,轉換會在 Entity Bean 的現有介面中產生 finder 方法。
如同您在下表中所見,轉換會在下列類別中產生 finder 方法,並有部分修改:
類別 |
方法修正 |
本端 Home 介面 |
|
遠端 Home 介面 (若有遠端介面的話) |
|
Bean 實作類別 |
|
UML 作業名稱 |
finder 方法名稱 |
xxx |
findXxx |
findXxx |
findXxx |
FindXxx |
findXxx |
ejbFindXxx |
findEjbFindXxx |
EjbFindXxx |
findEjbFindXxx |
UML 作業名稱 |
finder 方法名稱 |
xxx |
ejbFindXxx |
findXxx |
ejbFindXxx |
FindXxx |
ejbFindXxx |
ejbFindXxx |
ejbFindEjbFindXxx |
EjbFindXxx |
ejbFindEjbFindXxx |
Java 轉換剖析的傳回類型 |
finder 方法傳回類型 |
被對映的集合(例如「集合」、「清單」、「集」等等) |
java.util.Collection |
<來源類別名稱>[] |
java.util.Collection |
<來源類別名稱> 或 void |
|
<使用者定義的類型名稱>[] |
java.util.Collection |
<非來源類別名稱(如 String、Integer 等)>[] |
java.util.Collection |
<使用者定義的類型名稱> |
|
<非來源類別名稱(如 String、Integer 等)> |
|
Java 轉換剖析的傳回類型 |
finder 方法傳回類型 |
被對映的集合(例如「集合」、「清單」、「集」等等) |
java.util.Collection |
<類別名稱>[] |
java.util.Collection |
<類別名稱> 或 void |
索引鍵類別名稱 |
內部類別
已忽略。
內部介面
已忽略。
UML 至 EJB 轉換會將具有 <<query>> 造型的類別轉換成儲存器管理、Stateless 或 Stateful 的 Session Bean,且其 Bean 名稱等同於來源 UML 類別的名稱。這項轉換會固定為 Session Bean 產生下列的 Java 類別:
當您在階段作業標籤上按一下僅遠端介面時,這項轉換會產生下列的 Java 類別:
當您在階段作業標籤上按一下僅本端介面時,這項轉換會產生下列的 Java 類別:
當您在階段作業標籤上按一下本端與遠端介面時,這項轉換會產生下列的 Java 類別:
轉換會在針對來源 UML 類別之母套件產生的套件資料夾中,產生所有的類別。如果您所建立的 UML 模型不含套件,轉換會建立一個預設套件名稱為 ejbs。
轉換會在目標 EJB 專案的來源樹狀結構中產生 Bean 類別檔。
轉換會在目標 EJB 專案之用戶端專案的來源樹狀結構中,產生四個介面檔。如果沒有任何用戶端專案存在, 轉換會在目標 EJB 專案中產生介面檔。
轉換會將定義 Session Bean 的資料新增到部署描述子 (ejb-jar.xml)。
造型內容 - hasState
每一個具備 <<service>> 造型的 UML 類別都有一個名稱為 hasState 的造型內容。當 hasState 的值為 False 時,轉換會將該 UML 類別產生成 Stateless Session Bean。相反地,當 hasState 的值為 True 時,轉換會將該 UML 類別產生成 Stateful Session Bean。
附註:造型內容只對轉換會產生成新 Session Bean 的 UML 類別造成影響。
依預設,hasState 內容值為 False,這和 Session Bean 建立精靈中的預設值一致。
一般化關係
如果 Session Bean 的來源 UML 類別和另一個具有 <<service>> 造型的 UML 類別間,存在一般化關係(例如延伸關係),且該造型具有相同的 hasState 內容值,則該類別所代表的 Session Bean 會成為所要產生之 Session Bean 的 EJB 超類別。
實現化關係
如果 Session Bean 的來源 UML 類別和介面元素間存在實現化關係 (例如,實作關係), 則來源介面所代表的介面會由四個介面(遠端、Home、本端、本端 Home)來實作。
屬性
這項轉換會將來源 UML 類別上的屬性轉換成 Bean 類別中的 Java 內容。如需屬性之轉換方式的相關資訊,請參閱 UML 至 Java 轉換說明文件。如果內容名稱的第一個字元是有效的大寫字元,轉換會將其變成小寫字體,強制實施小寫的命名方式。
如果屬性的類型為另一個 Enterprise Bean 的類型, 則 EJB 轉換不會產生 Session Bean 的欄位與關聯。轉換反而會在日誌檔中寫入一則訊息, 指出不會轉換來源屬性。
作業
這項轉換會將來源 UML 類別上的作業轉換成 Session Bean 上的商業方法。一開始, 轉換作業的方式和未標示之 UML 類別上的作業一樣。如果方法名稱的第一個字元是有效的大寫字元,轉換會將其變成小寫字體,強制實施小寫的命名方式。 轉換後的作業會新增到下表所列的類別中, 並有部分修改。
類別 |
方法修正 |
Bean 類別 |
無變更 |
本端介面 |
介面方法 |
遠端介面 |
介面方法,擲出 java.rmi.RemoteException |
這項轉換會套用下列規則,視作業參數而定,來決定作業傳回類型:
o 作業已傳回並輸出參數
o 作業有多個輸出參數
內部類別
已忽略。
內部介面
已忽略。
UML 至 EJB 轉換會將具有 <<messageprocessory>> 造型的類別轉換成訊息驅動 Bean,且其 Bean 名稱等同於來源 UML 類別的名稱,並具有預設資料。這項轉換會產生下列 Java 類別:
轉換會在針對來源 UML 類別之母套件產生的套件資料夾中產生類別。如果您所建立的 UML 模型不含套件,轉換會建立一個預設套件名稱為 ejbs。
轉換會在目標 EJB 專案的來源樹狀結構中產生 Bean 類別檔。
轉換會將定義訊息驅動 Bean 的資料新增到部署描述子 (ejb-jar.xml)。
一般化關係
如果訊息驅動 Bean 的來源 UML 類別和另一個具有 <<messageprocessor>> 造型的 UML 類別間,存在一般化關係(例如延伸關係),則該類別所代表的訊息驅動 Bean 會成為所要產生之 Entity Bean 的 EJB 超類別。
實現化關係
已忽略。
屬性
這項轉換會將來源 UML 類別上的屬性轉換成 Bean 類別中的 Java 內容。如需屬性之轉換方式的相關資訊,請參閱 UML 至 Java 轉換說明文件。如果屬性的類型為另一個 Enterprise Bean 的類型, 則 EJB 轉換不會產生 Session Bean 的欄位與關聯。轉換反而會在日誌檔中寫入一則訊息, 指出不會轉換來源屬性。
作業
這項轉換會將來源 UML 類別上的作業轉換成典型的 Java 方法, 猶如訊息驅動 Bean 是 Java 類別一樣。
內部類別
已忽略。
內部介面
已忽略。
一般而言,轉換程序轉換關聯的方式和 UML 至 Java 轉換一樣:它會將端點屬性轉換成 Java 內容。
如果關聯中的某個端點為具備 <<entity>>、<<service>> 或 <<messageprocessor>> 造型的類別,則轉換程序不會轉換該端點。轉換程序反而會在 metadata 目錄中的日誌檔內寫入一則訊息, 指出端點內容未轉換。不過,如果是具備 <<entity>> 造型之兩個類別間的關聯,且這兩個類別皆產生成 CMP 2.x Bean,則為例外。接著,轉換會將 UML 關聯轉換成 EJB 2.0 關係(亦稱為 儲存器管理的關係 (CMR))。下表說明關聯內容和 EJB 關係內容間的對映:
關聯內容 |
EJB 關係內容 |
End1 |
BeanA |
End2 |
BeanB |
End1 名稱 |
BeanB CMR 名稱 |
End2 名稱 |
BeanA CMR 名稱 |
End1 可導覽性 |
BeanB 可導覽性 |
End2 可導覽性 |
BeanA 可導覽性 |
|
|
|
|
下圖說明具備 <<entity>> 造型的兩個 UML 類別。如果轉換將兩個 Entity 類別產生成 CMP 2.x Entity Bean,這兩個類別間的關聯會產生成 CMR。
在進行轉換後,部署描述子會有一個項目說明 AEntity 與 BEntity 間的 CMR。如您在下圖中所見,專案的部署描述子可顯示兩個 CMP 2.x Entity Bean 間的關聯:
下表列出轉換程序如何轉換相依性,和產生具有 <<entity>>、<<服務>> 或 <<訊息處理器>> 造型的類別之 EJB 參照。
UML 相依關係來源 |
UML 相依關係目標 |
EJB 目標 |
<<entity>> 類別 |
<<entity>> 類別 |
EJB 參照 |
<<entity>> 類別 |
<<service>> 類別 |
EJB 參照 |
<<messageprocessor>> 類別 |
<<entity>> 類別 |
EJB 參照 |
<<messageprocessor>> 類別 |
<<service>> 類別 |
EJB 參照 |
<<service>> 類別 |
<<entity>> 類別 |
EJB 參照 |
<<service>> 類別 |
<<service>> 類別 |
EJB 參照 |
當目標 Java 2 平台企業版 (J2EE) 專案中至少有一個 Bean 和轉換中的 UML 類別同名與同名稱空間時,便可能發生重新套用應用程式情況。重新套用應用程式情況是指現有 Enterprise Bean 的類型,和 UML 模型中之對應類別所要產生之 Enterprise Bean 的類型相符。
當所要產生之 Enterprise Bean 的類型,和現有 Enterprise Bean 的類型不相容時,即會出現衝突情況。在衝突情況下,UML 至 EJB 轉換不會更新現有的 Bean,且不會產生新 Enterprise Bean。
下表列出轉換對於 CMP 2.x Entity Bean 可能出現的重新套用應用程式情況,預期做出的反應:
要產生的 Enterprise Bean |
現有的 Enterprise Bean |
預期的情況 |
轉換的反應 |
CMP 2.x |
CMP 2.x |
重新套用應用程式 |
更新 CMP 欄位與方法 |
CMP 2.x |
CMP 1.1 |
重新套用應用程式 |
更新 CMP 欄位與方法(如同一般的 CMP 1.1 至 CMP 1.1 重新套用應用程式情況)scenario |
CMP 2.x |
BMP |
重新套用應用程式 |
更新 BMP 欄位與方法(如同一般的 BMP 至 BMP 重新套用應用程式情況) |
CMP 2.x |
階段作業(Stateful 或 stateless) |
衝突 |
讓 Session Bean 維持不接觸 |
CMP 2.x |
訊息驅動 |
衝突 |
讓訊息驅動 Bean 維持不接觸 |
下表列出轉換對於 CMP 1.1 Entity Bean 可能出現的重新套用應用程式情況,預期做出的反應:
要產生的 Enterprise Bean |
現有的 Enterprise Bean |
預期的情況 |
轉換的反應 |
CMP 1.1 |
CMP 2.x |
重新套用應用程式 |
更新 CMP 欄位與方法(如同一般的 CMP 2.x 至 CMP 2.x 重新套用應用程式情況) |
CMP 1.1 |
CMP 1.1 |
重新套用應用程式 |
更新 CMP 欄位與方法 |
CMP 1.1 |
BMP |
重新套用應用程式 |
更新 BMP 欄位、方法與關聯(如同一般的 BMP 至 BMP 重新套用應用程式情況) |
CMP 1.1 |
階段作業 (Stateful 或 Stateless) |
衝突 |
讓 Session Bean 維持不接觸 |
CMP 1.1 |
訊息驅動 |
衝突 |
讓訊息驅動 Bean 維持不接觸 |
下表列出轉換對於 BMP Entity Bean 可能出現的重新套用應用程式情況,預期做出的反應:
要產生的 Enterprise Bean |
現有的 Enterprise Bean |
預期的情況 |
轉換的反應 |
BMP |
CMP 2.x |
重新套用應用程式 |
更新 CMP 欄位與方法(如同一般的 CMP 2.x 至 CMP 2.x 重新套用應用程式情況) |
BMP |
CMP 1.1 |
重新套用應用程式 |
更新 CMP 欄位與方法(如同一般的 CMP 1.1 至 CMP 1.1 重新套用應用程式情況) |
BMP |
BMP |
重新套用應用程式 |
更新 BMP 欄位與方法 |
BMP |
階段作業 (Stateful 或 Stateless) |
衝突 |
讓 Session Bean 維持不接觸 |
BMP |
訊息驅動 |
衝突 |
讓訊息驅動 Bean 維持不接觸 |
下表列出轉換對於 Session Bean 可能出現的重新套用應用程式情況,預期做出的反應:
要產生的 Enterprise Bean |
現有的 Enterprise Bean |
預期的情況 |
轉換的反應 |
階段作業 (Stateful 或 Stateless) |
CMP 2.x |
衝突 |
讓 CMP 2.x Bean 維持不接觸 |
階段作業 (Stateful 或 Stateless) |
CMP 1.1 |
衝突 |
讓CMP 1.1 Bean 維持不接觸 |
階段作業 (Stateful 或 Stateless) |
BMP |
|
讓 BMP Bean 維持不接觸 |
階段作業 (Stateful) |
Session (僅 Stateful) |
重新套用應用程式 |
更新 Session Bean 的欄位與方法 |
階段作業 (Stateful) |
Session (僅 stateless) |
衝突 |
讓 Stateless Session Bean 維持不接觸 |
Session (stateless) |
Session (僅 Stateful) |
衝突 |
讓 Stateful Session Bean 維持不接觸 |
Session (stateless) |
Session (僅 stateless) |
重新套用應用程式 |
更新 Session Bean 的欄位與方法 |
階段作業 (Stateful 或 Stateless) |
訊息驅動 |
衝突 |
讓訊息驅動 Bean 維持不接觸 |
下表列出轉換對於訊息驅動 Bean 可能出現的重新套用應用程式情況,預期做出的反應:
要產生的 Enterprise Bean |
現有的 Enterprise Bean |
預期的情況 |
轉換的反應 |
訊息驅動 |
CMP 2.x |
衝突 |
讓訊息驅動 Bean 維持不接觸 |
訊息驅動 |
CMP 1.1 |
衝突 |
讓訊息驅動 Bean 維持不接觸 |
訊息驅動 |
BMP |
衝突 |
讓訊息驅動 Bean 維持不接觸 |
訊息驅動 |
階段作業 (Stateful 或 Stateless) |
衝突 |
讓訊息驅動 Bean 維持不接觸 |
訊息驅動 |
訊息驅動 |
重新套用應用程式 |
更新訊息驅動 Bean 的欄位與方法 |
下表列出轉換對未標示的 UML 類別可能出現的重新套用應用程式情況,預期做出的反應:
UML 類別中的造型 |
現有的 Enterprise Bean |
預期的情況 |
轉換的反應 |
未標示 |
CMP 2.x |
重新套用應用程式 |
更新其現有遠端介面中之 CMP 2.x Entity Bean 的欄位與方法 |
未標示 |
CMP 1.1 |
重新套用應用程式 |
更新其現有遠端介面中之 CMP 1.1 Entity Bean 的欄位與方法 |
未標示 |
BMP |
重新套用應用程式 |
更新其現有遠端介面中之 BMP Entity Bean 的欄位與方法 |
未標示 |
階段作業 (Stateful 或 Stateless) |
重新套用應用程式 |
更新其現有遠端介面中之 Session 的欄位與方法 |
未標示 |
訊息驅動 |
重新套用應用程式 |
產生典型的 Java 類別 |
在未標示之 UML 類別的重新套用應用程式情況中,當對現有 Enterprise Bean 的遠端介面進行程式碼更新時,會在 EJB 專案中造成建置錯誤。會發生這些建置錯誤是因遠端介面中之已更新的程式碼, 不符合遠端介面的 EJB 規格。如果您打算改寫整個 Enterprise Bean,您必須先移除現有的 Enterprise Bean,然後再執行 EJB 轉換。
本節詳述轉換對重新套用應用程式情況的反應,並進一步說明在重新套用應用程式後,預期轉換會有何反應。
如果 CMP 2.x Entity Bean 發生重新套用應用程式情況,可能會進行如下的修改:
不應進行下列修正:
如果 CMP 1.1 Entity Bean 發生重新套用應用程式情況,可能會進行如下的修改:
不應進行下列修正:
如果 BMP Entity Bean 發生重新套用應用程式情況,可能會進行如下的修改:
不應進行下列修正:
如果 Session Bean 發生重新套用應用程式情況,可能會進行如下的修改:
不應進行下列修正:
如果訊息驅動 Bean 發生重新套用應用程式情況,可能會進行如下的修改:
不應進行下列修正:
下表列出 UML 至 EJB 轉換如何處理關係:
UML 來源元素 |
視覺化的目標元素 |
關係類型 |
轉換結果 |
具有 <<entity>> 或 <<service>> 造型的類別 |
Java 介面(UML 介面) |
實作 |
產生 Enterprise Bean 實作視覺化的介面 |
具有 <<entity>> 或 <<service>> 造型的類別 |
Java 介面(UML 介面) |
實現化 |
產生 Enterprise Bean 實作視覺化的介面 |
具有 <<entity>> 造型的類別 |
視覺化的 Entity Bean(UML 元件) |
關聯 |
CMR 關係 |
具有 <<entity>>、<<service>> 或 <<messageprocessor>> 造型的類別 |
視覺化的 Entity Bean 或 Session Bean(UML 元件) |
相依關係 |
EJB 參照 |
「UML 至 EJB」轉換支援與團隊功能間的整合。當您和來源控制項環境中的目標專案進行轉換時, 系統會提示您將新檔案新增到來源控制項中,並移出現有的檔案。
「UML 至 EJB」轉換所提供的對映支援類似「UML 至 Java」轉換所提供之對映支援。如需如何設定及使用對映模型來執行轉換的相關資訊, 請參閱 UML 至 Java 轉換說明文件。
當來源類別標示為要轉換成 Enterprise Bean 時, 這項轉換會使用來源類別的對映名稱作為所產生之 Enterprise Bean 的 Bean 名稱。
若有啟用產生來源和目標關係特性,則這項轉換會將一些標示新增到所產生之 Java 類別和介面的 API 說明文件中。標示中所含的資訊可讓工具從產生的檔案追蹤到原始 UML 來源元素。
針對產生的 Enterprise Bean,這項轉換對於 Enterprise Bean 所產生的所有 Java 檔都具有來源和目標 API 說明文件標示,且這些標示都指向單一 UML 來源類別。
使用條款 | 意見
(C) Copyright IBM Corporation 2004, 2005. All Rights Reserved.