在Shindig项目中,典型的rest方式的请求一般是这样的(省略主机地址):
…/social/rest/people/{guid}/@all/{pid}
…/social/rest/activities/{guid}/@self/{activityid}
…/social/rest/appdata/{guid}/@self/{appid}
…/social/rest/groups/{guid}
然后在项目的Web工程的配置文件web.xml可以看到,所有rest方式的请求都会被映射到DataServiceServlet上。
- ……
- <servlet>
- <servlet-name>socialRestapiServlet</servlet-name>
- <servlet-class>
- org.apache.shindig.protocol.DataServiceServlet
- </servlet-class>
- <init-param>
- <param-name>handlers</param-name>
- <param-value>org.apache.shindig.social.handlers</param-value>
- </init-param>
- </servlet>
- ……
- <servlet-mapping>
- <servlet-name>socialRestapiServlet</servlet-name>
- <url-pattern>/social/rest/*</url-pattern>
- </servlet-mapping>
- ……
Figure 1-Servlet configuration for REST request(web.xml)
So all the request are pass to DataServiceServlet. When the first request comes to the server after it started.
Figure 2- Details of the process
当服务器启动后,第一个对social modules的rest 请求到来,会进行DataServiceServlet的初始化工作。这个过程是在所继承的上一级类ApiServlet中的init()方法完成。
初始化:
ApiServlet:
servlet初始化:
1. 获取系统中的handlers的配置位置。In web.xml, 对socialRestapiServlet 的配置有一个初始参数:org.apache.shindig.social.handlers。这个配置只是一个名称,作为一个Annotation,用来设置Guice中的Key。这样可以将系统中的handlers进行分组,在实际server实现中采用不同的handlers实现。
对实例的绑定是在SocialApiGuiceModule中配置的.
SocialApiGuiceModule继承google Guice中的AbstractModule类,覆写了configure方法,进行相关handers的注入绑定(还有诸如对ParameterFetcher,XStreamConfiguration,BeanConverter等其他类的绑定):
· ActivityHandler
· AppDataHandler
· PersonHandler
· MessageHandler
这里可以在getHandlers()方法中配置目前系统所有已经实现的XXXHandler类。
2. 然后利用HandlerRegistry中的addHandlers()方法,注入添加所需要的处理Handlers。
DefaultHandlerRegistry
这里主要进行的就是对各个模块实际的处理handler的注册和匹配工作,在初始化中是最重要最主要的工作都是在这里面完成。
public void addHandlers(Set<Object> handlers)
前面已经提到过将handles的实例绑定到injector中。在这个函数中会根据请求的路径获取实际用来处理的具体handle。这里会调用creatRestHandle()函数,将实际的handlers中和Methods方法做一个映射的Map。最终结果就是在一个HandlerRegistry类型dispatcher对象中储存所有的Handlers 路径和Http method的映射。
private void createRestHandler(Provider<?> handlerProvider,
Service service, Operation op, Method m)
这个函数会通过service,operation和http method方法将handler中的方法映射到RestInvocationHandler中去。最后会通过RestInvocationHandler中的execute方法来执行实际的业务逻辑。
public RestHandler getRestHandler(String path, String method)
这个方法是利用request的路径进行handle中的处理方法完全匹配。
以/social/rest/activities/{guid}/@self/{activityid}
过程如下:首先是根据activites相匹配的@Service,则映射到ActivityHandler类。
line-height: 21px; font-fam
分享到:
相关推荐
适用于Chrome的Shindig屏幕共享扩展程序 Shindig是一个视频聊天平台,可同时容纳多达1,000名参与者。 Shindig可让您与活动参与者聊天,向主要演讲者提问,亲自向观众展示,加入视频组并进行聊天以进行协作,在私人...
7. **Servlet和JSP API**: 由于Shindig是基于Servlet容器运行的,所以需要这些库来处理HTTP请求和响应。 8. **Google Collections**: 一些早期版本的Shindig可能依赖于Google Collections(现在已发展为Guava),它...
5. **Jetty** 或 **Tomcat**:作为嵌入式服务器,用于托管 Shindig 应用,处理 HTTP 请求并提供动态内容。 6. **OpenSocial API**:包含了 OpenSocial 规范中的各种接口和类,如 Person、Activity 和 Group。 7. *...
它不仅提供了一套通用API,还通过Shindig这样的参考实现降低了开发者的学习成本。随着技术的发展,OpenSocial将继续进化,为开发者带来更多便利。对于那些希望在多个社交平台上快速部署应用的企业和个人来说,...
"shindig-trunk"这个文件名可能是项目源代码库的一个分支或主干,通常在版本控制系统中,"trunk"表示项目的主线开发。这意味着你可能获得的是Apache Shindig的最新未发布版本的源代码。 在深入研究源代码之前,你...
6. **安全性**:学习如何在OpenSocial环境中处理安全问题,例如防止XSS(跨站脚本攻击)和CSRF(跨站请求伪造)。 7. **社区资源**:利用OpenSocial社区的资源,如官方文档、开发者论坛和示例代码,可以帮助快速...
Shindig支持多种架构模式,包括REST API等,这使得开发者可以通过简单的HTTP请求来访问和操作数据。Shindig的设计架构强调灵活性和扩展性,使得它能够很好地适应不同的应用场景和技术栈。 #### 支持OpenSocial的...
9. **社区和资源**:OpenSocial有一个活跃的开发者社区,提供文档、示例代码、论坛和博客,帮助新手快速入门并解决开发过程中的问题。 10. **适应性**:OpenSocial的应用不仅限于社交网站,也可以应用于企业内部...
GroupWyze允许用户在单个页面上创建事件,shindig,视频群聊,聚会,音乐会,欢乐时光,团队建设和一般的恶作剧。 朋友,家人,同事和熟人可以对特定事件的细节进行投票,以使民主化并最大程度地提高乐趣! 然后,...
除了APC缓存的实现,文档中也提到了文件缓存的实现方式,尽管具体的代码没有给出,但通常文件缓存的实现会涉及到读写文件操作,以及对文件路径、文件读写权限等的处理。文件缓存通常用于那些对性能要求不是非常高的...
#Shindig警长管理事件的应用程序。 ##最小可行产品供组织者和财务批准者使用。 组织者可以添加,删除和编辑组织和事件。 组织者可以增加和减少活动费用。 财务批准者可以确认已收到收入,并且可以批准或拒绝组织者...
近年来,IBM继续推动开源技术的发展,对KVM、oVirt和Open Virtualization Alliance的支持,以及对Apache Shindig、Apache Hadoop(作为IBM BigInsights的一部分)、Eclipse Orion、Lyo、Paho、OpenJDK、Apache ...