首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

使用 JAX-RS、JPA 和 Dojo 创建丰富的以数据为中心的 web 应用程序(1)

使用 JAX-RS、JPA 和 Dojo 创建丰富的以数据为中心的 web 应用程序(1)

准备开始在本文中,将使用最新的服务器端 Java 技术开发以数据为中心的 web 应用程序,以及使用 Dojo 工具箱创建富用户界面。这些技术将极大地减少了需要在服务器端和客户端编写的代码。熟悉 Java 和 JavaScript 能更有效地理解本文。您将需要使用 Java 1.6 JDK 来编译和运行代码;本文中使用 JDK 1.6.0_20。您还需要 Java Web 容器;本文中使用 Apache Tomcat 6.0.14。为保持数据一致,可使用任何带有 JDCB 2.0 兼容驱动程序的数据库。为简单起见,使用的是嵌入式数据库 Apache Derby 10.6.1。本文使用 Java API for RESTful Web Services (JAX-RS),以及用于 JAX-RS 实现的 Jersey 1.3 。实现还要用到 Java Persistence API (JPA) 及 Hibernate 3.5.3。最后,还用到 Dojo toolkit 1.4。见  中这些工具的链接。            
使用 Java Persistence API 运行数据很多 web 应用程序是以数据为中心 — 它们显示数据并允许用户新建或更新数据。这听上去很简单,但真到了一些基本操作,如在数据库中读写数据,情况却非常糟糕。尽管如此,Java Persistence API (JPA) 却极大地减少了必须编写的冗长的样板式代码。我们将看一个使用 JPA 的简单例子。            
本文中,将开发一个简单的管理青年足球联赛的应用程序。开始时将建立一个简单的数据模型,用于跟踪球队及其队员。将使用 JPA 完全访问这些数据。以第一个数据模型 Team 开始。 显示了此类。            
清单 1. Team 数据模型类
1
2
3
4
5
6
7
8
9
10
11
12
13
14
@Entity
public class Team {
....
....@Id
....@GeneratedValue(strategy = GenerationType.IDENTITY)
....private long id;
....
....private String name;
....
....@OneToMany
....private Collection<Player> players;
....
     // getters and setters........
}




这是典型的 JPA 注释类。使用 @Entity 注释来声明该类将映射到数据库。可以选择指定类的表名,或者在使用与类相同的名称时实现约定。其次,您要注释该类的 id 字段。想要它成为表的主键,使用 @Id 注释来声明。从逻辑角度来看,id 并不重要;只将其用于数据库。因为想要数据库充分发挥其价值,使用 @GeneratedValue 注释。            
在  中,还要声明另一个字段,name 字段。它是球队的名字。请注意该字段没有 JPA 注释。默认情况下,这会映射到同名列,这已符合本文意图。最后,每个球队都有多名队员与之关联。使用 @OneToMany 注释让 JPA 运行时知道这是一个管理关系,球队有多名球员。在 Java 类中,这是 Player 对象的 java.util.Collection。 显示 Player 类被引用。            
清单 2. Player 数据模型类
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
@Entity
public class Player {
....
....@Id
....@GeneratedValue(strategy = GenerationType.IDENTITY)
....private long id;
....
....private String firstName;
....
....private String lastName;
....
....private int age;
....
....@ManyToOne (cascade=CascadeType.ALL)
....private Team team;
....
     // getters and setters
}




中显示的 Player 类与  中的 Team 类类似。它的字段更多,但大多数情况下不必担心注释这些字段。JPA 将帮助您正确完成。 和  的一个不同之处是如何指定 Player 类与 Team 类的关系。本例中使用 @ManyToOne 注释,因为一个 Team 中有多个 Players。请注意,还指定了一个级联策略(cascade policy)。参考 JPA 文档,选择适用于您的本应用程序的级联策略。本例中,使用该级联策略可以同时创建新的 Team 和 Player,JPA 将保存两者,这将方便应用程序开发。                   
既然已经声明两个类,只要告诉 JPA 运行时如何连接数据库。通过创建 persistence.xml 文件来完成。JPA 运行时需要找到该文件,并使用其中的元数据。最简单的方法是放入 /META-INF 目录,这是源代码的子目录(需要将它放到输出编译类的根目录中)。 显示 persistence.xml 文件。            
清单 3. 足球应用程序的 persistence.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<persistence version="1.0"
....xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
....xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">
....<persistence-unit name="soccer">
........<class>org.developerworks.soccer.model.Team</class>
........<class>org.developerworks.soccer.model.Player</class>
........<properties>
............<property name="hibernate.dialect"
                      value="org.hibernate.dialect.DerbyDialect" />
............<property name="hibernate.connection.driver_class"....
                      value="org.apache.derby.jdbc.EmbeddedDriver" />
............<property name="hibernate.connection.url"
                       value="jdbc:derby:soccerorgdb;create=true" />
............<property name="hibernate.hbm2ddl.auto" value="update" />
............<property name="hibernate.show_sql" value="true" />
............<property name="hibernate.connection.characterEncoding"
                      value="UTF-8" />
............<property name="hibernate.connection.useUnicode"
                       value="true" />
........</properties>
....</persistence-unit>
</persistence>




回头看看  和 ,所有代码都是通用的 JPA 代码。实际上曾使用的都是 JPA 注释和它的常量。对已使用的数据库和 JPA 实现没有什么特别的。正如在  中看到的,persistence.xml 文件正是存放这些特定内容的地方。有一些出色的 JPA 实现可用,包括 OpenJPA 和 TopLink(见 )。已经使用过古老的 Hibernate,因此有几个 Hibernate 相关属性已经指定。这些多数都是简单易懂的,如 JDBC 驱动器和 URL,而且是很有用的,如通知 Hibernate 登陆到正在执行的 SQL (一些您肯定不想放在产品环境中的内容,但对于调试却很重要)。                  
在  中,您还会注意到使用了 Apache Derby 数据库。实际上,使用的是数据库的嵌入式版本。您不必单独启动数据库,且担心配置。此外,在连接 URL 中您也指出应该自动创建数据库,并且您也通知 Hibernate 自动创建模式(这是 hibernate.hbm2ddl.auto 属性)。因此如果只运行应用程序,可以创建数据库及表。这有益与开发,但当然您会希望产品系统设置不一样。现在数据模型代码已经生成,并可通过 JPA 访问,我们将查看开放该数据,以便应用程序能使用它。
返回列表