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

使用 Apache Wink 和 OpenJPA 构建 REST 资源(2)

使用 Apache Wink 和 OpenJPA 构建 REST 资源(2)

获取 OpenJPA 数据存储链接 建立实体模型之后,需要实现连接逻辑来建立与您数据存储(可以是任意类型的数据库)的连接。您可以编写一个包含逻辑的独立层连接 OpenJPA 与数据库。一个比较简单的方法是将所有关系型数据库配置放在一个属性文件中,然后定义一个类,比如 OpenJpaAdminService,它可以提取数据库连通性。连接数据库的逻辑使用 getEntityManager() 方法。每当它从 OpenJpaAdminService 中调用时,您可以查找属性文件,以便 OpenJPA 可以知道连接到哪个数据库。
部分提供的示例中,OpenJpaMediator.java 是一个可以处理所有 OpenJPA 操作的类。在这个类构造器中,调用 OpenJpaAdminService.getEntityManager() 函数检查属性文件 dbConnection.properties。您可以通过两种方法连接一个数据库:
  • 典型模式中,您可以使用 JDBC 驱动器细节进行连接。
  • 使用 JNDI 查找获取一个 JDBC 连接(参见  文件中的 OpenJpaAdminService.java)。
REST 资源建模 Apache Wink 是一个用于 REST 服务(通过惟一 URI 识别的资源)的简单实现和消耗的框架。每个资源有一个或多个表现方式,在 Web 服务调用期间可在客户端和服务之间转换。Wink 提供:
  • 在 RESTful 体系结构风格中定义和实现资源的必要基础架构,进而促进统一接口、多种表示形式和服务自省。
  • REST Web 服务的 API 功能支持。Wink 是一个基于 Java 的 API,它使用注释简化 Web 服务客户端和终端的开发和部署。
尽管使用 servlet 可以实现 RESTful 服务,但是总是需要执行太多 HTTP 代码来实现业务逻辑。Wink 隐藏了所有 HTTP 代码并将 servlets 绑定到 Java 类的单个方法中。
表示一个资源类 资源可以表示一个可支持数据检索和操作的可用组件。资源类可以定义帮助实现事务逻辑的资源方法。 显示如何为 Employee 资源创建一个资源类。
终端用户总是以 XML 或 JSON 方式来表示一个资源。当终端用户需要创建或更新资源的一个新实例时,它们传递该资源相应的 XML 或 JSON。资源类中的 Wink 注释通常将 XML 或 JSON 编组到一个 JAVA 对象中。定义一个实体对象 (_Employee) 实例的好处是可以在终端编组 XML 或 JSON,您拥有一个已经保存到数据存储中的实体对象。因此,您可以使用 Wink 框架的这一功能来持久化一个 OpenJPA 实体对象。类似地,当用户想要检索该资源的某一实例时,OpenJPA 将从数据存储中检索该资源,然后提供实体对象。Wink 注释帮助将检索到的实体对象解组到 XML 或 JSON 中并将其发送给终端用户。
清单 3. 资源表现方式
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
package rest.resource;

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlTransient;
import openJpa.model._Employee;

/**
* @XmlAccessorType Controls whether fields or Javabean properties are
* serialized by default
* XmlAccessType.PROPERTY: Every getter/setter pair in a JAXB-bound class will
* be automatically bound to XML, unless annotated by XmlTransient. Fields are
* bound to XML only when they are explicitly annotated by some of the JAXB
* annotations.
*
*/
  
@XmlAccessorType(XmlAccessType.PROPERTY)
/**
* @XmlRootElement: Maps a class to an XML element
*/
  
@XmlRootElement(name="employee")
public class Employee {
/**
* Instantiate Enity Object of Employee to achieve integration of APACHE WINK
* and OPEN JPA
*/
private _Employee modelEmployee;
     
    public Employee() {
        super();
        this.modelEmployee = new _Employee();
    }
     
    public Employee(_Employee modelEmployee) {
        this.modelEmployee = modelEmployee;
    }
     
    @XmlTransient
    public _Employee getEmployee() {
        return this.modelEmployee;
    }
    public void setEmployee(_Employee modelEmployee)
    {
        this.modelEmployee = modelEmployee;
    }
    /**
    @XmlElement: Maps a JavaBean property to a XML element derived from property name
    */
    @XmlElement(name = "employeeName")
    public String getEmployeeName() {
        return modelEmployee.getEmployeeName();
    }
     
    public void setEmployeeName(String employeeName) {
        modelEmployee.setEmployeeName(employeeName);
         
    }
     
    @XmlElement(name = "address")
    public String getAddress() {
        return modelEmployee.getAddress();
    }
     
    public void setAddress(String address) {
        modelEmployee.setAddress(address);
    }
     
    @XmlElement(name = "email")
    public String getEmail() {
        return modelEmployee.getEmail();
    }
     
    public void setEmail(String email) {
        modelEmployee.setEmail(email);
    }
     
    @XmlElement(name = "telephone")
    public int getTelephone() {
        return modelEmployee.getTelephone();
    }
     
    public void setTelephone(int telephone) {
        modelEmployee.setTelephone(telephone);
    }
     
    @XmlElement(name = "employeeId")
    public int getEmployeeId() {
        return modelEmployee.getEmployeeId();
    }
     
    public void setEmployeeId(int employeeId) {
        modelEmployee.setEmployeeId(employeeId);
    }
     
    @XmlElement(name = "version")
    public int getVersion() {
        return modelEmployee.getVersion();
    }
     
    public void setVersion(int version) {
        modelEmployee.setVersion(version);
    }
}

返回列表