引用说明:原文来自于http://sirius.01242.org/shindig_java_internals_diagram_updated/,为了方便本人阅读,文本格式略有调整。
英文原文:http://rollerweblogger.org/roller/entry/shindig_java_internals_diagram_updated
Shindig JAVA版本内部结构
我发表第一篇和第二篇 Shindig JAVA版本工作原理之后,Shindig已经修改了很多。现在Shindig中有两个分离的web services协议,下面我分享一下我对Shindig内部结构的了解情况。
注意:本文只包括了Shindig中social API的实现,没有关于Gadget server的部分。
我们来看看发生了什么。在OpenSocial spec邮件列表中曾经有长篇的讨论,关于REST和RPC这两种OpenSocial网络服务API到底哪个更好 。(比如。 这里 和 这里)。我不打算再讨论这两方。简单来说,这里并不存在真正的竞争,在OpenSocial 0.8.1中包括了两个并存的网络服务协议:
虽说为了达到同一个目的而使用了两种方式有点郁闷,但是幸运的是它们有很多相似之处.比如说, JSON-RPC 协议的方法有GET, POST, PUT 和 DELETE。而且 在JSON-RPC和REST API中使用的+JSON格式是一样的。这样使事情变得稍微简单一些,如果用Shindig作为OpenSocial实现,只要实现了一组接口就可以支持REST和JSON-RPC两种方式。下面我解释一下具体是怎样工作的:

接下来我会解释一个请求的全部过程; 新加的部分用 黄色高亮显示:
1… 一个请求通过 /social/rest 中的 DataServiceServlet 或者 /social/rpc中的 JsonRpcServlet 进入Shindig, 这两个Servlet各包含一个DataRequestHandler (从HandlerProvider中取得)的map,用各自处理的路径做键值。同时还包括一对JavaBean的转换器,在后面的处理中用来转换输出的POJO到XML或者JSON格式。
2… Servlet 创建一个 RequestItem, 这个对象用来解析请求,后面需要用到。这个对象也有两个转换器,用来转换XML或者JSON数据到Java POJO。
有两个不同的RequestItem,一个给REST请求用的RestfulRequestItem和一个给RPC请求用的RpcRequestItem。 RestfulRequestItem解析进来的URL的参数等信息,把PUT或POST的数据作为输入,自动地从JSON,XML或者ATOM转换成Java的POJO对象,根据SPI中的规范。
如果是在RPC中,所有的数据都是通过POST方式,RequestItem会从发送到服务器的JSON对象中提取参数和输入负载。
3… Servlet调用合适的处理程序。 如果是一个单一的请求,Servlet按照请求的”路径”(比如,URL路径信息中的第一截),查找DataRequestHandler对象。Servlet调用选中的handler对象来处理这个请求。 如果是一个批量的请求,Servlet将循环进行以上的操作。
4… Shindig中三个处理器中的某一个处理器处理进入的请求 然后返回一个或多个ResponseItem,其中包含了用来返回的多个Java POJO对象。 在这里通过调用 requestItem.getTypedParameter(),进入的XML和JSON被反序列化成POJO。 Shindig 提供了三个 DataRequestHandler:
-
PersonHandler: 返回Person对象包括详细的用户资料
-
ActivtyHandler: 返回用户或者组的Activities 对象,也可以新建Activity
-
AppDataHandler: 返回应用数据,并可以让应用存储数据
注意: 如果你要添加自己的 REST/RPC 接口来扩展Shindig, 像我们在 SocialSite中做的, 你可以插入你自己的处理程序。 使用 Guice 依赖注入来挂载你自己的 HandlerProvider, 返回你自己的处理器对象(handler)。
5… Shindig 处理器调用 Shindig服务提供者 (SPI), SPI是一系列返回ResponseItem的接口。 里面有一系列的不同类型的POJO模型对象,用来做REST和RPC调用的返回结果。 服务的具体实现返回这些POJO对象,然后Shindig会自动地把他们转换成合适的JSON或者XML。
-
PersonService: 返回Person对象包括详细的用户资料
-
ActivtyService: 返回用户或者组的Activities 对象,也可以新建Activity
-
AppDataService: 返回应用数据,并可以让应用存储数据
注意: 如果你想通过标准的OpenSocial REST或者RPC接口来展现你程序中的社会化数据,SPI就是接入点。你需要自己实现这些接口来调用你自己的后台来创建,获取,更新和删除数据。接入也是通过Guice来做。
6… 处理器返回一个ResponseItem, 其中包括了一个或者多个POJO对象。Servlet可能直接输出或者在批量请求的情况下继续调用处理器来收集更多的ResponseItem对象。
7…Servlet 转换并序列化,最后返回ResponseItem。 REST API中, 当一个或者多个处理器返回了ResponseItem之后, DataServiceServlet 调用合适的转换器来序列化ResponseItem到JSON或者XML格式, 这个取决于在请求中的’format’参数。
分享到:
相关推荐
Java 版 Shindig 是 OpenSocial 的实现之一,它提供了一个服务器端的框架,使得开发者可以使用 Java 语言开发这些社交应用程序。Shindig 也被称为 Apache SocialSite,它实现了 OpenSocial 规范中的各种 API,包括 ...
**OpenSocial Java版Shindig使用Jar包** OpenSocial 是一个开放的标准,旨在定义一套API,使得社交网络应用可以跨平台运行。Java版的Shindig是实现OpenSocial规范的一个开源实现,它提供了服务器端的基础设施,使得...
3. 构造器与依赖注入:在处理类中定义一个构造器,接收必要的服务对象,如`AppScoreService`。使用`@Inject`注解确保Guice依赖注入框架在运行时能自动填充这些依赖。 4. 定义操作方法:新增的方法通常应返回`Future...
这意味着你可能获得的是Apache Shindig的最新未发布版本的源代码。 在深入研究源代码之前,你需要熟悉以下概念: 1. 版本控制工具:如Git,用来管理源代码的版本和协作开发。 2. Maven或Gradle:构建管理系统,用于...
适用于Chrome的Shindig屏幕共享扩展程序 Shindig是一个视频聊天平台,可同时容纳多达1,000名参与者。 Shindig可让您与活动参与者聊天,向主要演讲者提问,亲自向观众展示,加入视频组并进行聊天以进行协作,在私人...
此版本的REST API具有以下特点: - **无JavaScript访问**:即使客户端不支持JavaScript,也能通过简单的REST调用来访问OpenSocial数据。 - **服务器到服务器通信**:支持不同系统间的直接数据交换,增强了系统的...
GroupWyze允许用户在单个页面上创建事件,shindig,视频群聊,聚会,音乐会,欢乐时光,团队建设和一般的恶作剧。 朋友,家人,同事和熟人可以对特定事件的细节进行投票,以使民主化并最大程度地提高乐趣! 然后,...
10. **适应性**:OpenSocial的应用不仅限于社交网站,也可以应用于企业内部协作平台,为企业提供定制化社交功能,增强员工间的沟通和协作。 学习OpenSocial API不仅可以让你构建出有趣的社交应用,还能提升你在社交...
1. **环境搭建**:首先,你需要设置一个支持OpenSocial的开发环境,这可能包括安装Shindig服务器,配置数据库,以及设置必要的开发工具。 2. **API调用**:深入理解数据API和Gadgets API,学习如何获取和更新社交...
#Shindig警长管理事件的应用程序。 ##最小可行产品供组织者和财务批准者使用。 组织者可以添加,删除和编辑组织和事件。 组织者可以增加和减少活动费用。 财务批准者可以确认已收到收入,并且可以批准或拒绝组织者...
近年来,IBM继续推动开源技术的发展,对KVM、oVirt和Open Virtualization Alliance的支持,以及对Apache Shindig、Apache Hadoop(作为IBM BigInsights的一部分)、Eclipse Orion、Lyo、Paho、OpenJDK、Apache ...
例如,文档提到了参考了shindig的缓存类和apc,这意味着开发者可以借鉴shindig项目中的缓存设计思路,或者直接复用其中的某些缓存实现代码。 在实际应用中,开发者需要根据具体需求和环境选择合适的缓存策略。例如...