Compass是一个强大的,事务的,高性能的对象/搜索引擎映射(OSEM:object/search engine mapping)与一个Java持久层框架.
Compass实现了通过注册Hibernate的相关事件实现了数据的实时索引..
我写Spring+Compass+Hibernate做了一个例子..通过这个例子顺便看了下源码.
<bean id="compassGps" class="org.compass.gps.impl.SingleCompassGps" init-method="start" destroy-method="stop">
<property name="compass" ref="compass" />
<property name="gpsDevices">
<list>
<ref local="hibernateGpsDevice" />
</list>
</property>
</bean>
<bean id="hibernateGpsDevice" class="org.compass.spring.device.hibernate.dep.SpringHibernate3GpsDevice">
<property name="name">
<value>hibernateDevice</value>
</property>
<property name="sessionFactory" ref="sessionFactory" />
</bean>
SingleCompassGps 在初始化的时候会调用init-method属性配置的start方法..
这个方法在SingleCompassGps的父类AbstractCompassGps中. 而start方法会返回调用SingleCompassGps
的doStart方法.通过CompassSettings设置Compass的一些默认的相关环境属性..我们也可以在配置SingleCompassGps的时候配置indexSettings属性。。
当属性设法完成之后会运行下面这段话:
for (CompassGpsDevice device : devices.values()) {
device.start();
}
调用SingleCompassGps中配置的gpsDevices属性。循环调用里面的start方法。。
而在SpringHibernate3GpsDevice类的start方法。这个方法主要用来注册Hibernate 的相关事件。。
Hibernate3.0与Hibernate3.1中事件集合类为SessionEventListenerConfig,EventListeners。
当通过Hibernate插入,更新,删除分别会触发PostInsertEventListener,PostUpdateEventListener,PostDeleteEventListener
会分别调用onPostInsert,onPostUpdate,onPostDelete方法
当通过Spring的HibernateTemplate.save方法来保存entity时,会调用刚注册的postInsert方法。。
然后会调用singleCompassGps的executeForMirror方法。。并传入CompassCallback回调类实例。
executeForMirror方法会调用CompassTemplate的execute(并传入CompassCallback)
在CompassTemplate的execute方法中会获得CompassSession.
Compass索引一条记录分为三步。。
一。通过CompassSession.beginTransaction会来开起事务。。(调用LuceneSearchEngine来开启事务.具体得看SpringSyncTransaction.begin方法)
二。调用回调的doInCompass方法。(1。将CPM.xml文件中配置的是映射列与Lucene的Field对应起来。
2。调用CompassSession.create方法---LuceneSearchEngine.createOrUpdate----transIndexManager.create(resource, analyzer)---在create的时候会建立一个Lucene RAMDirectory,将Document往内存里面写)
三。事务提交(Transaction.doCommit方法。----CommitCallable.call方法。这个方法会先判断是否有内存索引。如果有的话。就会通过IndexWriter.addIndex方法将内存索引与FSDirectory索引合并)
FSDirectory索引路径为LuceneSearchEngineStore.openDirectory(subIndex) //subIndex就是cpm.xml中的别名
在这三步中其实还有些很复杂的东东。。有兴趣的话,可以一起聊聊
分享到:
相关推荐
《Android Mi-Compass 源码解析与深入探讨》 在移动设备上,指南针应用是不可或缺的一部分,它能够帮助用户确定方向,特别是在户外活动或者导航时。本篇文章将聚焦于“Android Mi-Compass”源码的解析,深入探讨其...
《Mi_Compass源码解析与应用探讨》 在IT行业中,源码的分享与学习是技术进步的重要推动力。本文将围绕"Mi_Compass.rar"这个压缩包中的源码进行深入解析,旨在帮助读者理解其背后的编程思想和技术实现,从而提升自身...
《Sass和Compass设计师指南》是一本专为前端开发者和设计师编写的深入解析Sass和Compass技术的专业书籍。Sass(Syntactically Awesome Style Sheets)是一种强大的CSS预处理器,它扩展了CSS语法,增加了变量、嵌套...
《跋山涉水解析compass官方sample》 在深入探索编程世界的过程中,理解并掌握各种工具的使用至关重要。本文将详细解读“compass”这一强大的CSS预处理器,并通过分析其官方提供的samples,来帮助开发者更好地理解其...
《compass PetClinic 项目源码深度解析》 在IT领域,开源项目是技术学习与实践的重要资源。本文将深入探讨“compass PetClinic”项目,这是一个基于Spring Boot的Java Web应用,它提供了宠物诊所管理的功能,对于...
标题中的"S2SH+compass"指的是一个基于Struts2(S...6. 可能涉及的源码解析和示例 7. 应用部署和运行所需的库文件管理 如果想深入了解这些知识点,可以参考博文链接提供的内容,或者查阅相关框架和Compass的官方文档。
【Mi_Compass.zip项目安卓应用源码解析】 Mi_Compass.zip是一个包含安卓应用源码的压缩包,主要用于学生毕业设计、个人学习以及公司开发项目的参考。这个项目可能是一个基于Android平台的指南针应用,旨在帮助用户...
《Sass和Compass设计师指南源代码》是一个深入解析Sass和Compass技术的资源集合,包含多个章节的源码示例,旨在帮助设计师更好地理解和应用这两种强大的CSS预处理器。Sass(Syntactically Awesome Style Sheets)是...
《Mi_Compass.zip:深入解析Android源码及毕业设计指南》 在当今信息化时代,Android作为全球最流行的移动操作系统之一,其源码的学习对于开发者来说至关重要。本资料包"Mi_Compass.zip"聚焦于Android源码的研究,...
在这篇文章中,代码解析的文件是ardupilot\libraries\AP_Compass:CompassCalibrator.cpp,该文件中包含了PX4磁罗盘校准算法的实现代码。为了理解这些代码,作者张钦彦在王冲的指导下,提供了一系列的图解和注释来...
本文将深入探讨Compass的核心概念、安装与配置,并通过实例解析其主要功能。 一、Compass的核心概念 1. **模块化**:Compass的核心理念之一是模块化,它将CSS设计分解为可复用的模块,如方向(directions)、颜色...
- `antlr-2.7.6.jar`:ANTLR是一个强大的解析器生成器,可能用于解析Compass或Hibernate的配置文件。 - `cglib-nodep-2.1_3.jar`:CGLIB,一个代码生成库,可能用于Spring的AOP代理或者Hibernate的动态类生成。 -...
不过,我们可以基于通常的整合方法来解析这个示例可能包含的知识点。 1. **Compass 2.0**:Compass是一个基于Lucene的搜索引擎,提供了与JDBC的无缝集成,使得在数据库中的数据可以直接被索引和搜索。在2.0版本中,...
【APM源码笔记】是关于ArduPilot项目的源码分析,主要涵盖了代码结构和线程相关的知识。ArduPilot是一个开源的无人机飞行控制系统,适用于多种飞行模型,如ArduPlane、ArduCopter、APMrover2和AntennaTracker。 **...
9. **主题定制**:通过Sass(Syntactically Awesome Style Sheets)和Compass工具,可以自定义皮肤和样式,满足个性化设计需求。 10. **性能优化**:3.0版本引入了一些性能优化策略,如延迟加载(Lazy Loading)和...
《Java源码剖析:Copass框架深度解析》 在IT领域,源码是理解软件运行机制最直接的方式,尤其对于开发者来说,阅读优秀的源码能够提升编程技能,洞悉设计思想。今天,我们来深入探讨Java领域的Copass框架源码,以期...
Applet钢琴模拟程序java源码 2个目标文件,提供基本的音乐编辑功能。编辑音乐软件的朋友,这款实例会对你有所帮助。 Calendar万年历 1个目标文件 EJB 模拟银行ATM流程及操作源代码 6个目标文件,EJB来模拟银行...
Applet钢琴模拟程序java源码 2个目标文件,提供基本的音乐编辑功能。编辑音乐软件的朋友,这款实例会对你有所帮助。 Calendar万年历 1个目标文件 EJB 模拟银行ATM流程及操作源代码 6个目标文件,EJB来模拟银行ATM...