前言:因javaeye的每页显示有限制,所以只能分成3页来发布了。
2.2.1 Library的分析
顾名思义,Library例子主要展现的是图书馆中的图书信息的检索。
2.2.1.1 项目文件基本构成
序号 |
文件类型 |
文件列表 |
备注 |
1 |
Compass的配置文件 |
compass.cfg.xml |
|
2 |
检索类 |
Article.java Author.java Book.java |
|
3 |
检索类映射文件 |
Article.cpm.xml Author.cpm.xml Book.cpm.xml |
|
4 |
通用元数据定义文件 |
Library.cmd.xml |
|
5 |
测试类 |
LibraryTests.java |
|
6 |
其他类 |
Name.java Identifiable.java |
Name作为Author的辅助类。 Identifiable提供一个getId()方法。作为root级的检索类必须实现的接口。 |
2.2.1.2 项目文件分析
2.2.1.2.1 Compass的配置文件
Compass的配置文件是compass.cfg.xml。对于熟悉hibernate的人来说,compass的配置文件的组成结构极为熟悉,简直跟hibernate的配置文件是双胞胎。
以下是Library的配置内容:
<compass>
//表示索引的路径:\library\target\index\
<setting name="compass.engine.connection">target/index</setting>
//通用的元数据定义文件。
<meta-data resource="org/compass/sample/library/library.cmd.xml" /> </compass>
2.2.1.2.2 检索类
序号 |
类名 |
描述 |
备注 |
1 |
Book |
书 |
实现Identifiable接口 |
2 |
Article |
文章 |
|
3 |
Author |
作者 |
实现Identifiable接口 |
3个检索类中,两个都实现了Identifiable接口。该接口很简单:
public interface Identifiable {
Long getId();
}
这说明了什么呢?
有了Id,即有一个证明,能被单独搜索到。Article是不应该被独立搜索到的,当系统检索到一个Article的时候,被返回的总是与之相关的Author对象,而非Article对象本身。这一点在实体的配置文件中得以充分体现。
用Compass官方的语言来说,Book和Author是root级的检索类,而Article是非root级的检索类。
2.2.1.2.3 检索类映射文件
序号 |
配置文件名 |
描述 |
备注 |
1 |
Book.cpm.xml |
书 |
|
2 |
Article.cpm.xml |
文章 |
|
3 |
Author.cpm.xml |
作者 |
|
Compass的映射方式有以下三种:
1、RSEM(Resource/SearchEngine Mapping)
2、OSEM(Object/Search Engine Mapping)
3、XSEM(Xml/Search Engine Mapping)
本例中使用的是OSEM。具体的内容参见《compass-reference》。