grails有个轻量级事件发布订阅插件叫falcone util,是很好很好的。。。
grails还有个查询插件叫searchable,也是很好很好的。。。
可这两个家伙碰到一起问题就来了。falcone util里把grails原来的sessionFactory给代理了,用的是spring BeanFactoryPostProcessor。而searchable插件调用的compass库使用sessionFactory时直接把他当成其实现SessionFactoryImpl来用,结果世界不清净了。。。
好在我用falcone util只是想把发邮件等逻辑从service中分离,并不想监听hibernate那一大堆事件,所以falcone util对sessionFactory的黑客行为对我是没有意义的,可以去掉。直接改他的源码当然可以,不过这样我就要多维护一套源码。这很不好。
其实只要把falcone util放在spring里的那个BeanFactoryPostProcessor覆盖掉就好了,falcone util源码中这样写的
def doWithSpring = {
...
interceptableSessionFactoryPostProcessor(InterceptableSessionFactoryPostProcessor)
}
InterceptableSessionFactoryPostProcessor就是那个干坏事的BeanFactoryPostProcessor。
简单了,我在我的grails项目的/grails-app/conf/spring/resources.groovy中加一句
interceptableSessionFactoryPostProcessor(Object)
就把原来那个
interceptableSessionFactoryPostProcessor覆盖掉了。世界清静了,偶也~~~