「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 Super 類別。
這兩個 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)來實作。
轉換會將來源 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 欄位或關聯。轉換反而會在日誌檔中寫入一則訊息, 指出不會轉換來源屬性。
轉換會將來源 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 欄位或關聯。轉換反而會在日誌檔中寫入一則訊息, 指出不會轉換來源屬性。
轉換會將來源 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 欄位或關聯。轉換反而會在日誌檔中寫入一則訊息, 指出不會轉換來源屬性。
轉換也會將來源 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 索引鍵欄位或關聯。轉換反而會在日誌檔中寫入一則訊息, 指出不會轉換來源屬性。
轉換也會將來源 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 |
這項轉換會將來源 UML 類別上的 <<Query>> 作業轉換成兩種類型的查詢方法之一: finder 方法和 select 方法。請選取僅存在於 CMP 2.x Entity Bean 中的方法。
轉換會在下表所列的類別中產生 finder 方法,並有部分修改。
類別 |
方法修正 |
本端 Home 介面 (若有本端介面的話) |
|
遠端 Home 介面 (若有遠端介面的話) |
|
UML 作業名稱 |
finder 方法名稱 |
xxx |
findXxx |
findXxx |
findXxx |
FindXxx |
findXxx |
Java 轉換剖析的傳回類型 |
finder 方法傳回類型 |
Collection |
java.util.Collection |
Set |
java.util.Set |
List |
java.util.Collection |
SortedList |
java.util.Set |
<來源類別名稱>[] |
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 轉換剖析的傳回類型 |
選取方法傳回類型 |
Collection |
java.util.Collection |
Set |
java.util.Set |
List |
java.util.Collection |
SortedList |
java.util.Set |
<來源類別名稱>[] |
java.util.Collection |
<來源類別名稱> 或 “void” |
本端介面名稱 |
<使用者定義的類型名稱>[] |
java.util.Collection |
<非來源類別名稱(如 String、Integer 等)>[] |
java.util.Collection |
<使用者定義的類型名稱> |
使用者定義的類型名稱 |
<非來源類別名稱(如 String、Integer 等)> |
非來源類別名稱 |
EJB 轉換會建立一項作業,指出您必須手動新增查詢到每一個產生之 select 方法的部署描述子中。
這項轉換會將來源 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 方法傳回類型 |
Collection |
java.util.Collection |
Set |
java.util.Set |
List |
java.util.Collection |
SortedList |
java.util.Set |
<來源類別名稱>[] |
java.util.Collection |
<來源類別名稱> 或 “void” |
遠端介面名稱 |
<使用者定義的類型名稱>[] |
java.util.Collection |
<非來源類別名稱(如 String、Integer 等)>[] |
java.util.Collection |
<使用者定義的類型名稱> |
遠端介面名稱 |
<非來源類別名稱(如 String、Integer 等)> |
遠端介面名稱 |
EJB 轉換會建立一項作業,指出您必須手動新增查詢到每一個產生之 finder 方法的部署描述子中。
這項轉換會將來源 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 方法傳回類型 |
Collection |
java.util.Collection |
Set |
java.util.Set |
List |
java.util.Collection |
SortedList |
java.util.Set |
<來源類別名稱>[] |
java.util.Collection |
<來源類別名稱> 或 “void” |
|
<使用者定義的類型名稱>[] |
java.util.Collection |
<非來源類別名稱(如 String、Integer 等)>[] |
java.util.Collection |
<使用者定義的類型名稱> |
|
<非來源類別名稱(如 String、Integer 等)> |
|
Java 轉換剖析的傳回類型 |
finder 方法傳回類型 |
Collection |
java.util.Collection |
Set |
java.util.Set |
List |
java.util.Collection |
SortedList |
java.util.Set |
<類別名稱>[] |
java.util.Collection |
<類別名稱> 或 “void” |
索引鍵類別名稱 |
忽略。
忽略。