读书人

Compass-CompassSession

发布时间: 2012-09-12 09:21:30 作者: rapoo

Compass---CompassSession

摘抄自compass API

public interface CompassSessionextends 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 事务

?

?

?

读书人网 >互联网

热点推荐