UML 至 EJB 轉換

 

UML 至 EJB 轉換將「統一塑型語言 (UML)」模型元素轉換為 Enterprise Bean 和 Java 程式碼。「UML 至 EJB」轉換與 UML 至 Java 轉換相同,不過,它也可以從標示為 EJB 轉換設定檔中之造型的 UML 元素來產生 Enterprise Bean。

 

在使用「UML 至 EJB」轉換之前,您應先熟悉 UML 至 Java 轉換

 

轉換詳細資料

 

轉換來源

轉換目標

目標 EJB 儲存器

EJB 轉換設定檔

UML 至 EJB 轉換配置標籤

目標標籤

實體標籤

階段作業標籤

進階標籤

來源物件的解譯

初始類型

套件

未標示的類別

未標示的介面

未標示的列舉

<<entity>> 類別

<<service>> 類別

<<messageprocessor>> 類別

關聯

EJB 參照

重新套用應用程式情況

支援處理 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 專案相關聯的 EJB 儲存器版本,會影響 UML 至 EJB 轉換。每一個 EJB 儲存器版本各有不同的規則必須遵循,如此 UML 至 EJB 轉換才能正常運作與處理。下表列出不同 EJB 儲存器版本的相關聯規則:

 

EJB 儲存器版本

影響轉換的規則

2.1

產生的儲存器管理的持續性 (CMP) 1.1 Bean 只能具有遠端介面

2.0

產生的 CMP 1.1 Bean 只能具有遠端介面

1.1

  • 無法產生 CMP 2.x Bean
  • 產生的 CMP 1.1 Bean 只能具有遠端介面
  • 產生之 Bean 管理的持續性 (BMP) Bean 只能具有遠端介面
  • 產生的 Session Bean 只能具有遠端介面
  • 無法產生訊息驅動 Bean

 

在您執行轉換前,如果沒有遵循上述規則,EJB 轉換便不會處理來源模型以及進行任何轉換。

 

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 轉換前,應更正這些產生警告的問題。不過,這些警告不會阻止您執行轉換。

 

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 轉換說明文件。

 

<<entity>> 類別

「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 欄位類型對映

如同您在下表中所見,轉換所產生之 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 介面

(若有遠端介面的話)

  • findXxx 的名稱(請參閱「Finder 名稱」表)。
  • 擲出 javax.ejb.FinderException
  • 擲出 java.rmi.RemoteException

 

Finder 名稱

 

UML 作業名稱

finder 方法名稱

xxx

findXxx

findXxx

findXxx

FindXxx

findXxx

 

Home 介面 finder 傳回類型

 

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 方法,但有部分修改:

 

Select 名稱

 

UML 作業名稱

Select 方法名稱

xxx

ejbSelectXxx

selectXxx

ejbSelectXxx

SelectXxx

ejbSelectXxx

ejbSelectXxx

ejbSelectXxx

 

Select 傳回類型

 

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 介面

 

遠端 Home 介面 finder 名稱

 

UML 作業名稱

finder 方法名稱

xxx

findXxx

findXxx

findXxx

FindXxx

findXxx

 

遠端 Home 介面 finder 傳回類型

 

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 實作類別

 

Home 介面 finder 名稱

 

UML 作業名稱

finder 方法名稱

xxx

findXxx

findXxx

findXxx

FindXxx

findXxx

ejbFindXxx

findEjbFindXxx

EjbFindXxx

findEjbFindXxx

 

Bean 類別 finder 名稱

 

UML 作業名稱

finder 方法名稱

xxx

ejbFindXxx

findXxx

ejbFindXxx

FindXxx

ejbFindXxx

ejbFindXxx

ejbFindEjbFindXxx

EjbFindXxx

ejbFindEjbFindXxx

 

Home 介面 finder 傳回類型

 

Java 轉換剖析的傳回類型

finder 方法傳回類型

被對映的集合(例如「集合」、「清單」、「集」等等)

java.util.Collection

<來源類別名稱>[]

java.util.Collection

<來源類別名稱> 或 void

  • 本端介面名稱
  • 遠端介面名稱

<使用者定義的類型名稱>[]

java.util.Collection

<非來源類別名稱(如 String、Integer 等)>[]

java.util.Collection

<使用者定義的類型名稱>

  • 本端介面名稱
  • 遠端介面名稱

<非來源類別名稱(如 String、Integer 等)>

  • 本端介面名稱
  • 遠端介面名稱

 

Bean 類別 finder 傳回類型

 

Java 轉換剖析的傳回類型

finder 方法傳回類型

被對映的集合(例如「集合」、「清單」、「集」等等)

java.util.Collection

<類別名稱>[]

java.util.Collection

<類別名稱> 或 void

索引鍵類別名稱

 

內部類別

已忽略。

 

內部介面

已忽略。

 

<<query>> 類別

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

 

這項轉換會套用下列規則,視作業參數而定,來決定作業傳回類型:

 

內部類別

已忽略。

 

內部介面

已忽略。

 

<<messageprocessor>> 類別

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 可導覽性

  • End1 上限值 = 1
  • End1 上限值 = -1
  • BeanB 對應關係 = 1
  • BeanB 對應關係 = -1,BeanA CMR 類型 = java.lang.Collection
  • End2 上限值 = 1
  • End2 上限值 = -1
  • BeanA 對應關係 = 1
  • BeanA 對應關係 = -1,BeanB CMR 類型 = java.lang.Collection

 

下圖說明具備 <<entity>> 造型的兩個 UML 類別。如果轉換將兩個 Entity 類別產生成 CMP 2.x Entity Bean,這兩個類別間的關聯會產生成 CMR。

 

 

 

在進行轉換後,部署描述子會有一個項目說明 AEntity 與 BEntity 間的 CMR。如您在下圖中所見,專案的部署描述子可顯示兩個 CMP 2.x Entity Bean 間的關聯:

 

 

 

 

 

EJB 參照

下表列出轉換程序如何轉換相依性,和產生具有 <<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 2.x Entity Bean 發生重新套用應用程式情況,可能會進行如下的修改:

 

不應進行下列修正:

 

CMP 1.1 Entity Bean

 

如果 CMP 1.1 Entity Bean 發生重新套用應用程式情況,可能會進行如下的修改:

 

不應進行下列修正:

 

 

BMP Entity Bean

 

如果 BMP Entity Bean 發生重新套用應用程式情況,可能會進行如下的修改:

 

不應進行下列修正:

 

Stateless 和 Stateful Session Bean

 

如果 Session Bean 發生重新套用應用程式情況,可能會進行如下的修改:

 

不應進行下列修正:

 

訊息驅動 Bean

 

如果訊息驅動 Bean 發生重新套用應用程式情況,可能會進行如下的修改:

 

不應進行下列修正:

 

支援處理 UML 元素和視覺化 Enterprise Bean 或 Java 類別之間的關係

 

下表列出 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.