UML软件工程组织

WebSphere Studio和XDE构建应用程序
wayneyesky
  简介

  同时使用Rational扩展开发环境(XDE)和IBM的WebSphere Studio,你可以拥有一个完整优秀的整合平台,用于构建电子商务应用程序。你可以做需求分析、面向对象的设计,并且建模你用来构建和测试代码的相同的信息模型。换句话说,一个工程所有的参与者现在可以"拿着同样的乐谱歌唱了"。在以前,当开发者进行开发过程任务的时候,重复的工具常常需要他们从一个工具向另一个工具导出信息。为了给你一个关于这些不同工具功能的直观认识,我将在本文中使用下面的方案。

  有时候,一个新工程的设计师或者体系结构设计者从头开始设计工程,完全控制这个应用程序的每个方面。然而,通常他们必须处理先前存在的组件并且几乎总要处理先前存在的关系数据库。

  在本方案中,假定你要实现一个网络金融应用程序,允许最终用户从他们的的帐目上付款。作为这个小型应用程序设计师和实现者,你还被要求使用一个现有的并且使用良好的数据库中的表。

  在你的机构中,最近还有一个硬性规定,要求所有新开发项目必须遵循一个正式的"需求、分析和设计"过程。开发过程的这个阶段所选择的工具是Rational XDE,而IBM的WebSphere Studio Application Developer是用于辅助开发和应用程序服务器测试。把这个系统分解成小的模块:

  1. 获得描述你需要构建的应用程序的一些要求。

  2. 创建一个使用案例模式图,显示这个系统内行动者和使用案例之间的关系。

  3. 创建一个顺序图,显示在一个时间顺序中对象的交互(消息)。

  4. 反向操纵一个关系数据库来创建一些企业JavaBean (EJB)组件。

  5. 创建一个类模式图并修改一个Java类。

  6. 配置代码到WebSphere Application Server中,使用WebSphere Studio提供的单元测试器测试。

  收集需求

  第一步一般情况下是收集需求,通常通过走访这个计划构建的应用程序的潜在的最终用户。需求还可以来自手工方式或者使用某个现有的应用程序执行某些特定的任务的人。对于我们的网络ATM案例,我们收集的需求是一个客户从账户上付款给收款人。把这个需求生成文档,如下:

  需求A:"最终用户需要输入他们的ID号,和一个口令,来验证这些帐户是他们自己的。一旦核准后,顾客可以选择"Make Payment(付款)"。用户然后将选择一个指定的帐目,输入支付的数额和收款人的id号(用户名)。"

  在现实的情况中,在这个阶段获得尽可能多的细节是非常重要的,因为稍后在开发过程中,你将需要实现或者生成程序逻辑来执行这些任务。为了获得这个任务,你将需要启动XDE;XDE被设计作为WebSphere Studio或者其它整合Eclipse技术的产品的一个插件程序。你可以把需求输入XDE,并在工程和版本控件下保存这些文件,而不管你选择了什么源码管理程序系统。从这些需求中,你可以开始制定你的使用案例。使用案例是使用方案的描述。此时,你要知道你的用户是谁;他们是这个使用案例不可分割的部分。
接下来我将进入一个简要的使用案例,来描述使用网络金融应用程序付款这个使用方案。

  创建一个工程和模型

  在你可以输入一个使用案例之前,你需要建立一个XDE建模工程和一个模型。我假定你已经安装了XDE和WebSphere Studio Application Developer,并且已经启动了这个工具环境。确信你正在Modeling视窗中。要进入Modeling视窗,可从Perspective菜单,选择Open > Other。选择Modeling,并且点击OK。想要创建一个新的XDE模型工程,需要:

  1. 在File菜单,选择New > Project。出现New Project(新建项目)对话框。

  2. 在新建项目对话框左边的窗格中,选择Modeling。在右边的窗格,选择Basic Modeling Project。

  3. 点击 Next.

  4. 在Project name对话框中,输入一个新建项目的名称。在本方案中,称它WebBankModel。

  5. 选中Use default location复选框。

  6. 点击Finish。

  现在你的工程被创建好了,你可以创建一个模型放入这个工程。一个工程可以有多个模型。为了创建一个新模式,请从Modeling视窗:

  1.在File菜单,点击New > Model。

  2.在File Type窗格中,选择Rational XDE,并选择blank model作为模板区域。

  3.在File name对话框,输入新模型文件的名称。使用WebBankModel.。

  4.在Destination文件夹中,选择你上面输入的工程名。

  5.点击Finish。

  这个模型在Model Explorer中出现;在模式图窗口,主使用案例模式图打开。你现在可以开始构建一个高级的使用案例模式图,来描述一个大致近似于你需要构建的应用程序的模型。待会你还可以补充一些细节,但是这就OK了。首先,你可能想添加一个行动者(actor)。在UML领域,一个行动者被定义为一个模型元素,描述当一个用户与被建模的系统之间相互作用时所扮演的角色。虽然这样,它还是不能完全的描述一个人。它还可以描述一个机构、系统或者与这个系统相互作用的机器。你的第一行动者将描述这个网络金融应用程序的用户。你现在可以使用下面的步骤把行动者添加到你的模型:

  1.在Model Explorer.中选择你的模型

  2.点击右键并选择Add UML > Actor.

  3.命名你的行动者,比如WebBankCustomer.

  4.重复步骤2和3添加另一个行动者,并命名它为Transaction System,来描述你将查询的外部数据库。

  添加使用案例

  接下来,你想添加一些使用案例。一个使用案例指定行动者与之交互的系统的行为,但是它不会显示实现那些行为的内部结构。因为此时你知道一些关于你需要的综合的高级信息,你可以添加一些使用案例。你应该添加一个案例,用来验证最终用户,另一个案例用来核对帐户余额,还有一个案例用来付款。为了把这些案例添加到你的模型,你需要:

  1.在Model Explorer中选择你的模型

  2.点击右键并选择Add UML > Use Case.

  3.命名你的Use,比如AuthorizeUser.

  4.重复步骤2和3来创建补充的使用案例,并命名它们为TransferFunds、AccountBalance和MakePayment。
  构建一个使用案例模式图

  你应该有了四个使用案例,来描述你的系统需要的一般功能。你现在可以构建你的一个使用案例模式图,来描述你的系统的一个基本的概况。一个使用模式图可以在一个模型中包含所有的使用案例和行动者,或者它们中的一些。在你有一个空白Use Case Diagram编辑器之前,你必须有一个空的窗口面板。你可以检查工具箱(默认情况下,在modeling视窗最左边的窗格中),看看是否有与使用案例有关的东西,比如行动者、使用案例和连接物。

  绘制模式图很容易;你刚才添加的所有的组件都被包含在你前面创建的模型中。只要简单地拖放你的两个行动者和四个使用案例到布局平面上即可。一般偏好把你的最终用户放在左边,事务处理系统放在右方。使用案例可以垂直地放在它们之间。

  Associations(连接物)是描述行动者和使用案例之间信息交流的关系。因为你的最终用户有执行这些事件的需求,所以你应该添加连接物到你的使用案例模式图中。添加三个连接物,从WebBank最终用户行动者到这 三个使用案例,用于验证、划帐和检查余额。当这些完成后,模型应该类似于图1那样。


图1.行动者和使用案例模型

  创建一个用于描述行为的顺序图

  既然你已经开发了一个描述高级系统功能的使用实例模式图,你现在就可以把精力集中到你想添加到这个不是数据库固有的系统中去的特定行为。特别是,因为你将从一个现有的数据库中反操纵一些关键的类,所以你可能需要添加不是基本数据模型的一部分的程序逻辑。你想创建一个顺序图来显示这些系统对象中的一些,以及它们之间的交互作用。一个顺序图就是一个UML模式图,提供在一个给定的方案中合作的对象之间按时间顺序通信的一个视图。在分析阶段,顺序图可用于确定什么对象和方法将需要被实现。为了添加一个用于MakePayment使用案例的顺序图,需要:

  1.在Model Explorer中选择你的使用案例

  2.点击右键并选择Add Diagram > Sequence:Role

  3.命名你的模式图为MakePaymentDiagram。

  现在你可以把一些组件添加到你的模型上。因为这个使用案例模式图是十分高级的,在ATMUser、MakePayment使用案例和Transaction system事务处理系统之间有一个连接物,指明主要用户在哪里以及帐户信息是从何处来。对于这个顺序图,你想细化出现在你需要用来构建你的系统的重要工件之间的消息通信。为了"连接"这些条目,你想要添加一些消息用来描述模式图中对象之间出现的一个通信。在XDE中,一个lifeline是一个用来描述在一段时间内一个对象的存在性的标记。为了添加一些lifeline和消息:

  1.从Model Explorer中选择行动者WebBankCustomer,并把它拖到工作区上面,沿着左边垂直排列。

  2.对TransactionSystem做同样的操作。

  3.拖放一个Lifeline图标(从工具箱中)到另外两个lifeline之间。

  4.重命名这个lifeline为WebPage。

  5.在ATMUser和WebPage之间添加一条消息,并命名为Enter(acct,payee,amt)。

  6.在WebPage和TransactionSystem之间添加另一个消息,并命名为MakePayment(acct,payee,amt)。

  7.创建从TransactionSystem到WebPage以及从WebPage到WebBankCustomer的返回信息。

  8.保存你的模式图( ctl - S)。

  一个完整的顺序图如图2所示。


图2、顺序模式图

  你可以在这个使用案例模式图中创建一个"注解",并把它连接到顺序图中,让你从某个特定的功能领域,在设计过程中深入的挖掘。为了创建一个注解,你需要:

  1. 打开你的使用案例模式图WebBankModel,如果它还没有被打开的话。

  2. 创建一个注解并把它连接到MakePayment使用案例。

  3. 把表示顺序图的图标拖到那个连接使用案例的注解上。

  4. 在使用案例模式图中的注解上双击,打开顺序图。
创建EJB工程

  因为在这个方案中你要操作一个现有的数据库,我将跳到后面介绍你感兴趣的表,并且使用Application Developer的工具为你构建一些最基本的类。这是十分通用的,因为许多应用程序是使用对已存在并将使用的数据库的最基本的理解来构建的。你将反操纵你的网络应用程序知道的一些Java类中的表定义,还要理解基本的关系表。

  企业JavaBean ( EJB)组件是J2EE规范的一部分,让你把生命周期行为封装进实体中,来描述你的业务领域中的事物,比如一个顾客或者帐目。虽然这个规范有一点复杂,但是其思想是如读取并写入持久性存储这样的基本操作以一种标准方式被处理。这个工具能为你有效地构建EJB组件,而运行时间服务器(如WebSphere Application Server)能有效地管理它们的操作。

  在构造你的EJB组件之前,你需要创建一个工程,把它们放进去。从任何视窗:

  1.选择File > New > Project > J2EE,并选择Enterprise Application Project

  2.命名这个工程为ATM并且接受EJB和网络工程的默认值。如果你愿意,你可以删除应用程序客户端工程,因为你不会用到那个文件夹。

  此时你可以研究一下ATM工程中名为application.xml的XML文件,描述把所有组成一个J2EE企业应用程序的组件联合起来的线索。查看这个文件的一个好方法是从J2EE视窗的Navigator视图,文件在META-INF目录的ATM工程下。如果你双击这个文件名,XML编辑器让你使用不同的方式察看这个文件,比如一般的,来源或者其它的。这个工具为J2EE应用程序嵌入了智能XML配置文件。

  打开Application Developer的一个数据视窗。如果一个数据视窗还没有打开,你可以从主菜单打开:

  1.选择Perspective > Open > Other然后选择Data。现在你需要创建到你的ATM数据库的一个连接。

  2.从DBExplorer视图,点击右键然后选择New Connection。你可以填充字段,如图3中所示。


图3创建一个到数据库的连接

  当你全部填充完的时候点击Finish。你可以展开一些图标,查看一下你的表是否在那里。你的表应该在那,名为YourId.Account和YourId.Csutomer。接下来,你将把这些表导入创建J2EE工程时创建的EJB工程中。你要:

  1.展开DBExplorer中的条目(在Data视窗),在ATM条目上点击右键,然后选择Import to Folder...。

  2.在弹出菜单上点击Browse,选择你的名为ATMEJB的工程,然后点击Finish。在询问你创建元信息时回答yes。

  3.如果你切换到J2EE视窗和J2EE视图你在Databases目录看到这个信息。 

  创建对象--关系的映射

  有好几个理由要创建一个对象--关系的映射。一个关系模型和一个对象模型之间有内在差别,为了高效率的编程,需要解析并说明它们。另一个原因是给使用一个应用程序服务器的程序员一些Java类,这些Java类将存在于应用程序服务器中,用来持久化应用程序数据。在给应用程序更多的灵活性的同时,关系映射还能减轻数据库和服务器的操作负荷。

  为了创建这个映射,可从这个J2EE视窗:

  1.选中ATMEJB模块

  2.点击右键,选择Generate > EJB to RDB Map

  3.在弹出窗口中选择bottom - Up O/R Map

  4.设置open mapping editor upon completion复选框,让你查看你创建了什么。

  5.点击Finish。

  当这些完成后,映射编辑器应该类似于图4那样。


图 4.创建一个关系映射

  反操纵EJB工程

  现在你可以利用这个工具的功能为你生成一个Java代码模型。如果我们正在建模一个大型的应用程序,它只有一小部分是由我们的EJB组件组成,那么我们能够很好的描述整个应用程序,包括我们自己生成的EJB代码,一般情况下被用做会话或者实体Bean。为了使操作更加容易,你要打开一个带有建模视窗的J2EE视图。打开一个模型视窗,并且从这个菜单项选择Perspective > Show View > Other... > J2EE > J2EE View。

  建模视窗下的J2EE视图应该打开,为了使代码编辑和查看更加容易,需要对Basic视窗下的Outline视图做同样的操作。此时你可以把一个Java代码模型添加到你的ATMEJB工程中,使用下面的步骤:

  1.选中ATMEJB模块

  2.选择New > Other,打开一个向导

  3. 选择Modeling,选择Model然后点击Next.

  4. 在下一个屏幕页面中,选择File types下的Java;和模板下的Java Code Model,把这个模型命名为JavaCodeModel_ATM并且点击Finish,如图5中所示


图5添加一个Java代码模型

  为了反操纵这个模型:

  1.在Navigator视图中,在这个模型文件上点击右键,选择Reverse Engineer,在对话框中回答yes。

  2.设置root为<WAS Install DIR>\workspace\ATMEJB\ejbModule,并且点击OK.

  3.通过点击Add recursively添加*.java文件,点击OK。

 

  构建一个类模式图

  前面的步骤把你的EJB组件添加到模型容器里。现在我们将创建一个类模式图并添加这些组件之一,AccountBean,到这个模型中。到生成一个类模式图:

  1.在Model Explorer中,选择ATM程序包,点击右键并选择Add Diagram > Class,把这个模式图命名为Account。

  2.拖动AccountBean Java类(EJB工具为你创建的),把它拖入类模式图上。

  3.你可以显示AccountBean的一些从属物,通过右击这个类,选择Add Related Shapes,选择All Models,然后点击OK。你的类模式图应如图6所示。


图6.示例类系统模式图

  现在,在设计级别,你可以添加一些附加功能到AccountBean类,比如说,通过添加一个方法来完成一个付款操作。为了添加一个方法:

  1.从Model Explorer中,选择AccountBean类并右击它。

  2.选择add Java > method.

  3.输入makePayment ()

  4.右击AccountBean类并选择Generate Code。

  在这个类中,你可以看到添加的方法。完成代码,如下:

public void makePayment(java.math.BigDecimal howMuch, java.lang.String payee) {
setBalance(getBalance().subtract(howMuch));
System.out.println ("Make a Payment to"+ payee + "for the amount of $" + howMuch);
}

  要注意保存( File > Save AccountBean.java或者ctl - S)。注意你正打印一个语句到控制台,因为另一个服务可能要被调用(我们还没有实现)来进行实际的付款操作。然而你还捕获任何潜在的错误,比如处理一个透支问题。
 
  接下来你将需要使用AccessBeans向导来为Customer和Account创建JavaBean Wrapper AccessBeans。指定一种JavaBean wrapper的访问bean组件类型,并使用findByPrimaryKey()方法用于Account和Customer。

  在测试之前,你需要生成EJB配置代码。你可以浏览一下EJB组件的类库,有许多代码与EJB关联,大多数是依据J2EE规范构建的,考虑到了跨系统的可移植性和通用性。为了生成代码,可从J2EE视图,选中这个ATMEJB EJB模块并使用弹出菜单为Customer和Account生成Deployed EJB code。

  为了把这个新方法提升到远程接口,可以通过选择Outline视图中的方法,右击并选择Enterprise Bean > Promote to Remote Interface

  测试应用程序

  WebSphere Studio工具更强大的一面是能够单元测试你的组件,就好象它们正运行在一个应用程序服务器中一样。服务器视窗里有不同的应用程序服务器,包括WebSphere Application Server。这样测试的一个主要优点是你可以使用这种IDE的功能来调试你的Java组件,这显然比把你的代码安装到你的应用程序服务器并调试要简单的多。为了测试你刚才构建的组件:

  1.打开一个服务器视窗。

  2.为了创建一个服务器工程并指定其名称,你要在File菜单点击New > Server Project。命名其为Servers。

  3.在File菜单,点击New > Server Instance and Configuration,创建一个服务器实例和配置。将它命名为WAS V4 Local Test,并保证它处于Servers工程中。此时,你将需要指出这个服务器有一个Server实例类型的WebSphere V4测试环境。(还其他选项,比如Apache Tomcat)

  你现在应该得到一个可以启动、停止并可在其中安装你的代码的应用程序服务器了。它非常类似于一个可让你运行产品的应用程序服务器,除此之外你还有一个工具和调试环境。接下来,你需要添加一个数据源到配置中,如下所示:

  1.在服务器配置视图中,双击WAS v4 Local Test Configuration,并选择Datasource选项卡。

  2.指定ATM的名称,jdbc/ATM的JNDI名称和ATM的Database名称,如图7中所示。

  3.保存你的更改(Ctrl+S)。

 


图7添加一个数据源

  你刚才添加添加数据源信息是用于WebSphere Application Server,但是你还需要在另一个地方输入数据源信息。你要添加这个数据源信息到你以前构建的EJB模块的相关配置设置中。重要的是所填的JNDI名必须完全相同。为了编辑EJB模块中的数据源设置,你将使用EJB扩展编辑器,如下:

  1.切换到一个J2EE视图。

  2.选中ATMEJB模块,点击右键,选择Open with EJB Extension editor,然后点击Bindings选项卡。

  3.设置ATMEJB模块的Datasource JNDI名为jdbc/ATM,如图8.中所示。

  4.保存更改(ctl - S)。


图8.设置数据源名

  现在切换回Server视窗。下一步非常简单但是极其地重要。一个企业档案资源( EAR)文件的主要用途是把运行一个应用程序所需的所有组件封装到一个文件中。这使配置封装应用程序更为容易,并有助于实现J2EE的一个基本目标,那就是使应用程序在不同供应商提供的兼容J2EE应用程序服务器上的可移植性。实际上,它是一个XML文件,提供J2EE相关组件和网络组件的一种组合机制。在任何情况下,对于你的给定的WebSphere服务器配置,你需要添加你前面创建的ATMEAR模块,如下:

  1. 切换到服务器视窗。

  2. 在服务器配置视图中,选择WAS V4 Local Test。

  3. 点击右键,选择Add Project,然后选择你的EAR模块ATMEAR。

  现在你需要进行WebSphere Application Server配置,使用下面的步骤:

  1. 在服务器视窗的服务器控制面板中,选择WAS V4 Local Test。

  2. 点击右键并选择Start。你将看见启动消息出现在控制台中。

  3. 当出现"Server open for e - business"消息的时候,就说明已经启动了服务器。

  既然你让应用程序服务器启动并运行,你现在就可以通过使用IBM EJB Test Client测试你设计构建的EJB组件,如下

  1. 切换到J2EE视窗。

  2. 选中ATMEJB工程,并从弹出菜单中选择Run on Server选项。

  3. 点击JNDI Explorer,测试 Customer EJB。使用findByPrimaryKey()用于CustomerhHome,并使用1号顾客。

  4. 使用Customer EJB中的getAccount ()方法来测试" bring up an Account."

  5. 测试Account中的makePayment()方法。

  使用EJB Test客户端是一个多步的过程。记住,它是一个带有预构建图形用户界面的通用测试器,用来测试你的代码的功能;它不是一个最终用户应用程序。比如说,一旦你"载入"你的makePayment方法,它将设法传递参数,并最终调用这个方法。举例来说:

  1. 点击References视图中的makePayment链接。

  2. 对于java.math.BigDecimal下的第一个参数视图,用于构造器,选择BigDecimal(double),并且当这个值字段出现的时候,放入一个十进制数(比如25.00),然后选择Invoke and Return。

  3. 构造器的第二个参数java.lang.String,选择String(String),并且当这个值字段出现的时候放入一个名称,比如"Homer",并且点击Invoke and Return。

  4. 一旦这些参数值给定后,点击invoke来测试这个方法。如果一切顺利,帐户余额将减少,在控制台将出现你的付款消息。

  5. 你可以通过点击References视图的makePayment链接,试试多支付几次。图9显示一个测试视图。


图9查看测试结果

  恭喜你!现在你已经完成了使用IBM WebSphere Studio和XDE工具套件设计、实现并测试一个应用程序的整个开发过程。

 

 

版权所有:UML软件工程组织