Openfire的web服务器使用的是jetty,jetty启动的类是AdminConsolePlugin,至于该类是什么时候调用的就再也不赘述。web
Openfire整合spring MVC的关键点在于你是在什么时候初始化DispatcherServlet。若是你要把spring mvc整合在openfire项目中那么直接配在openfire的web.xml就好了,可是若是你是想把它配置在一个插件中,那么下面的配置过程可能就会对你有那么一点帮助。所须要用的jar包在网上去下载。spring
1)建立openfire插件项目,网上有大把的例子。服务器
2)配置web-custom.xml,注意contextConfigLocation的路径地址,根据你本身路径更改。mvc
3)spring-actions.xml配置,须要扫描的包路径根据你本身的路径更改。app
4)Action类,spring mvc的action注解类怎么写就不啰嗦了,这里须要注意的一点就是,@RequestMapping(value=”/eraplugins/”)这里必定要加上你的插件名路径,否则spring mvc找不到这个mapping。ui
5)到此插件这块就差很少配置好了,而后build出来先放一边,接下来修改openfire这边的一些东西。spa
6)找到PluginServlet类的registerServlets方法,添加参数PluginClassLoader pluginLoader,添加以后PluginManager类会报错,在报错的地方把pluginLoader丢进去。hibernate
7)回到PluginServlet类的registerServlets方法,找到Object instance=servletClass.nerInstance()这一步。插件
添加这么一段代码server
此处的主要目的是,openfire注册插件时自己没有对<init-param>作解析,这里本身添加,固然只针对DispatcherServlet。
8)作完上面的步骤以后再向下走一行,找到if(instance instanceof GenericServlet) { 这一步。按照图中的代码添加一段代码。
到此openfire插件+spring mvc的配置也就完成了,至于如何整合hibernate和spring容器暂时只有个头绪,尚未去验证过。
Spring mvc的配置主要就是一个DispatcherServlet类,该类会扫描加载全部Controller,其余的service和entity等等则是由ContextLoaderListene操做的,因此若是想把hibernate或者spring容器等等配置进插件,大概就要在ContextLoaderListene上面作文章了。
再提点openfire上面的东西,openfire涉及到不少的动态加载,好比plugin,因此从我的感受上面来讲openfire中有不少不一样的classLoader,加载启动openfire服务器的是Thread.currentThread().getContextClassLoader();这个ClassLoader在serverStarter中已经变成JiveClassLoader (openfier自定义的一个),
这个ClassLoader暂且咱们就当作一条主线的ClassLoader,而后plugin的ClassLoader是pluginLoader = new PluginClassLoader();加载jetty的时候new 一个,加载你写的插件再new一个。而初始化DispatcherServlet的时候加载配置文件的ClassLoader获取的是Thread.currentThread().getContextClassLoader();因此这里就能够看出上面改pluginServlet起到的做用了。至于具体的过程就再也不啰嗦了,能够去看看openfired的PluginManager和PluginServlet 这两个类,另外再去跟一跟DispatcherServlet的源代码。