摘抄自compass API
public interface CompassSession
extends CompassOperations, CompassSearchSession, CompassIndexSession
是介于java application 和 Compass直接的一个主要接口。
提供对语义映射对象的基本操作(save,delete 和 load/get).session提供基于对象级别和Resource 级别(已索引的对象模型)的操作。CompassSession的操作室委托于底层的SearchEngine实现的,所以不需要直接访问SearchEngine.
实现并非是线程安全的,每个线程/事务都要从Compass获得它自己的实例。
如果CompassSession抛出一个异常,事务必须回滚并且session要舍弃,如果舍弃,CompassSession内部的状态可能会与搜索引擎的不一致。
使用session依赖于事务是怎么管理的,最简单的形式就像这样:
CompassSession session = compass.openSession();
try {
// do operations with the session
session.commit(); // same as session.close()
} catch (Exception e) {
session.rollback();
}
一个更复杂的包括使用CompassTransaction 完整控制的形式
CompassSession session = compass.openSession();
CompassTransaction tx = null;
try {
tx = session.beginTransaction();
Object result = compassCallback.doInCompass(session);
tx.commit();
return result;
} catch (RuntimeException e) {
if (tx != null) {
tx.rollback();
}
throw e;
} finally {
session.close();
}
以下为compass-reference里部分:
1 CompassSession的获取
CompassSession是从compass获得的,compass.openSession();
常用的获取方式:
CompassConfiguration conf =
new CompassConfiguration().configure().addClass(Author.class);
Compass compass = conf.buildCompass();
CompassSession session = compass.openSession();
2 CompassSession 类型
位于顶部的全功能的CompassSession同时提供了搜索和索引的能力,Compass为搜索或索引提供了简单的API。
CompassSearchSession仅仅提供了搜索的功能,可用于下列方式:
CompassSearchSession session = compass.openSearchSession();
try {
...
CompassHits hits = session.find("jack london");
Author a = (Author) hits.data(0);
Resource r = hits.resource(0);
...
} finally {
session.close();
}
CompassIndexSession只提供了索引功能:
CompassIndexSession session = compass.openIndexSession();
try {
...
session.save(author);
...
session.commit();
} catch (Exception e) {
session.rollback();
} finally {
session.
3 session生命周期
核心Compass接口用openSession()方法管理者CompassSession的创建,当beginTransaction()被CompassTransaction调用的时候,session就绑定到了所创建的transaction并且在贯穿在transaction的生命周期中使用。它意味着如果一个另外的session 在当前的事务中打开了,那么最初的session将会用openSession() 方法返回。
当使用openSession方法时,Compass将会自动尝试并且结合一个已经运行着的外部事务。一个外部事务可以是一个已运行的本地Compass事务,一个JTA事务,或一个spring管理的事务。如果Compass管理结合一个已存在的外部事务,应用就不需要调用CompassSession的beginTransaction()方法或使用CompassTransaction去管理事务,这就
允许简单化Compass在一个进程中已存在事务的管理环境中的使用,不用要求清晰的Compass代码去管理一个Compass 事务
分享到:
相关推荐
【Compass原理深入学习笔记】 Compass是一款基于Apache Lucene的全文搜索引擎框架,它为开发者提供了更高级别的抽象层,简化了搜索引擎的集成工作。在理解Compass之前,我们需要先了解全文检索的基本概念和原理。 ...
CompassSession session = compass.openSession(); ``` - **执行事务**: ```java session.beginTransaction(); ``` - **保存对象**: ```java session.save(product); ``` - **提交事务**: ```java ...
Compass概念: 1:Compass相当于hb的SessionFactory 2:CompassSession相当于hb的Session 3:CompassTransaction相当于hb的transaction。 <br>Compass也是采用CompassConfiguration(装载配置和映射文件...
- **Compass**:类似于HibernateSessionFactory,用于创建线程安全的CompassSession实例,并提供索引级别的操作。 - **CompassSession**:类似于HibernateSession,用于执行保存、删除、查询和加载等操作。虽然轻量...
2. **Compass**:类似于HibernateSessionFactory,用于创建线程安全的CompassSession实例,并提供索引级别的一些操作。 3. **CompassSession**:类似于HibernateSession,用于执行保存、删除、查找等搜索操作。它...
- **Compass**: 相当于Hibernate的`SessionFactory`,提供单线程使用的实例以打开`CompassSession`,并处理索引级别的操作。 - **CompassSession**: 类似于Hibernate的`Session`,执行搜索操作,如保存、删除、...
例如,`CompassSession`和`CompassTransaction`接口提供了对索引的CRUD操作,而`CompassQuery`则用于构建复杂的查询条件。 在实际应用中,我们可以将Compass与Spring框架结合,实现服务的依赖注入和事务管理。这...
- **Compass** 类似于 Hibernate 的 `SessionFactory`,负责创建和管理 `CompassSession`。 - **CompassSession** 类似于 Hibernate 的 `Session`,用于管理索引和查询操作。 - **CompassTransaction** 类似于 ...
此外,利用Compass提供的API,如CompassSession和CompassTransaction,可以实现产品的创建、更新和删除操作,以及执行复杂的查询语句。 3. **实体类注解详解**: - `@Searchable`: 标记实体类为可被搜索的。 - `@...