揭秘IBM SmartCloud Entry如何实现REST Web Service

当这套 REST API 不能满足用户的需求时,需要增加
新的 REST Web Service。本文将介绍如何在不修改现有代码的
前提下,向 IBM ">SmartCloud Entry 中添加定制的 REST Web Service。

IBM SmartCloud Entry 并非从一砖一瓦开始构造自己的 REST Web Service,而是借助了一些工具。在正式开始之前,您需要对下列名词有一定的了解。

REST: 全称是 Representational state transfer。它是一种 Web 服务的 风格,与作为传统 Web 服务(以 SOAP 为基础)相比,具有轻量化、易于构建、无状态以及使用 HTTP 协议等优势。 JAX-RS:全称是Java TM API for RESTful Web Services,是一个 Java 编程语言的应用程序接口。它提供了对创建 REST 风格的 Web Service 的支持。借助从 Java SE 5 开始引入的标注(Annotation ),JAX-RS 可以简化部署 Web Service 的过程。 Restlet:诞生于 2005 年,是一个针对 Java 语言开发人员的开源项目。Restlet 旨在以一种简单的方式,向开发人员提供各个应用场景下实现 REST Web Service 的方法。虽然早在 JAX-RS 诞生前,Restlet 已经存在了,
但是 Restlet 仍然提供了对 JAX-RS 的支持。目前 Restlet 的最新
稳定版本是 2.1.1,本文的所有内容都是基于 Restlet 2.1.1 来进行说明。 OSGi:全称是 Open Services
Gateway initiative,一直都被视为一种成熟的模块化系统框架,它一般包括桌面应用程序、Web 应用程序、移动应用程序,以及中间件。 它提供了一种底层的基础设施,可用来开发具有模块化、动态性的面向服务应用程序。

Restlet 实现 JAX-RS

在 Restlet 2.1.1 中,可以将 Restlet 分成两个部分:

REST 应用开发 Core:包含 Restlet API 和 Restlet Engine Extension:包含 Restlet 对支持各个技术的扩展,如
Servlet 和 JAX-RS

如果您对 Restlet 稍有了解,可以知道仅靠 Restlet 的 Core 部分就能够实现 REST Web API。而 IBM SmartCloud Entry 则用 JAX-RS 来定义 REST 资源,之后借助 Restlet 对 JAX-RS 的扩展来关联 Restlet Engine 和 REST 资源,从而实现 REST Web API。对于这两种方式的优劣,在这里不做赘述,您可以从网上找到说明。接下来将简要介绍 IBM SmartCloud Entry 的实现方式。

清单 1. 将 JAX-RS application 与 Restlet 关联

package com.developerworks.rest.test;import org.restlet.Component;import org.restlet.ext.jaxrs.JaxRs
Application;import javax.ws.rs.core.Application;public class TestComponent extends Component { public static Application jaxRsApplication; public TestComponent() { super(); // 创造 JAX-RS runtime final JaxRsApplication application = new JaxRsApplication(getContext().createChildContext()); // 将一个 JAX-RS application 添加到 JAX-RS runtime application.add(jaxRsApplication); // 将 JAX-RS runtime 必须添加到一个 Component 中 getDefaultHost().attach(application); }}

清单 1 展示了如何用 Restlet 对 JAX-RS 的扩展来关联 Restlet 和 JAX-RS application。

将 REST Web API 部署到 Servlet 容器中

IBM SmartCloud Entry 是以 OSGi 为核心框架开构建的,所使用的 Servlet 容器是 OSGi 内嵌的 Jetty。清单 2 展示了如何将一个 Restlet Component 部署到 Servlet 容器中,这里我们用到了 Restlet 对 Servlet 的扩展。

清单 2. 将 Restlet Component 部署到 Servlet 容器中

package com.developerworks.rest.test;import java.util.Properties;import javax.ws.rs.ext.RuntimeDelegate;import org.osgi.service.http.HttpContext;import org.osgi.service.http.HttpService;import org.restlet.engine.Engine;import org.restlet.ext.jaxrs.internal.spi.RuntimeDelegateImpl;import org.restlet.ext.servlet.ServerServlet;public class TestApiWhiteboard { static { Engine.getInstance().setUserClassLoader(TestComponent.class.getClassLoader()); } private HttpService http; // 调用该函数启动 REST Web Service public void startup() { ServerServlet serverServlet = new ServerServlet(); Properties initParams = new Properties(); initParams.put("org.restlet.component", TestComponent.class.getName()); HttpContext httpContext = http.createDefaultHttpContext(); try { http.registerServlet("/test", serverServlet, initParams, httpContext); } catch (Exception e) { e.printStackTrace(); } } public void shutdown() { http.unregister("/test"); }}

清单 2 将之前实现的 Component 作为参数传递给 ServerServlet,再将 ServerServlet 注册进 Servlet 容器。至此,我们已经能够发布 REST Web Service 了,但是等等,我们的 Web Service 空空如也,我们还没有添加 REST 资源。

时间: 2024-07-31 14:37:33

揭秘IBM SmartCloud Entry如何实现REST Web Service的相关文章

IBM SmartCloud Entry基于Restlet的Web Service安全机制

本文将简要介绍 IBM SmartCloud Entry 自带的两种 Web Service 安全机制,以及如何在各种客户端编程通过这些安全机制的认证. 环境准备 一个运行的 IBM SmartCloud Entry 系统 Eclipse 3.6 或者更高版本 开始之前 在正式开始之前,先对本文将用到的一些名词做基本的解释. Restlet:诞生于 2005 年,是一个针对 Java 语言开发人员的开源项目.Restlet 旨在以一种简单的方式,向开发人员提供各个应用场景下实现 REST Web

如何向 IBM SmartCloud Entry 添加定制的 REST Web Service

环境准备 一个运行的 SmartCloud Entry 系统 Eclipse 3.6 或者更高版本 揭秘 IBM SmartCloud Entry 如何实现 REST Web Service 开始之前 IBM SmartCloud Entry 并非从一砖一瓦开始构造自己的 REST Web Service,而是借助了一些工具.在正式开始之前,您需要对下列名词有一定的了解. REST: 全称是 Representational state transfer.它是一种 Web 服务的 风格,与作为传

IBM SmartCloud Entry 的 Web services 安全机制揭秘

环境准备 一个运行的 IBM SmartCloud Entry 系统 Eclipse 3.6 或者更高版本 基于 Restlet 的 Web Service 安全机制 开始之前 在正式开始之前,先对本文将用 到的一些名词做基本的解释. Restlet:诞生于 2005 年,是一个针对 Java 语言开发人员的开源项目.Restlet 旨在 以一种简单的方式,向开发人员提供各个应用场景下实现 REST WebService 的方法.目前 Restlet 的最新稳定版本是 2.1.1,本文的所有内容

IBM SmartCloud Entry for IBM Power Systems入门指南

我最近参加了在悉尼举行的 IBM http://www.aliyun.com/zixun/aggregation/13696.html">SmartCloud Entry for Power Systems 研讨会,所见所闻给我留下了深刻印象.本文是我对该产品的第一印象,但远远没有展现出它的全部潜力. 第一印象 我是一位命令行爱好者,所以我对使用一个图形用户界面 (GUI) 来部署一个完整的 IBM AIX® 环境很感兴趣. 毕竟,在有机会通过安全 Shell (SSH) 客户端沉湎于命令

以SmartCloud Entry产品实践为例介绍VMWare私有云状态

之后以 IBM http://www.aliyun.com/zixun/aggregation/13696.html">SmartCloud Entry(SCEntry) 为例,介绍了 SCEntry 如何获取 VMWare 云端对象的状态,以及如何与云端状态保持同步. VMWare 是全球虚拟化解决方案的领导厂商.它不仅提供了诸如 vSphere 和 vCenter 等各种不同的虚拟化产品和管理组件,而且为这些产品和组件开放了 API 以及提供了不同的 SDK,以便开发者开发出自己的 V

对SmartCloud Entry日志进行分析

本文主要介绍 IBM http://www.aliyun.com/zixun/aggregation/13696.html">SmartCloud Entry 的日志,包含采用的日志框架.日志的结构以及日志的分析,帮助用户在使用 SmartCloud Entry 的过程中在出现问题的情况下,快速的定位. 现在流行的日志框架有很多,例如 Log4J.SLF4J.Apache Common-Logging 等,每种框架使用.配置的方式又不尽相同,在 SmartCloud Entry 中,我们使

IBM SmartCloud Notes Web全新功能说明

IBM SmartCloud Notes Web 中全新的 Galactic Name Picker 就能满足这些需求,它提供了全新设计的名片夹格式的用户搜索界面,包含标准搜索(用户名搜索),高级搜索(按照职位,部门,地点等信息搜索),高级搜索排序,同时在结果界面中提供图片,部门等信息方便用户区分.此外,特别考虑到非英文用户的需求,提供了按照企业组织结构进行浏览,别名支持等特性.通过本文,读者可以了解 IBM SmartCloud Notes web 中这一全新功能所能带来的方便,开始设置并使用

使用IBM SmartCloud Enterprise和WebSphere DataPower实现混合云

随着 IBM 客户开始规划他们未来三至五年的云战略,他们开始认识到没有万能的解决方案.最佳的云战略是硬件.软件.即用即付的服务和云提供的业务解决方案的明智组合:该解决方案利用跨战略.迁移.集成和管理的成熟专家服务进行全面补充,并由供应商和合作伙伴生态系统进行提供.客户需要在私有云中运行其业务的一些要素,还必须集成在公共云中运行的一些元素.例如,某些应用程序在客户企业防火墙内(私有云)运行,而另一些应用程序则在 IBM SmartCloud Enterprise(公共云)上运行,这样可以优化性能.

IBM SmartCloud Enterprise管理(一) 使用 ICCT 为 VM 创建软件包

本文提供了 IBM Image Construction and Composition Tool 的概述,并演示如何创建和维护 IBM SmartCloud Enterprise 上的软件包.用一个示例来介绍创建 Google Chrome 软件包的步骤,包括定义 Chrome 软件包元数据,添加安装脚本,以及在 SmartCloud Enterprise 上注册.您应该对云计算基本概念有 一个基本的了解.要尝试本文的步骤,需要一个 IBM SmartCloud Enterprise 用户帐户