eclipselink_EclipseLink JPA-RS简介

eclipselink

在以前的系列文章中,我介绍了如何创建一个将JPA用于持久层的JAX-RS服务。 EclipseLink包含一个名为JPA-RS的组件,该组件可用于轻松自动地将持久性单元公开为RESTful服务(支持XML和JSON消息)。 MOXy为JPA-RS提供XML和JSON绑定,并且双向映射之类的东西会自动为您映射。 在另一篇文章中,我将介绍如何使用MOXy定制本示例中显示的消息。

我将使用在以下帖子中创建的JPA模型:

  • 第1部分–数据库
  • 第2部分–将数据库映射到JPA实体
    • 注解

包装/部署

使用JPA-RS是一个简单的包装问题。 我们将创建一个WAR,其中包含JAR中的JPA模型,JPA-RS JAR和用于初始化JPA模型的简单会话bean。 对于此示例,我使用的是包含EclipseLink 2.5的GlassFish 4.0的升级版本。

  • http://dlc.sun.com.edgesuite.net/glassfish/4.0/promoted/

客户JPARS.war

  • 网络信息
  • META-INF
    • 清单文件

持久性WeaverBean

JPA-RS要求已初始化JPA实体。 我们将创建一个简单的会话bean来完成此任务。

package org.example.ejb;import javax.ejb.*;
import javax.persistence.*;@Startup
@Singleton
@LocalBean
public class PersistenceWeaverBean {@SuppressWarnings("unused")@PersistenceUnit(unitName = "CustomerService")private EntityManagerFactory emf;}

客户JPA.jar

该JAR包含我们在以下文章中定义的JPA模型:

  • 第2部分–将数据库映射到JPA实体
    • 注解

org.eclipse.persistence.jpars_2.5.0.qualifier.jar
这是来自EclipseLink安装的JPA-RS JAR:

<ECLIPSELINK_HOME>/jlib/jpa/org.eclipse.persistence.jpars_2.5.0.qualifier.jar

(服务元数据)

一旦部署了WAR,我们的服务就会启动。 我们可以执行GET来查看我们服务的元数据。

GET(应用程序/ xml或应用程序/ json)

用于获取服务元数据的URI具有以下格式:

http://{Server}/{Application}/persistence/v1.0/{PersistenceUnit}/metadata

以下是我们示例的URI:

http://localhost:8080/CustomerJPARS/persistence/v1.0/CustomerService/metadata

响应

以下是我们服务的元数据。 除了持久性单元名称之外,我们还看到JPA模型中每个实体的元数据链接。 接下来,我们将仔细研究Customer实体。

{"persistenceUnitName": "CustomerService","types": [{"_link": {"href": "http://localhost:8080/CustomerJPARS/persistence/v1.0/CustomerService/metadata/entity/Address","method": "application/json","rel": "Address"}},{"_link": {"href": "http://localhost:8080/CustomerJPARS/persistence/v1.0/CustomerService/metadata/entity/PhoneNumber","method": "application/json","rel": "PhoneNumber"}},{"_link": {"href": "http://localhost:8080/CustomerJPARS/persistence/v1.0/CustomerService/metadata/entity/Customer","method": "application/json","rel": "Customer"}}]
}

(实体元数据)

如果我们点击其中一个实体的链接,那么我们将获得以下信息:

  • 实体属性。
  • 我们可以在实体上执行的CRUD操作。
  • 我们可以在实体上执行的命名查询。

GET(应用程序/ xml或应用程序/ json)

用于获取实体元数据的URI具有以下格式:

http://{Server}/{Application}/persistence/v1.0/{PersistenceUnit/metadata/entity/{Entity}

以下是获取Customer实体的元数据的URI:

http://localhost:8080/CustomerJPARS/persistence/v1.0/CustomerService/metadata/entity/Customer

响应

以下是客户实体的元数据。 我们将仔细研究POST操作(第37-39行)和命名查询(第49-58行)。

{"name": "Customer","attributes": [{"name": "id","type": "long"},{"name": "firstName","type": "String"},{"name": "lastName","type": "String"},{"name": "address","type": "Address"},{"name": "phoneNumbers","type": "Set<PhoneNumber>"}],"linkTemplates": [{"method": "get","href": "http://localhost:8080/CustomerJPARS/persistence/v1.0/CustomerService/entity/Customer/{primaryKey}","rel": "find"},{"method": "put","href": "http://localhost:8080/CustomerJPARS/persistence/v1.0/CustomerService/entity/Customer","rel": "persist"},{"method": "post","href": "http://localhost:8080/CustomerJPARS/persistence/v1.0/CustomerService/entity/Customer","rel": "update"},{"method": "delete","href": "http://localhost:8080/CustomerJPARS/persistence/v1.0/CustomerService/entity/Customer/{primaryKey}","rel": "delete"}],"queries": [{"queryName": "findCustomersByCity","returnTypes": ["Customer"],"linkTemplate": {"method": "get","href": "http://localhost:8080/CustomerJPARS/persistence/v1.0/CustomerService/query/findCustomersByCity;city={city}","rel": "execute"},"jpql": "SELECT c FROM Customer c WHERE c.address.city = :city"}]
}

持久化实体

我们将使用POST操作创建Customer实体的新实例。

POST(应用程序/ xml或应用程序/ json)

用于创建实体的URI具有以下格式:

http://{Server}/{Application}/persistence/v1.0/{PersistenceUnit}/entity/{Entity}

以下是用于创建Customer实例的URI:

http://localhost:8080/CustomerJPARS/persistence/v1.0/CustomerService/entity/Customer

请求

以下是我们将发布到上述URI中的客户数据的JSON表示形式:

{"id" : 1,"firstName" : "Jane","lastName" : "Doe","address" : {"id" : 1,"street" : "1 A Street","city" : "Any Town"},"phoneNumbers" : [{"id" : 2,"type" : "work","num" : "555-1111"}, {"id" : 3,"type" : "home","num" : "555-2222"}]
}

执行查询

JPA-RS会为我们在JPA模型中定义的每个命名查询自动创建URI:

GET(应用程序/ xml或应用程序/ json)

执行命名查询的URI具有以下格式:

http://{Server}/{Application}/persistence/v1.0/{PersistenceUnit}/query/{NamedQuery;Parameters}

下面,我们将调用名为findCustomersByCity的查询,以查找来自Any Town的所有客户。

http://localhost:8080/CustomerJPARS/persistence/v1.0/CustomerService/query/findCustomersByCity;city=Any%20Town

响应

以下是调用命名查询的结果。 我们可以看到实体之间的关系表示为链接。 您在链接上执行GET以获取引用的数据。

[{"firstName": "Jane","id": 1,"lastName": "Doe","_relationships": [{"_link": {"href": "http://localhost:8080/CustomerJPARS/persistence/v1.0/CustomerService/entity/Customer/1/address","rel": "address"}},{"_link": {"href": "http://localhost:8080/CustomerJPARS/persistence/v1.0/CustomerService/entity/Customer/1/phoneNumbers","rel": "phoneNumbers"}}],"address": {"_link": {"href": "http://localhost:8080/CustomerJPARS/persistence/v1.0/CustomerService/entity/Address/1","method": "GET","rel": "self"}},"phoneNumbers": [{"_link": {"href": "http://localhost:8080/CustomerJPARS/persistence/v1.0/CustomerService/entity/PhoneNumber/3","method": "GET","rel": "self"}},{"_link": {"href": "http://localhost:8080/CustomerJPARS/persistence/v1.0/CustomerService/entity/PhoneNumber/2","method": "GET","rel": "self"}}]}
]

参考:在Java XML和JSON绑定博客上,我们的JCG合作伙伴 Blaise Doughan 介绍了EclipseLink JPA-RS 。

翻译自: https://www.javacodegeeks.com/2013/04/introducing-eclipselink-jpa-rs.html

eclipselink

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/349129.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

# 字符串从右往左查找_字符串匹配(搜索,查找)算法

(一)前言所谓的字符串匹配就是在一个长字符串(可称文本T)中找一个短字符串(可称模式P)&#xff0c;看长字符串中是否存在短字符串&#xff0c;若存在则返回出现的第一个位置&#xff0c;若不存在则返回一个标记。字符串搜索算法有很多&#xff0c;比较知名的自然是大名鼎鼎Knut…

html5按钮样式具有子项目,如何使用HTML5+css3制作出12种常用的按钮开关样式(附完整代码)...

现如今前端网页的开发越来越注重设计感&#xff0c;这些设计感更体现在细节处&#xff0c;今天向大家具体介绍一下各式各样的开关按钮是如何使用HTML5css3制作出来的&#xff0c;希望可以帮到大家。使用HTML5css3制作按钮开关的原理根据设计的要求填充各种颜色。按钮开关的形状…

Java命令行界面(第17部分):jw-options

JavaWorld文章处理Java中的命令行参数&#xff1a; Matthias Laux博士关闭的案例介绍了一个基于Java的简单库&#xff0c;用于处理命令行参数 &#xff0c;在本文中我将其称为jw-options 。 被引用的文章提供了有关为何在构造Options类时做出某些设计决策的背景信息。 本文的“…

计算机网络第三章知识网络,计算机基础教案第三章计算机网络基础知识教案

计算机 基础 教案一、网络基础知识1、计算机网络的概念计算机网络是指将分布在不同地理位置的具有独立功能的多台计算机用通信设备连接起来&#xff0c;并配以相应的网络软件&#xff0c;以实现信息传递和资源共享。计算机网络的三个主要组成部分&#xff1a;(1)主机(2)通信网络…

plc secs通讯协议_SECS/GEM解决方案:PLC与MES间的通讯

符合SEMI E4, E5, E30, E37 的 SECS/GEM通讯方案遵循 SEMI 人机交互设计&#xff0c;提供触摸屏支持让你触手可及。毫米级的响应&#xff0c;让设备行云流水般流畅。我们为你快速搭建PLC与MES之间的SECS/GEM桥梁SECS/GEM介绍SECS/GEM定义半导体生产设备与主机之间的通讯关系&am…

计算机程序和系统股票走势分析,证券走势指标匹配分析系统的设计与实现

摘要&#xff1a;随着计算机技术在证券分析领域的广泛应用,利用计算机对股票数据进行分析,已经成为股票走势技术分析方法的必然选择.经过历代伟大的证券分析师不懈的研究,已经总结出多种根据股票历史数据计算出的指标,在证券分析领用运用计算机技术来提高投资收益率已经成为各大…

security放行 spirng_Spring Security配置

第一步&#xff0c;空Spring Boot环境。暂时不添加了Spring Security依赖。第二步&#xff0c;确保项目能够正常运行。启动启动项 Application.javaimport org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.EnableAutoConfiguration…

Cactoos中的面向对象的声明式输入/输出

Cactoos是一个面向对象的Java原语库&#xff0c; 我们几周前才开始使用它。 目的是为JDK&#xff0c;Guava&#xff0c;Apache Commons等提供一种干净且更具声明性的替代方案。 我们不是使用静态过程&#xff0c;而是使用对象的使用方式&#xff0c;而是使用对象。 让我们看看输…

计算机研发部门职责,计算机研发岗位职责

计算机视觉研发员 •负责计算机视觉相关的技术研发工作,包括但不限于:人脸识别、物体检测与分类、静态图像或视频分类与分析、图像质量评价、图像处理等•负责计算机视觉方向前沿问题的研究,结合未来实际应用场景,提供技术解决方案•负责完成相关技术的研究项目申请、学术论文发…

vue中请求接口怎么封装公共地址_vue请求接口的封装

import api from ./api;import request from./request;//获取url上的rest参数&#xff0c;返回参数列表 /{userId}/{roleId} > [userId, roleId]functiongetUrlParams(url) {return (url.match(/\{(\w)\}/g) || []).map(param > /\{(\w)\}/.exec(param)[1]);}/** 创建一个…

java实现迷你计算机,用JAVA写一个迷你编辑器.doc

用JAVA写一个迷你编辑器用JAVA编写一个迷你编辑器WINDOWS的记事本程序是非常方便的一个文字处理工具&#xff0c;用它来编辑纯文本文件快捷而灵巧。我用JAVA写了一个编辑器程序&#xff0c;模仿“记事本”的功能。这不是为了替代记事本&#xff0c;而是因为下列两个目的&#x…

cypress测试脚本_Cypress 自动化测试学习使用

安装mkdir cypress-startnpm install# 进入创建的项目目录cd /your/project/pathcd cypress-startnpm install cypress --save-devyarn addcd /your/project/pathcd cypress-startyarn add cypress --dev打开运行cpress./node_modules/.bin/cypress open或者使用npm bin$(npm b…

hadoop综述_Hadoop书籍赠品–综述

hadoop综述各位极客&#xff0c; Packt Publishing关于Apache Hadoop 的书籍赠品已经结束。 您可以在这里找到比赛的原始帖子。 获奖者 将会获得这本书奖的6位幸运获奖者是&#xff08;姓名出现在他们的电子邮件中&#xff09;&#xff1a; Hadoop真实世界解决方案食谱 塞…

便捷式计算机无线功能按钮,TP-Link TL-MR13U便携式无线路由器Client模式设置

本文介绍了TP-Link TL-MR13U便携式无线路由器&#xff0c;在“客户端模式(Client)”下的设置方法。TL-MR13U工作在“客户端模式(Client)”时&#xff0c;主要作用是用来接收无线WiFi信号&#xff0c;把无线WiFi信号转换为有线网络&#xff0c;实现让台式电脑上网。TP-Link TL-M…

Java命令行界面(第6部分):JOpt简单

JOpt Simple的主页将这个基于Java的库称为“用于解析命令行选项的Java库&#xff0c;例如您可能传递给调用javac的Java库&#xff0c;”该Java库试图“使用POSIX getopt&#xff08;&#xff09;的命令行选项语法&#xff09;和GNU getopt_long&#xff08;&#xff09; 。” 这…

矩阵相乘的strassen算法_矩阵乘法的Strassen算法+动态规划算法(矩阵链相乘和硬币问题)...

矩阵乘法的Strassen这个算法就是在矩阵乘法中采用分治法&#xff0c;能够有效的提高算法的效率。先来看看咱们在高等代数中学的普通矩阵的乘法两个矩阵相乘上边这种普通求解方法的复杂度为: O(n3)也称之为暴力求解或者朴素求解这是暴力求解的代码&#xff0c;三重循环&#xff…

计算机c盘哪些东西可以清理,细说电脑c盘哪些文件可以删除

有些网友反映&#xff0c;自己看C盘里的文件太多了&#xff0c;电脑又太卡&#xff0c;情急之下就把里面的东西删掉了&#xff0c;现在系统都不能用了。为了避免大家再入这个坑&#xff0c;我给大家讲一下哪些是C盘里的无用文件&#xff0c;并且删除后不会影响系统使用C盘是指电…

springboot 注解动态赋值_SpringBoot 使用 @Value 注解读取配置文件给静态变量赋值

1、application.properties 配置文件CxU免费资源网mail.usernamexue163.commail.passwordxuemail.hostsmtp.163.commail.smtp.authtrue2、给普通变量赋值&#xff0c;直接在变量上添加 Value 注解CxU免费资源网import org.springframework.beans.factory.annotation.Value;publ…

软件测试度量计算方法有哪些,软件测试度量(三)

进度差异趋势6.4.3 范围变化(SC)这个指标指出如何固定测试范围。下面总范围 以前的范围 新范围&#xff0c;如果范围扩大的话总范围 以前的范围 - 新范围&#xff0c;如果范围缩小的话一个发布版本范围变化趋势7、结论度量是评估的重要组成部分以及任何业务改进的基础。是应…

ceph与hdfs的比较_分布式存储中HDFS与Ceph两者的区别是什么,各有什么优势?

过去两年&#xff0c;我的主要工作都在Hadoop这个技术栈中&#xff0c;而最近有幸接触到了Ceph。我觉得这是一件很幸运的事&#xff0c;让我有机会体验另一种大型分布式存储解决方案&#xff0c;可以对比出HDFS与Ceph这两种几乎完全不同的存储系统分别有哪些优缺点、适合哪些场…