jax-rs/jersey
如今,Oracle云无处不在。 最初,拉里(Larry)否认在很长一段时间内都需要云,并且在去年的开放世界(Open World)之后就发布了一些非常早的公告,而且可用性很差,似乎没有人对此感兴趣了。 但是对我来说,它仍然是隐藏的宝藏,我相信它有赢得客户的机会。 在深入探讨该示例之前,它将向您展示如何在Oracle Cloud Service上将JAX-RS与Jersey一起使用,我想向您介绍该服务。 随意跳过此第一部分。
Oracle Cloud到底是什么?为什么要关心它?
Oracle Cloud是一个营销术语。 它试图捕获几个共享一个称为平台服务的公共基础的不同服务。 这两个基本上是Java和数据库服务。 从技术上讲,这并不是太新。 我们谈论的是Oracle的“ 云应用基础 ”。
它位于整个Oracle Fusion Middleware Stack的底部(至少在可用的营销幻灯片中),并且是在Exalogic设备上运行的基本软件堆栈。 与Java开发人员最相关的部分是Java EE 5 WebLogic Server和一个称为Traffic Director的负载平衡解决方案。 整洁的部分是,您实际上可以在云中拥有一台真正的Exalogic机器的个人股份,而即使是最小的机架成本也只有一部分成本。 它正在全球的数据中心中运行。 完全管理,包括许可证。 因此,支付每月的螨虫就可以完成管理部分。 而且,如果您有令人愉快的处理许可和受支持平台的知识,那么您将对其中的附加价值有所了解。 从技术上讲,Java服务一点都不感兴趣。 EE 5已过时,即使基于Java SE 6的JRockit都具有Java SE 7的所有新功能以及SE 6的公开更新终止政策,这使过去看起来像陌生人。 但是我仍然认为这是一个好的开始,并且我非常期待在云中拥有最新的WebLogic 12c和一个不错的Java 7。
WebLogic Server和JAX-RS
你还记得古代吗? Java EE 5? 几年来一直使用最新的EE 6规范,感觉就像您必须再次驾驶学生所拥有的汽车。 信不信由你:JAX-R根本不是EE 5的一部分。 这正是JAX-RS无法在Oracle Java Service上立即可用的原因。 但是您可能知道Weblogic团队非常了解它们在采用EE方面运行较晚的事实,因此,他们正在推出功能,这些功能将包含在基本服务器中,并且下一个规范版本将逐渐包含在较早版本中。 早在2011年初,JAX-RS发生了同样的情况。从10.3.4版开始,您只需添加库依赖项或将其打包到应用程序中,就可以将Jersey作为JAX-RS实现。 这也适用于Java服务。 只需在您最喜欢的IDE中启动一个新的Maven项目(可能是最新的NetBeans 7.3,它已在市场上流行)并添加
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-server</artifactId>
<version>1.9</version>
<scope>provided</scope>
</dependency>
泽西岛作为具有范围的依赖项。 另一个指针是应该编译的Java版本。 确保SE 7不会插入某处,并将mavven编译器插件设置为使用源版本1.6和目标版本1.6。 令人遗憾的是...接下来要添加的是Jersey的weblogic.xml库参考:
<library-ref>
<library-name>jax-rs</library-name>
<specification-version>1.1</specification-version>
<implementation-version>1.9</implementation-version>
</library-ref>
这只是告诉容器将其添加到类加载器中。 通常,您必须先将其部署到您的域中。 但请相信我:它已经存在,您可以使用它。 如果您使用的是NetBeans,并且从新的“来自Patterns的RESTful Web服务”向导开始,则可能会遇到另外两个(不需要的)依赖关系,但这将使您避免将Jersey配置添加到web.xml中,看起来应该如此如下所示:
<servlet>
<servlet-name>ServletAdaptor</servlet-name>
<servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
<init-param>
<description>Multiple packages, separated by semicolon(;), can be specified in param-value</description>
<param-name>com.sun.jersey.config.property.packages</param-name>
<param-value>net.eisele.primeui.cloud</param-value>
</init-param>
<init-param>
<param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
<param-value>true</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>ServletAdaptor</servlet-name>
<url-pattern>/webresources/*</url-pattern>
</servlet-mapping>
只需将REST Servlet和程序包扫描路径一起注册即可,即可为您的注释实现。 选择您喜欢的任何映射。 紧随此示例之后,您应该知道,稍后我将使用JavaScript将URL硬编码到服务。 注意“ / webresources”部分。
添加一些JSON
您肯定注意到了et.eisele.primeui.cloud软件包参考。 让我们看看这个类:
@Path('countries')
public class RestResource {
//...
@GET
@Produces('application/json')
public String getJson(@QueryParam('query') String query) {
String[] raw = {
'Albania', 'Algeria',
//...
};
List<ValueHolder> countries = new ArrayList<ValueHolder>();
for (int i = 0; i < raw.length; i++) {
countries.add(new ValueHolder(raw[i]));
}
Gson gson = new Gson();
return gson.toJson(countries);
}
}
public class ValueHolder {
public ValueHolder() {}
public ValueHolder(String label) {
this.label = label;
this.value = 'v_' + label;
}
private String label;
private String value;
}
这基本上包含国家的String []。 每个条目都将转换为ValueHolder对象,并添加到ArrayList,借助Google的gson库将其转换为JSON。 这是我们需要包含在pom.xml中的第二个依赖项
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.2.2</version>
<scope>compile</scope>
</dependency>
通过使用编译范围,确保将其与您的应用程序打包在一起。 现在大部分完成了。 您注意到@QueryParam('query')。 我围绕从String []中选择正确的条目来确定要返回哪个ValueHolder,建立了更多的逻辑。 有关完整示例,请参阅github上的RestResource 。 现在,我们需要一个不错的前端。
Prime-UI进行救援
如今,每个人都在谈论JavaScript,我认为这可能是炫耀最新Primefaces后代Prime-UI可能实现的某些事情的好方法。 这些家伙通过提供小部件库,在将他们已经广为使用的JSF库PrimeFaces推向jQuery世界方面做得很好。 通过下载prime-ui zip文件,从PrimeFaces网站获得所需的一切。 如果您是从NetBeans中的Web项目开始的,并且没有添加JSF,则最终会在webapp文件夹中包含一个漂亮的小jsp文件。 打开它并对其进行一些更改和调整。 最重要的是HTML5文档类型声明和所需JavaScript导入:
<%@page contentType='text/html' pageEncoding='UTF-8'%>
<!DOCTYPE html>
<!-- header, title, all the other stuff you need -->
<!-- jQuery -->
<script src='js/vendor/jquery.js'></script>
<!-- jQuery UI -->
<script src='js/vendor/jquery-ui.js'></script>
<!-- Prime UI Core -->
<script src='js/core/core.js'></script>
<!-- Prime UI Input Text -->
<script src='js/inputtext/inputtext.js'></script>
<!-- Prime UI Autocomplete -->
<script src='js/autocomplete/autocomplete.js'></script>
自动完成示例将输入文本字段绑定到后端,并为您提供预输入功能。 假设您已在上面运行了REST服务,现在只需在头部分添加以下JavaScript:
<script type='text/javascript'>
$(function() {
$('#remote').puiautocomplete({
effect: 'fade',
effectSpeed: 'fast',
completeSource: function(request, response) {
$.ajax({
type: 'GET',
url: './webresources/countries',
data: {query: request.query},
dataType: 'json',
context: this,
success: function(data) {
response.call(this, data);
},
error: function(jqXHR, textStatus, errorThrown) {
console.log(textStatus, errorThrown);
}
});
}
});
});
</script>
并将输入标记添加到页面的正文部分:
<input id='remote' name='remote' type='text'/>
那就是你要做的。 一句话。 如果您打算按原样部署该应用程序,则系统将在其前面显示一个登录屏幕,提示您。 为了向公众开放,您必须添加一个空白
<login-config/>
您的web.xml的元素。 现在继续并将云添加到您的IDE ,并将应用程序部署到您的试用实例。 如果您使用的是github源码 ,则应如下所示:
根据查询,它返回更合格的结果。 用邮递员的方式看起来像这样:
带走
我希望,您根本没想到这会成为火箭科学。 这是一篇基本的文章,内容涉及大多数WebLogic服务器开发人员可能已经知道的内容。 这是Oracle Java Cloud Service的最大优点之一,也是一个很大的缺点。 如果您了解WebLogic,则很可能会喜欢它。 如果您处于开放源代码方面,则可能会遇到Oracle中间件人员熟知的问题,而您却不了解。 EE 5并不比EE 6完整,而EE 7在解决所有不同实现之间的特定于供应商的问题上只会稍好一点。 但是再说一遍:这对您来说不是新事物,对吧? 现在开始:进行试驾并分享您的经验! 期待阅读他们!
参考:我们的JCG合作伙伴 Markus Eisele在Java软件企业博客上的Prime-UI,Jersey和Gson在Oracle Cloud上的Oracle Cloud 。
翻译自: https://www.javacodegeeks.com/2013/02/prime-ui-jax-rs-with-jersey-and-gson-on-oracle-cloud.html
jax-rs/jersey