“UML 到 EJB”转换将标记有 <<Entity>> 构造型的类转换成具有与源 UML 类名相同的 Bean 名称的 CMP 2.x、CMP 1.1 或 BMP 实体 Bean。生成的实体 Bean 的类型对应于您在 EJB 转换配置窗口中的实体选项卡上选择的选项。
转换总是为实体 Bean 生成以下 Java 类:
在实体选项卡上单击仅远程接口时,转换生成以下 Java 类:
在实体选项卡上单击仅本地接口时,转换生成以下 Java 类:
在实体选项卡上单击本地和远程接口时,转换生成以下 Java 类:
转换在为源 UML 类的父包生成的包文件夹中生成所有类。如果您在创建 UML 模型时没有包,转换就会生成名为 ejbs 的缺省包。
转换在目标 EJB 项目的源树中生成 Bean 类和键类文件。
转换在目标 EJB 项目的客户端项目的源树中生成 4 个接口文件。如果不存在客户端项目,则转换在目标 EJB 项目中生成接口文件。
转换将定义实体 Bean 的数据添加到部署描述符(ejb-jar.xml)中。
如果实体 Bean 的源 UML 类与具有构造型 <<Entity>> 的另一个 UML 类存在泛化关系(例如:扩展关系),则类表示的实体 Bean 成为要生成的实体 Bean 的 EJB 超类。
这两个实体 Bean 必须具有相同的类型。因此,这两个实体 Bean 必须都是 CMP 2.x、CMP 1.1 或 BMP。例如:如果超级 Bean 是 CMP 2.x 实体 Bean,所有子代 Bean 就必须是 CMP 2.x 实体 Bean。如果超级 Bean 的类型与期望的子代 Bean 的类型不同,转换就会生成子代 Bean,而不带泛化关系。
如果实体 Bean 的源 UML 类与接口元素有实现关系(例如:实施关系),源接口所代表的接口则由 4 个接口进行实施(远程接口、主接口、本地接口和本地主接口)。
转换将源 UML 类上的属性转换成实体 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 实体 Bean 的属性类型,则转换不将属性转换为 CMP 字段,但假定此属性是应转换为 EJB 关系的关联的一部分。 但如果属性类型是另一个不是 CMP 2.x 实体 Bean 的企业 Bean 的属性类型,则转换不将属性转换为 CMP 字段或关联。而是转换将消息写入说明不转换源属性的日志文件中。
转换将源 UML 类上的属性转换成实体 Bean 上的 CMP 字段,且具有下表所列的属性:
CMP 1.1 字段属性 |
CMP 字段值 |
名称 |
UML 属性名 |
类型 |
从属性类型确定的类型(请参阅“类型映射”表。) |
关键字段 |
False |
在 Bean 实施类中生成字段 |
False |
生成 getter 方法和 setter 方法 |
True |
将 getter 方法和 setter 方法提升为本地接口 |
False |
将 getter 方法和 setter 方法提升为远程接口 |
True(始终) |
IsArray |
如果 UML 属性具有有限的上限值,则为 True |
如果属性类型是另一个实体 Bean 或企业 Bean 的属性类型,则转换不将属性转换成 CMP 字段或关联。 而是转换将消息写入说明不转换源属性的日志文件中。
转换将源 UML 类上的属性转换成实体 Bean 上的 BMP 字段,且具有下表所列的属性:
BMP 字段属性 |
BMP 字段值 |
名称 |
UML 属性名 |
类型 |
从属性类型确定的类型(请参阅“类型映射”表。) |
关键字段 |
False |
在 Bean 实施类中生成字段 |
True |
生成 getter 方法和 setter 方法 |
True |
将 getter 方法和 setter 方法提升为本地接口 |
True(如果本地接口存在) |
将 getter 方法和 setter 方法提升为远程接口 |
True(如果远程接口存在) |
IsArray |
如果 UML 属性具有有限的上限值,则为 True |
如果属性类型是另一个实体 Bean 或 EJB 的属性类型,则转换不将属性转换成 BMP 字段或关联。 而是转换将消息写入说明不转换源属性的日志文件中。
转换也将标记有 <<Id>> 属性的源 UML 类上的属性转换成 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 |
如果属性类型是另一个实体 Bean 或企业 Bean 的属性类型,则转换不将属性转换成 CMP 关键字段或关联。 而是转换将消息写入说明不转换源属性的日志文件中。
转换也将标记有 <<Id>> 的源 UML 类上的属性转换成 BMP 字段,但属性值不同,如下表所列出的那样。这些 BMP 字段帮助形成主键。
BMP 字段属性 |
BMP 字段值 |
名称 |
UML 属性名 |
类型 |
从属性类型确定的类型(请参阅“类型映射”表。) |
关键字段 |
True |
在 Bean 实施类中生成字段 |
True |
生成 getter 方法和 setter 方法 |
True |
将 getter 方法和 setter 方法提升为本地接口 |
False |
将 getter 方法和 setter 方法提升为远程接口 |
False |
IsArray |
如果 UML 属性具有有限的上限值,则为 True |
如果属性类型是另一个实体 Bean 或企业 Bean 的属性类型,则转换不将属性转换成 BMP 关键字段或关联。 而是转换将消息写入说明不转换源属性的日志文件中。
如下表所说明的,转换基于源属性类型生成具有相应类型的 CMP 和 BMP 字段:
UML 属性类型 |
CMP/BMP 字段类型 |
布尔型 |
布尔型 |
字节 |
字节 |
字符型 |
字符型 |
浮点型 |
浮点型 |
整型 |
整型 |
长整型 |
长整型 |
短整型 |
短整型 |
布尔型 |
java.lang.Boolean |
字节 |
java.lang.Byte |
字符型 |
java.lang.Char |
浮点型 |
java.lang.Float |
整型 |
java.lang.Integer |
长整型 |
java.lang.Long |
短整型 |
java.lang.Short |
字符串 |
java.lang.String |
其他 |
标准名称 |
转换将源 UML 类上的未标记的操作转换成实体 Bean 上的业务方法。最初,转换该操作与转换未标记 UML 类上的操作相同。经过某些修改的已转换操作被添加到下表列出的类中。
类 |
方法修改 |
Bean 类 |
无更改 |
本地接口 |
接口方法 |
远程接口 |
接口方法,抛出 java.rmi.RemoteException |
转换将源 UML 类上的 <<Query>> 操作转换成以下两种查询方法之一:finder 方法和 select 方法。select 方法仅存在于 CMP 2.x 实体 Bean 中。
转换加以某些修改后,在下表中列出的类中生成 finder 方法:
类 |
方法修改 |
本地主接口 (如果本地接口存在) |
|
远程主接口 (如果远程接口存在) |
|
UML 操作名称 |
finder 方法名 |
xxx |
findXxx |
findXxx |
findXxx |
FindXxx |
findXxx |
Java 转换分析的返回类型 |
finder 方法返回类型 |
集合 |
java.util.Collection |
组 |
java.util.Set |
列表 |
java.util.Collection |
排序列表 |
java.util.Set |
<源类名>[] |
java.util.Collection |
<源类名>或“void” |
|
<用户定义的类型名称>[] |
java.util.Collection |
<非源类名(例如:字符串、整型等)>[] |
java.util.Collection |
<用户定义的类型名称> |
生成 select 方法而不是 finder 方法 |
<非源类名(例如:字符串、整型等)> |
生成 select 方法而不是 finder 方法 |
EJB 转换创建一个任务,该任务指示您需要将查询手工添加到每个生成的 finder 方法的部署描述符中。
如果操作的可视性是私有的,或者如果返回类型不同于源 UML 类的名称且实体 Bean 类型为 CMP 2.x,则转换将查询操作转换成 select 方法。
操作可视性 |
返回类型 |
方法类型 |
私有 |
等于源类名 |
select 方法 |
非私有 |
等于源类名 |
finder 方法 |
私有 |
非源类名 |
select 方法 |
非私有 |
非源类名 |
select 方法 |
转换通过对以下各项进行修改后,在 Bean 类中生成 select 方法:
UML 操作名称 |
Select 方法名 |
xxx |
ejbSelectXxx |
selectXxx |
ejbSelectXxx |
SelectXxx |
ejbSelectXxx |
ejbSelectXxx |
ejbSelectXxx |
Java 转换分析的返回类型 |
select 方法返回类型 |
集合 |
java.util.Collection |
组 |
java.util.Set |
列表 |
java.util.Collection |
排序列表 |
java.util.Set |
<源类名>[] |
java.util.Collection |
<源类名>或“void” |
本地接口名称 |
<用户定义的类型名称>[] |
java.util.Collection |
<非源类名(例如:字符串、整型等)>[] |
java.util.Collection |
<用户定义的类型名称> |
用户定义的类型名称 |
<非源类名(例如:字符串、整型等)> |
非源类名 |
EJB 转换创建一个任务,该任务指示您需要将查询手工添加到每个生成的 select 方法的部署描述符中。
转换将源 UML 类上的 <<Query>> 操作转换成一种查询方法:finder 方法。CMP 1.1 实体 Bean 不支持 select 方法,因为这些方法仅可用于 CMP 2.x 实体 Bean。因此,无论 <<Query>> 操作的返回类型和可视性如何,转换总是在实体 Bean 的远程主接口中生成 finder 方法。
如下表所说明的,转换加以某些修改后,总是在远程主接口中生成 finder 方法:
类 |
方法修改 |
远程主接口 |
|
UML 操作名称 |
finder 方法名 |
xxx |
findXxx |
findXxx |
findXxx |
FindXxx |
findXxx |
Java 转换分析的返回类型 |
finder 方法返回类型 |
集合 |
java.util.Collection |
组 |
java.util.Set |
列表 |
java.util.Collection |
排序列表 |
java.util.Set |
<源类名>[] |
java.util.Collection |
<源类名>或“void” |
远程接口名称 |
<用户定义的类型名称>[] |
java.util.Collection |
<非源类名(例如:字符串、整型等)>[] |
java.util.Collection |
<用户定义的类型名称> |
远程接口名称 |
<非源类名(例如:字符串、整型等)> |
远程接口名称 |
EJB 转换创建一个任务,该任务指示您需要将查询手工添加到每个生成的 finder 方法的部署描述符中。
转换将源 UML 类上的 <<Query>> 操作转换成一种查询方法:finder 方法。任何版本的 BMP 实体 Bean 都不支持 select 方法,因为这些方法仅可用于 CMP 2.x 实体 Bean。因此,无论 <<Query>> 操作的返回类型和可视性如何,转换总是在 Bean 实施类中生成 finder 方法。然后,转换在实体 Bean 的现有接口中生成 finder 方法。
如下表所说明的,转换加以某些修改后,在以下类中生成 finder 方法:
类 |
方法修改 |
本地主接口 |
|
远程主接口 (如果远程接口存在) |
|
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.Set |
列表 |
java.util.Collection |
排序列表 |
java.util.Set |
<源类名>[] |
java.util.Collection |
<源类名>或“void” |
|
<用户定义的类型名称>[] |
java.util.Collection |
<非源类名(例如:字符串、整型等)>[] |
java.util.Collection |
<用户定义的类型名称> |
|
<非源类名(例如:字符串、整型等)> |
|
Java 转换分析的返回类型 |
finder 方法返回类型 |
集合 |
java.util.Collection |
组 |
java.util.Set |
列表 |
java.util.Collection |
排序列表 |
java.util.Set |
<类名>[] |
java.util.Collection |
<类名>或“void” |
键类名称 |
忽略。
忽略。