`
wangxuliangboy
  • 浏览: 210614 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论
阅读更多

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中的别名

 

在这三步中其实还有些很复杂的东东。。有兴趣的话,可以一起聊聊

 

分享到:
评论
1 楼 quasimodo_es 2013-01-23  
你好,我在compass + terracotta 整合的时候,发现每次重启项目,compass都会重建索引,这个问题你遇到过吗?如何解决,请教一下

相关推荐

    android Mi-Compass源码.rar

    《Android Mi-Compass 源码解析与深入探讨》 在移动设备上,指南针应用是不可或缺的一部分,它能够帮助用户确定方向,特别是在户外活动或者导航时。本篇文章将聚焦于“Android Mi-Compass”源码的解析,深入探讨其...

    Mi_Compass.rar

    《Mi_Compass源码解析与应用探讨》 在IT行业中,源码的分享与学习是技术进步的重要推动力。本文将围绕"Mi_Compass.rar"这个压缩包中的源码进行深入解析,旨在帮助读者理解其背后的编程思想和技术实现,从而提升自身...

    Sass和Compass设计师指南pdf+源码

    《Sass和Compass设计师指南》是一本专为前端开发者和设计师编写的深入解析Sass和Compass技术的专业书籍。Sass(Syntactically Awesome Style Sheets)是一种强大的CSS预处理器,它扩展了CSS语法,增加了变量、嵌套...

    跋山涉水解析compass官方sample

    《跋山涉水解析compass官方sample》 在深入探索编程世界的过程中,理解并掌握各种工具的使用至关重要。本文将详细解读“compass”这一强大的CSS预处理器,并通过分析其官方提供的samples,来帮助开发者更好地理解其...

    compass PetClinic 项目源码及工程

    《compass PetClinic 项目源码深度解析》 在IT领域,开源项目是技术学习与实践的重要资源。本文将深入探讨“compass PetClinic”项目,这是一个基于Spring Boot的Java Web应用,它提供了宠物诊所管理的功能,对于...

    S2SH+compass (实现站内全文检索)

    标题中的"S2SH+compass"指的是一个基于Struts2(S...6. 可能涉及的源码解析和示例 7. 应用部署和运行所需的库文件管理 如果想深入了解这些知识点,可以参考博文链接提供的内容,或者查阅相关框架和Compass的官方文档。

    Mi_Compass.zip项目安卓应用源码下载

    【Mi_Compass.zip项目安卓应用源码解析】 Mi_Compass.zip是一个包含安卓应用源码的压缩包,主要用于学生毕业设计、个人学习以及公司开发项目的参考。这个项目可能是一个基于Android平台的指南针应用,旨在帮助用户...

    Sass和Compass设计师指南源代码

    《Sass和Compass设计师指南源代码》是一个深入解析Sass和Compass技术的资源集合,包含多个章节的源码示例,旨在帮助设计师更好地理解和应用这两种强大的CSS预处理器。Sass(Syntactically Awesome Style Sheets)是...

    Mi_Compass.zip

    《Mi_Compass.zip:深入解析Android源码及毕业设计指南》 在当今信息化时代,Android作为全球最流行的移动操作系统之一,其源码的学习对于开发者来说至关重要。本资料包"Mi_Compass.zip"聚焦于Android源码的研究,...

    px4飞控磁罗盘校准算法理论与代码结合解读

    在这篇文章中,代码解析的文件是ardupilot\libraries\AP_Compass:CompassCalibrator.cpp,该文件中包含了PX4磁罗盘校准算法的实现代码。为了理解这些代码,作者张钦彦在王冲的指导下,提供了一系列的图解和注释来...

    compass学习笔记

    本文将深入探讨Compass的核心概念、安装与配置,并通过实例解析其主要功能。 一、Compass的核心概念 1. **模块化**:Compass的核心理念之一是模块化,它将CSS设计分解为可复用的模块,如方向(directions)、颜色...

    compass+ssh2集成 hibernategps问题

    - `antlr-2.7.6.jar`:ANTLR是一个强大的解析器生成器,可能用于解析Compass或Hibernate的配置文件。 - `cglib-nodep-2.1_3.jar`:CGLIB,一个代码生成库,可能用于Spring的AOP代理或者Hibernate的动态类生成。 -...

    整合compass2.0 spring hibernate示例源程序

    不过,我们可以基于通常的整合方法来解析这个示例可能包含的知识点。 1. **Compass 2.0**:Compass是一个基于Lucene的搜索引擎,提供了与JDBC的无缝集成,使得在数据库中的数据可以直接被索引和搜索。在2.0版本中,...

    APM源码笔记

    【APM源码笔记】是关于ArduPilot项目的源码分析,主要涵盖了代码结构和线程相关的知识。ArduPilot是一个开源的无人机飞行控制系统,适用于多种飞行模型,如ArduPlane、ArduCopter、APMrover2和AntennaTracker。 **...

    Ajax框架ExtJS3.0源代码

    9. **主题定制**:通过Sass(Syntactically Awesome Style Sheets)和Compass工具,可以自定义皮肤和样式,满足个性化设计需求。 10. **性能优化**:3.0版本引入了一些性能优化策略,如延迟加载(Lazy Loading)和...

    java源码:copass源代码.rar

    《Java源码剖析:Copass框架深度解析》 在IT领域,源码是理解软件运行机制最直接的方式,尤其对于开发者来说,阅读优秀的源码能够提升编程技能,洞悉设计思想。今天,我们来深入探讨Java领域的Copass框架源码,以期...

    java源码包2

    Applet钢琴模拟程序java源码 2个目标文件,提供基本的音乐编辑功能。编辑音乐软件的朋友,这款实例会对你有所帮助。 Calendar万年历 1个目标文件 EJB 模拟银行ATM流程及操作源代码 6个目标文件,EJB来模拟银行...

    java源码包---java 源码 大量 实例

    Applet钢琴模拟程序java源码 2个目标文件,提供基本的音乐编辑功能。编辑音乐软件的朋友,这款实例会对你有所帮助。 Calendar万年历 1个目标文件 EJB 模拟银行ATM流程及操作源代码 6个目标文件,EJB来模拟银行ATM...

Global site tag (gtag.js) - Google Analytics