Tad Siminitz ([email protected])
软件 IT 架构师, IBM
2004 年 3 月
简介
通过将Rational eXtended Development Environment (XDE) 和IBM's WebSphere Studio结合使用,你将会得到一个用于构建电子商务应用的全面的和集成的开发平台。你可以作需求分析、面向对象的设计和对你用来构建和测试代码的信息模型进行建模。换句话说,在一个项目的所有参与者现在可以唱同一首歌了。在使用Rational XDE之前,在开发周期的任务中,经常需要用户从一个工具导出信息,在插入到另一个工具。为了向你展示这些不同工具的作用,在本文中我将使用下面的场景。
有时候,一个新项目的设计人员和体系架构师在项目开始时一切都要从零开始,并且对应用的各个方面有着完全的控制。但通常情况是项目人员必须处理已有的组件,通常还有一些已有的关系型数据库。
在这个场景下,假设你被要求实现一个基于Web的银行应用,这个应用允许最终用户从他们的帐户进行支付。作为这个小应用的设计和实现人员,你也被要求使用一个已有的数据库中的一个已存在的表。
同时在你的组织中对每一个新的开发项目都有必要遵循正规的需求、分析和设计的过程的要求。在开发周期的这个阶段选择的工具是Rational软件的XDE和 具有额外的开发和应用服务器测试能力的IBM WebSphere Studio Application Developer。在这个小项目系统中需要被执行的活动有:
获取描述了你所需要构建应用的需求。获取需求
典型的第一步是获取需求,通常是通过与目标应用的潜在最终用户进行访谈来完成。需求也可能开自于那些手工的完成某些任务的人或者来自于已存在的系统。对于我们的Web ATM 样例,我们获取的一个需求是客户可以对他们的帐户的资金进行支付。文档化的需求也许象下面的样子:
需求A:"最终用户需要输入他们的银行帐号和密码,系统验证他们是帐户的拥有者。一旦通过验证,客户可以选择"支付"。客户然后选择指定的帐户,输入将要支出的数额和确认(名字)收款人。"
在真实的情况下,在这个阶段尽可能详细的获取需求是重要的,因为在以后的开发周期中,你需要实现或产生逻辑以执行任务。为了完成这个任务,你需要开始使用XDE,XDE被设计成为WebSphere Studio 或其他支持 Eclipse 技术的产品的插件。你可以将需求输入到XDE中,使它成为项目中的文件,并且使用你选择的软件配置管理(SCM)系统对它进行版本控制。 从这些需求中,你可以设计你的用例。用例是系统使用情景的描述。在这一点上,你应该知道系统的用户是谁;他们是用例中不可缺少的部分。
接下来我们将输入一个简短的用例来表示使用Web银行系统的支付转帐的使用情景。
创建项目和模型
在你能够输入一个用例前,你需要建立一个XDE建模项目和模型。我假设你已经在WebSphere Studio Application Developer上安装了XDE,并已经启动了工具的环境。确认你是在建模透视图中。为了得到建模透视图,从透视图(Perspective)菜单,选择打开(Open )>其他(Other)。选择建模(Modeling),然后点击确认(OK)。为了创建一个新的建模项目:
现在你对项目已经被产生,你可以创建一个模型并将它放到项目当中。一个项目可以拥有多个模型。为了创建一个新的模型,在建模透视图中:
在文件菜单中,点击新建 > 模型(Model)模型出现在模型浏览器中;在图表窗口中,主用例(main use case)图被打开了。你现在可以开始构建一个高级别的用例图大概的描述一下你需要构建的系统。在后面我们再对这些用例进行细化。在用例图中需要添加的第一个是角色(actor).一个角色被定义在UML中作为一种模型元素来描述一个扮演与被建模的系统交互的用户。虽然角色通常是代表人的,但也可以不代表人。它可以代表一个组织,系统或是与系统交互的机器。我们的Web银行应用中的第一个角色将代表用户。你现在可以通过下面的步骤添加这个角色到你的模型中:
在模型浏览器中选择你的模型。添加用例
接下来,你要添加一些用例。一个用例从角色的角度描述了系统的行为,但用例不显示系统的内部实现细节。因为在这一点上你所知道的是一些关于你需要的比较高级别的信息,因此你可以添加一些用例。你应该创建一个验证用户的用例,一个查看余额的用例和一个转帐的用例。添加这些用例到你的模型:
1. 重复步骤2和3添加其他的用例,并命名为TransferFunds, AccountBalance, 和MakePayment。
创建用例图
你应该有4个用例用于描述你的系统需要具备的能力。你现在可以创建一个用例图来对你的系统进行概括的描述。一个用例图可以包含模型中所有的用例和角色,或者仅仅包含其中的一些。在你拥有一个空白用例图编辑器之前你有一个空的窗口面板。你可以通过检查工具箱中是否有用例相关的工具,象角色(actors)用例(use cases)和关联(associations)来确认这一点。
画用例图是简单的,你所加的所有的组件都包含在上面创建的模型中。简单的拖和放你的两个角色和四个用例。最适当的位置是最终用户在左边,处理系统在右边。用例可以被垂直排列。
关联代表了角色和用例之间的交互关系。因为你的最终用户有做某件事情的要求,你应该添加关联在用例图中。添加3个关联,从WebBank的最终用户角色到3个用例,验证用户, 转帐, 和查询余额。
当你完成了这些后,你的模型看起来应该象图1。
图 1. 角色和用例的模型
创建时序图表示行为
一旦你已经开发好了描述高层系统功能的用例图后,你现在应该把精力放在将加到这个系统中的与数据库无关的指定行为上。特别是,当你从已有的数据库中重建一些关键的类时,你可能需要一些不属于数据模型部分的逻辑。你需要创建一个时序图来显示系统中的对象和这些对象之间的交互。时序图是UML图中的一种,它提供了一种按照时间顺序对给定场景中相互协作对象之间消息传递的视图。在分析阶段,时序图对确定为了完成某项工作,什么样的对象和方法需要被执行是非常有用的。为用例MakePayment添加一个时序图:
现在你可以在你的模型中添加一些组件。因为这个用例图是非常高层次的,所以在ATMUser, 用例 MakePayment 和处理系统之间仅仅存在一个关联。对于这个时序图,你应该对在将要构建的系统中的关键实体或对象之间发生的消息进行详细的描述。为了"连接"这些元素,你可以在时序图中添加一些代表了对象之间发生的交互的消息。在XDE中,一条生命线是一个符号,这个符号代表了一个对象在某一时期的存在。添加一些生命线和消息:
从模型浏览器中选择角色WebBankCustomer,并将它拖到工作区中,纵向放在左边。一个完整的时序图应该象下面的图2。
图 2. 时序图
你可以在用例图中创建一个"注释",然后将这个注释链到时序图中,注释可以把你从一个特定功能域带到对这个功能的设计中。创建注释:
如果用例图WebBankModel还没被打开,首先打开它.创建EJB项目
因为在这个场景中,你已经有了已存在的数据库,我们将回到前面,看看你感兴趣的数据库表,并通过使用WSAD的能力来为你创建一些初始类。这是非常通用的,因为很多应用最初都是建立在已经存在并将被使用的数据库之上的。你可以通过逆向工程数据库表的定义来成生你的Web应用和关系数据库都可以理解的Java类。
企业级JavaBeans(EJB)组件是J2EE规范中的一部分,让你可以封装生命周期中的行为到代表你的业务领域中相关事务的实体中,比如客户和帐户。然而J2EE的规范是相对比较复杂的,他的思想是J2EE平台以一种标准的方式为你处理一些基本的操作,如读写持久存储。有一些工具被设计用来帮你高效的创建EJB组件,还有一些运行时平台(如WebSphere Application Server)被设计用来有效的管理他们的操作。
在你创建你的EJB组件之前,你需要创建一个容纳EJB组件项目。从任何透视图:
选择文件 > 新建 > 项目 > J2EE(File > New > Project > J2EE),并选择企业应用项目(Enterprise Application Project.)在此处你可以检查一下在ATM项目中叫作application.xml 的XML文件,这文件包含了一个J2EE应用是由哪些组件组成的。查找这个文件的一个好的方法是从J2EE透视图中的导航视图中,在ATM项目的META-INF目录下找到它。如果你双击这个文件,XML编辑器可以让你以不同的方式浏览这个文件,比如普通方式、源文件方式和其他方式。对于J2EE的应用WSAD提供了内建的"智能化"的用于配置和浏览XML配置文件的工具。
现在让我们开始,在WASD中打开数据透视图,如果数据透视图还没有被打开,你可以从主菜单中打开它:
选择透视图 > 打开 > 其他 (Perspective > Open > Other),然后选择数据(Data)。现在你需要创建一个对ATM数据库的连接。图 3. 创建一个数据库连接
当所有必要的信息被填完后,点击完成(Finish)。你可以展开图标检查你的数据库是否已经出现。你的数据库表应该已经出现在数据库连接之下了,名字为YourId.Account和YourId.Csutomer。下一步,你应该插入这些表到刚才创建的J2EE项目的EJB项目中。步骤如下:
在数据库浏览视图(在数据透视图中)中展开加亮的ATM入口中的实体,点击右键并选择插入到文件夹(Import to Folder)…创建对象到关系的映射
创建对象到关系的映射有几种原因。在关系模型与对象模型之间有着本质的差别,为了有效的进行编程就需要对他们进行一定的处理。其他的原因是为使用应用服务器的开发人员提供一些可以运行在应用服务器上的Java类和用于处理应用数据的持久性的数据库方面的知识。当给了应用更大的灵活性时,关系映射也就使应用卸下了对数据库和数据库服务器的处理负担。
为了创建映射,从J2EE透视图:
选中ATMEJB模块完成后,映射编辑器应该象图4
图 4. 创建关系映射
逆向工程EJB项目
现在你可以通过工具的能力为你产生Java代码模型了。如果我们正在建模一个大的应用,这个应用中的一小部分包括了EJB组件,那么我们就可以很细致的描述整个应用包括我们的自动产生的EJB代码,这些代码典型的被用于会话bean和实体bean。为了使事情更简单,你可以在建模透视图中打J2EE 视图。打开建模透视图,然后从选单项中选择透视图 > 显示视图 > 其他… > J2EE(Perspective > Show View > Other... > J2EE > J2EE View)
在建模透视图中的J2EE视图应该被打开了,你可以按照你的习惯来调整它的位置。为了使代码编辑和浏览更方便,在大纲视图(Outline view)中做和上面相同的事情。在这里你可以通过下面的步骤添加Java代码模型到ATMEJB项目中:
选中ATMEJB模块图 5. 添加Java代码模型
逆向工程这个模型:
在导航视图中,在这个模型文件上点击鼠标右键,选择逆向工程(Reverse Engineer,),并对对话框的问题回答是(yes)创建类图
前面的步骤已经添加了EJB组件到模型容器中。现在我们将创建一个类图并添加那些组件中的一个,AccountBean,到模型中。创建类图:
你的类图应该象图6
图 6. 类图样例
现在在设计级别上,你可以通过添加方法对AccountBean类添加一些其他的功能,比如添加支付功能。添加一个方法:
在模型浏览器中,选中AccountBean 类,并点击右键在这个类中,你可以看到被添加方法的框架。完成下面的代码:
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包装器AccessBeans。指定JavaBean包装器的类型,并对Account 和Customer使用findByPrimaryKey()方法。
在进行测试之前,你需要生成EJB的部署代码。你可以通过浏览EJB组件的类库看到,有许多与EJB组件相关的代码,这些代码中的大部分是依据J2EE的规范被建立的,这就使你的EJB组件具有良好的灵活性和跨平台系统的通用性。为了生成代码,从J2EE视图中,选中ATMEJB EJB模块,并使用弹出菜单为Customer 和Account生成部署EJB代码。
在大纲视图选择要加到远程接口中的方法,点击鼠标右键,然后选择企业Bean > 提升远程接口(Enterprise Bean > Promote to Remote Interface),确保方法被加到了远程接口中。
测试应用
WebSphere Studio工具的众多强大能力中的一个就是它具有可以在内建的应用服务器的环境下对组件进行单元测试的能力。服务器透视图中包含了几种不同的内建应用服务器,其中包括WebSphere应用服务器。这种测试方法的一个关键的好处是,你可以在你的集成开发环境(IDE)中,对Java的组件进行测试和调试,这要比将应用的代码安装到应用服务器上,然后再进行测试和调试要简单和方便。为了测试组件,你需要构建:
你现在已经建立了一个应用服务器了,你能够启动、停止和安装应用代码到这个应用服务器。除了你拥有一个调试的环境外,这个应用服务器与你的产品环境的应用服务器是非常相似的。接下来,你应该通过下面的步骤为这个服务器配置创建一个数据源:
在服务器配置视图,双击WAS v4 Local Test Configuration,并选择数据原(Datasource)标签。图 7. 添加一个数据源
你已经为WebSphere应用服务器添加数据源的信息,同时你还需要提供一些其他的信息。为你之前建立的EJB模块相关的配置环境添加数据源的信息。最重要的是数据源的JNDI的名字必须要与EJB模块配置中的引用的数据源的JNDI名字是完全相同的。为了编辑EJB模块中的数据源的设置,你应该使用EJB扩展编辑器,步骤如下:
打开J2EE视图图 8. 设置数据源的名字
现在返回服务器透视图。接下来的步骤非常简单,但相当重要。企业归档资源文件(EAR)的主要目的是将应用中所有必要的组件包装到一个单一的文件中。这使得被包装的应用更加方便的进行部署,这也实现了应用可以被安装在不同厂商的J2EE规范兼容的应用服务器上的J2EE的目标。实际上,它是通过一个XML文件,来描述J2EE相关组件和Web组件的分组机制。无论如何,你有需要添加你之前创建ATMEAR模块到WebSphere服务器配置中,步骤如下:
打开服务器透视图现在你需要启动WebSphere应用服务器配置,步骤如下:
在服务器透视图的服务器控制面板中,选择WAS V4 Local Test现在你的应用服务器已经启动并运行了,你可以通过使用IBM EJB测试客户端程序对你设计并创建的EJB将组件进行测试了。步骤如下:
打开J2EE透视图通过使用EJB测试客户端程序进行测试是一项包含多个步骤的过程。记住,EJB测试客户端程序是一个通用的测试程序,它是一个内建的图形化应用程序,目的是测试你的代码的功能;它不是一个最终用户的应用程序。例如,一旦你"加载"了makePayment方法,它将设法传递参数,并最终调用方法。例如:
在相关的视图中点击makePayment链接图9 显示测试视图
图 9. 浏览测试结果
恭喜你!你已经通过使用来自于IBM WebSphere Studio and XDE工具套件的不同插件完成了对这个迷你开发周期中的设计、实现和测试的工作。
鸣谢
Tad希望对这个样例的以下几位主要的贡献者表示感谢:Rick Weaver,IBM全球工具技术销售人员;Patrick Cadonau,IBM瑞士,技术专家;Mathias Staub,IBM Rational 瑞士,顾问。
参考资料
了解关于WebSphere产品和社区的信息,请访问 WebSphere开发这园地 网站。
在 developerWorks Rational 软件资源中心,你可以找到一系列的面向开发人员的文章。
了解更多IBM's Rational 软件 ,访问 Rational 网站.
访问 eclipse.org,可以找到关于Eclipse的所有信息。
在对象管理组织(OMG)主页,阅读更多的关于UML.
你想订阅developerWorks工具箱吗?请访问 WebSphere Studio Application Developer for Windows, Version 5.
本文地址:http://com.8s8s.com/it/it13181.htm