转自:http://www.ibm.com/developerworks/cn/lotus/mashups-opensocial/index.html
作为 Web 2.0 技术的领袖和革新者,IBM 定义了一个可重用的组件技术,叫做 iWidgets,它允许客户快速构建和部署情景应用。iWidget 技术的关键部分是 iWidget 容器。容器管理 iWidget 的生命周期,并帮助 IBM 及其客户将多种内容快速、轻松地聚合到强大的情景应用中。现在,iWidget 及其容器(称为 Mashup Enabler)用在了各种 IBM 产品中,包括 IBM WebSphere® Portal、IBM Lotus® Connections 和 Business Process Manager (BPM) 堆栈中。
IBM 业务战略的一个关键部分是提供高可用性产品和推广开发计算技术,使其客户能够构建最能满足他们需求的解决方案。作为此战略的一部分,IBM 一直与 OpenAjax Alliance 合作,OpenAjax Alliance 是一个致力于创建可互操作的 widget 技术的企业供应商团体,包括 Tibco、Microsoft® 和 Adobe®。
例如,在消费领域,一个名为 OpenSocial 的标准悄然兴起。这一社区驱动的规范定义了一个基于浏览器的组件模型,叫做 gadget。此外,OpenSocial 定义了一个 API,用于访问关于用户档案及其社交图(比如其朋友、活动、共享应用、身份验证和授权)的信息。一个名为 Shindig 的 Apache Software Foundation 的开源项目提供了一个 OpenSocial 的参考实现。
随着行业发展,如 IBM 之类的领先企业必须提供战略,允许客户根据其独特的业务需求选择合适的组件模型。作为行业领袖,IBM 正与这些开放社区合作,通过添加企业功能和提高与其他组件的互操作性改进这些技术。本文通过展示如何在 Mashup Center 中使用 OpenSocial gadget 介绍了在组件模型之间实现互操作性的几个基本步骤。
各种 Web 2.0 用户界面组件的格式也日益多样化,需要工具将其组合在一起。这些 Web 组件经常交互并且相互发送消息,有时会导致互操作性问题。Mashup Center 不仅提供了工具用来发现并将不同的 widget 组件组装到同一页面上,包括 OpenSocial gadget,而且提供了功能使其互联而且能够跨各种组件保持这些连接。
mashup 页面是一个简单的 HTML 标记,可以包含到 iWidget 和其他类 gadget 的引用。Mashup Center Livetext 框架解析 HTML 并将请求转交给不同的 widget 和 gadget 容器以呈现 widget。页面标记包含其他元数据,比如标题、首选项、连接以及其他组件,遵守声明性语法集合,用于将 iWidget 实例放到更广泛的标记集合中,比如 HTML。此声明式语法称为 iWidget 微格式。
清单 1 是一个 mashup 页面示例,包含 iWidget、OpenSocial gadget 和其他相关元数据。
/mum/widget-catalog/images/widgetPub.png iWidget Publisher /mum/widget-catalog/images/widgetSub.png iWidget Subscriber random-number random-number |
现在,我们看一下 iWidget 组件模型和 OpenSocial 容器提供的以下通信模型:
- iWidget 上的事件操作
- OpenSocial gadget 上的事件操作
iWidget 上的事件操作
iWidget 组件模型提供了一个事件操作集合。
Mashup Center 利用 OpenAJAX Hub 作为其底层通信实现。OpenAJAX Hub 是一组标准的 JavaScript™ API,提供了一个消息传递引擎,支持同一页面上使用的 Ajax 库和 Web 2.0 组件的安全性和互操作性。这些 Web 组件间的通信通过一个名为 Managed Hub 的托管安全管理器传递。Managed Hub 接受或者拒绝连接,支持与其他组件的安全整合。
以下是一些 iWidget 事件操作 API。有关广播代码示例,请参见 widgetPub.js 和 widgetSub.js:
- broadcastEvent(String targetEvent, Object payload, String payloadType, String sourceid)。允许页面组件将事件广播到页面上的所有 widget 或组件。
- publishEvent(String topic, Object payload, String payloadType, String sourceid)。允许页面组件将可用的全局事件公布到所有其他页面组件。
- subscribeEvent(String event, Object object, String eventCallback, String subscribeCallback, String sourceid)。允许页面组件将一个可用的全局事件订阅给所有其他页面组件。
- unsubscribeEvent(Object subscriptionHandler, String sourceid)。允许页面组件取消所有其他页面组件对可用的全局事件的订阅。
OpenSocial gadget 上的事件操作
OpenSocial 使用 Remote Procedure Call (RPC) 及其容器中的 pubsub API 来实现 gadget 间的通信。例如,Shindig rpc.js 为 OpenSocial gadget 和容器提供了底层通信机制。在一个跨域通信场景中,rpc.js 确保消息接收方知道创建方而创建方知道消息接收方。
pubsub.js 和 pubsub-router.js 接口调用 RPC API 用于 gadget 到 gadget 通信以及容器和 gadget 之间的消息路由。
要在 OpenSocial 容器页面上启用 pubsub 功能,可以下载 rpc.js 和 pubsub.js 接口,使用 HTML
现在,我们来看一下 gadget 级的发布和订阅 API。gadgets.pubsub API 提供了针对 gadget 的发布和订阅操作。要使 API 可用,gadget 定义文件必须将 pubsub 要求的特性()声明为 的子元素,如清单 3 所示。
以下是发布和订阅 API 的说明: 注:有关代码示例,请参见本文下载部分 sampleGadgets.war 文件中的 osPub.xml 代码示例。
启用 Mashup Center 的 OpenSocial 特性 以下步骤展示了如何使用补丁包 2.0.0.1 启用 Mashup Center 2.0 的 OpenSocial 特性。使用带有 Apache Maven 的 Apache Shindig BETA3 构建一个 Shindig WAR 文件。 要下载和安装必要的程序并构建 Shindig WAR 文件,按以下步骤操作: 注:如果第一次安装这些程序,确保向系统 PATH 变量添加可执行路径,这样可以在命令提示符处运行它们。
按以下步骤在 Mashup Center 2.0.0.1 或更高版本上部署 Shindig WAR 文件。
按以下步骤启用 Shindig 容器:
按以下步骤将 OpenSocial gadget 添加到 Mashup Center 面板:
您已经完成了本节中的所有步骤,现在可以将 OpenSocial gadget 和 iWidget 拖放到 Mashup Center 画布上创建页面。 此样例场景提供了一个简单的示例,展示了 iWidget 和 OpenSocial widget 如何通过交互操作来发送和接收任意数字。 按以下步骤操作:
现在您了解了 widget 如何在页面上交互操作,可以进一步创建一个更为复杂的场景。例如,可以编辑 catalog_os.xml 并添加自己的 iWidget 和 OpenSocial gadget。还可以指向 OpenSocial 目录中现有的组件来体验这些 Web 2.0 组件之间的其他互操作性。在这些场景中,要记住如果 Mashup Center 正在运行要停止它,然后输入 config.bat update-was-config,这样您的 OpenSocial 类可以刷新。 在本示例场景中另一个要注意的地方是 Web 2.0 组件是隐式通信的。iWidget 和 OpenSocial gadget 要在同一个预定义的特定信道上发布和订阅。OpenSocial 和 iWidget 开发人员只需调用常规事件和为每个组件类型指定的 pubsub API,并且 Mashup Center 面板必须能够处理它们之间的通信。 如上例所示,iWidget 使用以下的 iWidget API 来发布和订阅。
对于 OpenSocial gadget,您可以使用以下常规 pubsub API:
现在您应该能够了解 Mashup Center 如何允许 iWidget 和 OpenSocial gadget 交互操作和通信了。 来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/14751907/viewspace-628245/,如需转载,请注明出处,否则将追究法律责任。 转载于:http://blog.itpub.net/14751907/viewspace-628245/ |