日期:2014-05-17  浏览次数:20762 次

有个动态加载和更新的问题,希望大家多提提想法
问题:一个在线web系统有很多filter,能适用于各种产品,所以需要配置那个启用,那个关闭,还有临时调整的,就得需要动态改变,但由于访问量大,所以想采用在线更新了,大家有思路么?

设计目标:可以添加未知功能的过滤器,生效不需要重启,可以定义过滤器在链中的位置。

待解决问题:设计出过滤器层实现,主要关注点为动态加载。此处怎么样动态加载


------解决方案--------------------
filter是根据访问路径来分类的,一旦一个工程启动,那么它的路径分类应该是明确的。所以我觉得应该不存在什么“配置那个启用,那个关闭,还有临时调整的”问题吧?所有filter应该随工程启动而启动。
如果真要做随时添加而不重启的话,也可以把filter存数据库中,然后通过反射加载也行。
其它方法没想。
------解决方案--------------------
也只能说一个思路吧,
做一个Filter,其中用OSGi API做起来,以前的每个Filter实现为分立的OSGi Bundle,这样便可以利用OSGi实现动态加载和临时调整了。
至于filter的次序关系,就自己在“前端filter”中实现了,定义个配置文件格式什么的就最酷了。
------解决方案--------------------
基本上就是自己写个全局性Filter(拦截所有URL),然后根据数据库中的配置,进行过滤或调用其它过滤器。

难点主要在于刷新配置的机制,也就是比如你修改了数据库中的配置,然后通知该Filter重新去读去数据库配置时,如何能够不终端过滤器自身的工作过程。