Shindig学习笔记-REST方式的请求处理过程
Figure 2- Details of the process
当服务器启动后,第一个对social modules的rest?请求到来,会进行DataServiceServlet的初始化工作。这个过程是在所继承的上一级类ApiServlet中的init()方法完成。
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。
这里主要进行的就是对各个模块实际的处理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