Compass---CompassSession

摘抄自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 事务

猜你喜欢

转载自crazycat03.iteye.com/blog/570241
今日推荐