使用 Rational Software Architect 8.0 及 Google App Engine SDK 来构建一个 Java 数据对象

学习怎样使用 IBM® Rational® Software Architect 以及 Google App Engine SDK 来创建一个 Java Data Object(JDO)企业程序。本文向您展示了怎样构建一个程序,并且将设计关注于业务逻辑,而不是在已有的数据存储上。

下载 Rational® Software Architect 试用版  |  在线试用 Rational® System Architect
下载更多的 IBM 软件试用版,并加入 IBM 软件下载与技术交流群组,参与在线交流。

本文关注于使用 Java Data Objects(JDO)持续层技术来构筑一个轻量级的 Java Enterprise Edition(JEE)程序。Google App Engine SDK 及相关的运行时实现提供了一个优秀的 JDO 实现,您可以使用它来帮助您设计一个简单的应用程序。

开始之前

  • AcmeMembersAppWeb.jar 文件保存到您在文件系统中所选择的位置。
  • 为了快速开发该程序,我们使用 IBM® Rational® Software Architect for WebSphere® V8.0 版本。您还可以选择使用以下的选项来完成本文之中的步骤:
    • Rational Application Developer V8.0 工具集
    • 任意基于 Helios 发行版(Eclipse V3.6 版本)的 Eclipse 开发环境,并带有适当的 Java 和网络开发特性,以及一个兼容的 JDK 1.6。您可以从 Eclipse 网站下载免费的 Eclipse IDE for Java EE Developers 的 Helios 版本包

如果您正在使用 IBM® Rational® Software Architect V8.0 或者 IBM® Rational® Application Developer V8.0 环境,或者其他的选项,那么您就需要在启动之前安装其他的一些选项。按照下面的方式,来安装 Google App Engine SDK,1.3.8 版本,以及 Google Plug-in for Eclipse 3.6,1.4 版本:

  1. 启动 Rational Software Architect 软件,使用您所选中的工作区位置。Start > IBM Software Delivery Platform > IBM Software Architect for WebSphere Software 8.0
  2. 当您要输入一个工作区位置时,您可以选择提供的默认位置,或者其他方便的位置。
  3. 如果欢迎界面出现的话,就将其关闭掉。
  4. 按照下面的步骤,来使用以下链接位置处找到的指南来安装 Google App Engine SDK 及 Google Plug-in:http://code.google.com/eclipse/docs/install-eclipse-3.6.html注意:
    您并不需要安装 Google Web Toolkit 包。

在您安装 Google App Engine SDK 及 Google 插件,并重启 Rational Software Architect IDE 之后,您将会注意到如图 1 所示的按钮,将会出现在您的工具栏之中。图 1 中圈中的就是 New Web Application Project 按钮,稍后您将会使用到它。

图 1. Google Plug-in for Eclipse 工具栏图标
添加至 Eclipse 工具栏的 4 个按钮

注意:
除了按照这些指南进行操作之外,我们还可以使用 Mozilla Firefox 网络浏览器,3.6 版本来运行我们的程序。当我们在运行完整的程序时,浏览器会提示我们去为 Firefox 安装 Google Web Toolkit Developer 插件。在作者写作本文时,该插件的安装版本是 1.0.7511。

为什么选择 Java Data Objects

对于许多想要设计和构造程序,关注业务逻辑、维护性、移动性的人来说,Java Data Objects(或者简称为 JDO)在他们当中很快就获得了流行性,同时获得关注的还有 NoSQL 等一些其他的选择。

尽管 Java Persistence Architecture(JPA)还会试着去达到其他的目标,但对于一些软件架构师和开发者来说,将 Plain Old Java Objects(POJO)映射至关系数据库表,对于应用程序来说是侵入性。原因在于该映射使得应用程序与持久性数据存储方案之间的耦合变得太过紧密了。而且,将 POJO 映射至数据库表的要求将会导致所谓的“持久性错误匹配”(persistent impedance mismatch)等方面的问题,此时映射本身将会高度甚至过度影响到应用程序的总体实现方式。

JDO 并不需要程序去提供任何显式的映射。相反,它只需要程序员将属性标记为持久性的,并识别出能代表对象唯一标识符(或者主键)的属性。


Acme 会员系统范例程序

图 2. Acme Membership 域模型
域模型的图

图 2 的大图

为了获得 Acme Company 的服务和利益,他们的客户必须成为会员。他们可以从 Single(单身),Student(学生)或者 Family(家庭)三种会员类型中进行选择。家庭会员类型对已婚夫妇及其不满 18 周岁的子女提供 Acme 的服务。为了让会员保持“良好的状态”,客户每年都需要手动更新他们的会员身份。

Acme 公司与其会员之间的所有相关性,只通过 Acme 公司与主要会员之间来单独地建立。Acme 只收集主要会员的地址及其他的信息。

图 2 中的 Acme 域模型演示了各项条目之间的结构及关系。这些模型没有考虑到已存在的或者正在开发的持续性存储。


创建 Acme 会员应用程序项目

您可以按照下面所概括的步骤,来创建一个 Acme 会员应用程序项目。

  1. 使用您所选择工作区的位置,来启动 Rational Software Architect 8.0 版本。Start > IBM Software Delivery Platform > IBM Software Architect for WebSphere Software 8.0
  2. 从菜单栏之中,选择 File > New > Web Application Project,或者,点击标记为 New Web Application Project 的工具栏按钮。
  3. 在 Create a Web Application Project 向导中,输入以下的值:
    1. 对于 Project name 输入 AcmeMembersAppWeb
    2. 对于 Package 输入 org.acme.membership.web
  4. 然后取消“Use Google Web Toolkit”的选择。
  5. 最后,点击 Finish

查看图 3 之中的其他指南,以得到怎样完成该对话框窗口的向导。

图 3. New Web Application Project 向导
Create a Web Application 窗口

现在您就可以将 Acme 会员应用程序的初始部分导入到您新创建的项目之中了。

首先,我们将会关注将一个标准 Java 类(POJO)转化为支持 JDO 持久性所需要的步骤。

  1. 导入您将会在上面执行构建操作的初始 Web 项目。
    1. 从菜单栏之中,选择 File > Import > General > Archive File 然后点击 Next
    2. 点击 Browse 按钮并切换至您保存文件 AcmeMembersAppWeb.jar 的地方,并选中它以进行导入。
    3. 通过点击 Browse 按钮来确定“Into folder”区域被设置为 AcmeMembersAppWeb ,然后切换并选择您所创建的项目。
    4. 选择 覆盖已存在的资源,不用警告 的方框。
    5. 点击 Finish。您不需要继续操作 Import 向导的其他页面。

查看图 4 以得到怎样完成向导的其他指南。

图 4. 导入 Acme 会员应用程序的开始
Import 界面,Archive File 视图

在您成功导入文件之后,您将会拥有一个项目布局,如图 5 所示。在您的网络项目之中拥有三个包:

  1. org.acme.membership.domain,它含有 JDO 增强的业务域类
  2. org.acme.membership.jdo,它含有用于获取 JDO 持久性管理员的框架 JDO 持久性管理库
  3. org.acme.membership.web,它含有与网络界面相关的 servlet 及其他的工件

注意:在 Problems 视图中您将会看到一条警告,您可以安全地忽略这条警告。

图 5. AcmeMembersAppWeb 项目的项目布局
Package Explorer 项视图

通过 JDO 持久性功能来改进 Java 类

支持 Eclipse 的 Google 工具当前版本,并没有提供向导(Wizard)的方式,去自动将一个标准 Java 类转化为一个 JDO 规范类。幸运的是,完成该操作只需要短短的几步操作,大部分操作将会涉及到使用简短的注释(annotation )。

  1. 打开可以在 AcmeMemberAppWeb > src > org.acme.membership.domain 下面找到的 AcmeMembership.java
  2. 向导入列表添加如图 6 所示的类。
图 6. 为 JDO 增强类添加导入列表的类
5 个列出来的类

一旦您创建了自己的 Google Web Project(AcmeMembersAppWeb),那么添加适当库的操作,以及对项目类路径的更新就会自动发生了。Rational Software Architect 的 Eclipse 构建环境将会自动找到添加至导入列表的类(如图 6 所示)。

  1. 在类定义的顶部,添加如图 7 所示的 @PersistenceCapable 注释。该注释将会指引 Google App Engine 持久性服务来管理该类的实例。
图 7. 将一个类声明为可以实现持久性的
代码中所包含的 @PersistenceCapable
  1. 我们的类将需要定义一个标识符,以将 AcmeMembership 类从众多的类中区分开来。Google JDO 实现拥有特定的 Key class/type(键类/键类型),我们将会使用到它。我们将会将该 Key 作为 AcmeMembership 的属性添加,并将其标记为一个主键,并指定 Google App Engine 运行时的策略,它将会自动填充上唯一的值。
    1. 添加一个类型为 Keyid 属性(见于完全合格类名的导入列表)。
    2. id 声明的顶部,添加注释 @PrimaryKey。
    3. 在 @PrimaryKey 注释的下面,添加如下所示的另一个注释:@Persistent(valueStrategy = IdGenerator.IDENTITY
    4. id 属性添加一个获得者以及设置者。对于这里的步骤,您可以使用 Quick Fix 特性,或者强调 id 属性,右击,并选择 Source->Generate Getters and Setters
图 8. 将一个属性注释为主键和添加其值填充策略
两个带有强调代码的注释
  1. 声明我们的意图,以使用注释 @Persistent 实现感兴趣属性的剩余部分。在持续性中我们唯一不感兴趣的属性是 INITIAL_FAMILY_SIZE
    1. 在声明的顶部为以下的项目添加注释 @PersistentacmeMemberstypecreationDate,以及 lastRenewed

只要有了 @Persistent 的注释,我们就能够实现属性类型持久性复杂且多样的数量了,包含一个 List(acmeMember),一个枚举(type),以及一个 Date(creationDate)。


PersistenceManagerFactory 以及 PersistentManager

为了帮助程序生成一个 PersistenceManager,一个 JDO 程序需要一个类,该类包含了类型 PersistenceManagerFactory 的框架属性。而您将需要 PersistentManager 来获得一次交易。依据对交易的传统定义,一个 JDO 交易示例就是执行单元操作的载体,执行的基础是持久性存储系统(或者数据库)。

MembersAppDomainPMF(可以在 AcmeMemberAppWeb > src > org.acme.membership.jdo 下面找到)就是我们放置框架 PersistenceManagerFactory 属性位置的类。

接下来的图 9 显示了源代码的快照,CreateMembership.java(在 org.acme.membership.web 包下面找到)演示了两件事:

  1. 怎样获得并使用来自 PersistenceManager 的交易。
  2. 怎样通过调用 makePersistent() 方法来实现一个(复杂)对象的持久性。
图 9. 获得及运行 JDO 交易的源代码
代码快照(屏幕截图)

运行程序

现在您可以运行您的范例 Acme Membership 程序了,这将会向 Acme 会员系统添加一个简单的会员。

我们可以使用本地上的 Google App Engine Web 应用程序服务器来运行我们的程序。您还可以在 Google 云上部署,放置以及运行该程序。

  1. 在 Package Explorer 视图中,右击网络程序服务器,AcmeMembersAppWeb,并选择 Run As > Web Application。
图 10. 启动 Google App Engine 测试环境
2 下拉菜单上的选项
  1. 在 Google App Engine 成功启动之后,操控台视图将会显示一条信息,指示服务器正在运行当中(见于图 11)。
图 11. 指示 Google App Engine 测试服务器已经就绪的操控台信息
Date,time,信息,服务器的位置
  1. 启动一个浏览器,并为目的地址输入以下 URL:
    http://localhost:8888
  2. 点击 AcmeMembersAppWeb 的链接,然后它应该会返回添加至系统的会员的输出。

总结

在本文中,我们使用 Rational Software Architect for WebSphere 8.0 版本,来帮助您快速设计和改进 Java 类,以让它们“支持 JDO”且可执行,您可以使用 Google App Engine 作为我们的 JDO 运行时实现方式。

类之间的关系,以及程序逻辑都不会去考虑持久性存储的特征或者结构。我们不会将任何的属性映射至关系数据库表或者非关系数据库表。就算如此,通过构建一种关注业务逻辑设计的程序,而不是一种已存在的数据存储,我们展示了 Rational Software Architect 是怎样帮助您的团队起草支持 JDO 的程序的。


致谢

作者感谢 Mike Reid 对本文所作的全面且细心的评审工作。


下载

描述名字大小
可用于开发的初始 Web 应用程序AcmeMembersAppWeb.zip4KB

参考资料

学习

获得产品和技术

讨论

条评论

developerWorks: 登录

标有星(*)号的字段是必填字段。


需要一个 IBM ID?
忘记 IBM ID?


忘记密码?
更改您的密码

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件

 


在您首次登录 developerWorks 时,会为您创建一份个人概要。您的个人概要中的信息(您的姓名、国家/地区,以及公司名称)是公开显示的,而且会随着您发布的任何内容一起显示,除非您选择隐藏您的公司名称。您可以随时更新您的 IBM 帐户。

所有提交的信息确保安全。

选择您的昵称



当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。

昵称长度在 3 至 31 个字符之间。 您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。

标有星(*)号的字段是必填字段。

(昵称长度在 3 至 31 个字符之间)

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件.

 


所有提交的信息确保安全。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=Rational
ArticleID=697272
ArticleTitle=使用 Rational Software Architect 8.0 及 Google App Engine SDK 来构建一个 Java 数据对象
publish-date=07042011