jax-rs/jersey_在Oracle Cloud上的Prime-UI,JAX-RS和Jersey和Gson

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值