如今,Oracle云无处不在。 最初,拉里(Larry)否认在很长一段时间内都需要云,并且在去年的开放世界(Open World)之后就宣布了一些非常早期的公告,而且可用性很差,似乎没有人对此感兴趣了。 但是对我来说,它仍然是隐藏的宝藏,我相信它有赢得客户的机会。 在深入了解该示例之前,该示例将向您展示如何在Oracle Cloud Service上将JAX-RS与Jersey一起使用,我想向您介绍该服务。 随意跳过此第一部分。
Oracle Cloud到底是什么?为什么要关心它?
Oracle Cloud是一个营销术语。 它试图捕获几个共享一个称为平台服务的公共基础的不同服务。 这两个基本上是Java和数据库服务。 从技术上讲,这并不是太新。 我们谈论的是甲骨文的“ 云应用基础 ”。
它位于整个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和包扫描路径一起注册即可,即可为您的注释实现。 选择您喜欢的任何映射。 紧随此示例之后,您应该意识到,稍后我将用URL将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,我认为这可能是炫耀称为Prime-UI的最新Primefaces后代中可能发生的事情的一种好方法。 这些家伙通过提供小部件库,在将他们已经广为使用的JSF库PrimeFaces推向jQuery世界方面做得很好。 通过下载prime-ui zip文件,从PrimeFaces网站获得所需的一切。 如果您是从NetBeans中的Web项目开始的,并且没有添加JSF,则最终会在webapp文件夹中包含一个漂亮的小jsp文件。 打开它并对其进行一些更改和调整。 最重要的是HTML5 doctype声明和所需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>
自动完成示例将输入文本字段绑定到后端,并为您提供预输入功能。 假设您已经在运行上面的其余服务,现在只需在头部分添加以下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的Prime-UI,Jersey和Gson在Oracle Cloud上在Oracle Cloud上的使用,该博客来自Java软件企业软件开发 。
翻译自: https://www.javacodegeeks.com/2013/02/prime-ui-jax-rs-with-jersey-and-gson-on-oracle-cloud.html