- 浏览: 81716 次
- 性别:
- 来自: 重庆
-
最新评论
-
禀圣含华:
怎么弄空格呢?___________然后我固定这些空格,怎么弄 ...
第18章. iText PDF 生成 -
super0555:
managed
第13章 Seam 应用程序框架 -
Javakeith:
代码呢?共享下代码呗!
第18章. iText PDF 生成 -
tonyshen277:
同感啊。还在做Win32下的开发,楼主所说的一个都不能少啊。
转自baidu wqqq 给软件开发初学者 -
kdboy:
的确,把人放在宇宙中去看,从上帝的眼中去看,人的确是非常渺小, ...
人生是什么
28.1. 介绍
如Apache Lucene? 之类的全文本搜索引擎是一种非常强大的技术,给应用程序带来了全文本和有效的查询。 Hibernate搜索,其使用了受保护的Apache Lucene, 用附加的几个注释索引你的域模型,关注数据库/索引同步,并且返回与全文本查询相匹配的标准的托管对象。请记住,思考,存在的不匹配,当在一个文本查询之上处理一个对象的域模型时引发的不匹配(保持数据的最新索引,索引结构与域模型的不匹配,查询不匹配)。但是,快速有效的好处远远地超过了这些局限性。
Hibernate搜索旨在很好地整合,并尽可能自然地使用JPA和Hibernate。作为一个自然延伸,JBoss Seam提供了一个Hibernate搜索集成。
Hibernate搜索对象的详细信息,请参考Hibernate搜索文档 。
28.2. 配置
Hibernate搜索使用META-INF/persistence.xml或hibernate.cfg.xml 文件进行配置
Hibernate搜索配置对大多数配置参数存在智能默认 。这里是一个入门的最小的持久化单元配置。
<persistence-unit name="sample">
<jta-data-source>java:/DefaultDS</jta-data-source>
<properties>
[...]
<!—使用一个基于索引的文件系统 -->
<property name="hibernate.search.default.directory_provider"
value="org.hibernate.search.store.FSDirectoryProvider"/>
<!—索引将被存储的目录 -->
<property name="hibernate.search.default.indexBase"
value="/Users/prod/apps/dvdstore/dvdindexes"/>
</properties>
</persistence-unit>
如果你打算瞄准Hibernate注释或EntityManager 3.2.x (嵌于JBoss AS 4.2.GA内部的), 你也需要配置适当的事件侦听器。
<persistence-unit name="sample">
<jta-data-source>java:/DefaultDS</jta-data-source>
<properties>
[...]
<!-- 使用一个基于索引的文件系统 -->
<property name="hibernate.search.default.directory_provider"
value="org.hibernate.search.store.FSDirectoryProvider"/>
<!-- 索引将被存储的目录 -->
<property name="hibernate.search.default.indexBase"
value="/Users/prod/apps/dvdstore/dvdindexes"/>
<property name="hibernate.ejb.event.post-insert"
value="org.hibernate.search.event.FullTextIndexEventListener"/>
<property name="hibernate.ejb.event.post-update"
value="org.hibernate.search.event.FullTextIndexEventListener"/>
<property name="hibernate.ejb.event.post-delete"
value="org.hibernate.search.event.FullTextIndexEventListener"/>
</properties>
</persistence-unit>
注意
如果使用的是Hibernate注释或EntityManager 3.3.x,这步就不再需要了。
除了配置文件之外,下面的jar包必须被部署:
- hibernate-search.jar
- hibernate-commons-annotations.jar
- lucene-core.jar
注意
如果你在一个EAR中部署了它们,不要忘了更新application.xml。
28.3. 用法
Hibernate搜索使用注释映射实体到一个Lucene索引,详情请查参考文档 。
Hibernate搜索完全整合了API和JPA/Hibernate语义。 仅几行代码,就可以从一个HQL或基于查询请求的条件(Criteria)进行转换。与应用程序交互的主要API是FullTextSession API(Hibernate会话的子类 Session)。
当Hibernate搜索被引入, JBoss Seam就可注入一个FullTextSession。
@Stateful
@Name("search")
public class FullTextSearchAction implements FullTextSearch, Serializable {
@In FullTextSession session;
public void search(String searchString) {
org.apache.lucene.search.Query luceneQuery = getLuceneQuery();
org.hibernate.Query query session.createFullTextQuery(luceneQuery, Product.class);
searchResults = query
.setMaxResults(pageSize + 1)
.setFirstResult(pageSize * currentPage)
.list();
}
[...]
}
注意
FullTextSession继承了org.hibernate.Session,所以,它可以被用来作为一个标准的Hibernate会话。
如果使用Java持久化API, 一个更流畅的集成被提议。
@Stateful
@Name("search")
public class FullTextSearchAction implements FullTextSearch, Serializable {
@In FullTextEntityManager em;
public void search(String searchString) {
org.apache.lucene.search.Query luceneQuery = getLuceneQuery();
javax.persistence.Query query = em.createFullTextQuery(luceneQuery, Product.class);
searchResults = query
.setMaxResults(pageSize + 1)
.setFirstResult(pageSize * currentPage)
.getResultList();
}
[...]
}
当Hibernate搜索被引入,就可注入一个FulltextEntityManager。FullTextEntityManager 继承了EntityManager的搜索特殊方法, 以同样的方式FullTextSession继承了会话 。
当使用EJB 3.0 会话或消息驱动Bean注入 (如,通过@PersistenceContext 注释), 在声明语句中用FullTextEntityManager接口替换EntityManager接口是不可能的。然而,注入实现可以是FullTextEntityManager实现:向下转型就可以了。
@Stateful
@Name("search")
public class FullTextSearchAction implements FullTextSearch, Serializable {
@PersistenceContext EntityManager em;
public void search(String searchString) {
org.apache.lucene.search.Query luceneQuery = getLuceneQuery();
FullTextEntityManager ftEm = (FullTextEntityManager) em;
javax.persistence.Query query = ftEm.createFullTextQuery(luceneQuery, Product.class);
searchResults = query
.setMaxResults(pageSize + 1)
.setFirstResult(pageSize * currentPage)
.getResultList();
}
[...]
}
警告
对于习惯在Seam之外使用Hibernate搜索的人,注意, 使用Search.createFullTextSession 是没有必要的。
Hibernate搜索的具体应用请查看JBoss Seam 发布的DVDStore 或者blog例子 。
发表评论
-
第31章. Seam内建组件
2009-05-28 11:51 1498第31章. Seam内建组件 本章描述Seam内建组件 ... -
第30章. Seam注释
2009-05-26 20:21 1636第30章. Seam注释 在你编写一个Seam应用程 ... -
第31章. Seam内建组件
2009-05-26 20:21 1468第31章. Seam内建组件 本章描述Seam内建组件 ... -
第29章. 配置Seam和打包Seam应用程序
2009-05-26 20:19 1580第29章. 配置Seam和打包Seam应用程序 配置 ... -
第27章. Spring框架集成
2009-05-26 20:16 1444第27章. Spring框架集成 Spring集成 ... -
第26章. Seam和Google网页工具
2009-05-26 20:15 1244第26章. Seam和Google网页工具 ... -
第25章. 远程
2009-05-26 20:15 1326第25章. 远程 Seam 提供了一个从网页远程访 ... -
第24章. Web服务
2009-05-26 20:15 1714第24章. Web服务 Seam 集成了JBossWS, ... -
第23章. 缓存
2009-05-26 20:14 1465第23章. 缓存 在 ... -
第22章. 异步和消息
2009-05-26 20:12 2169第22章. 异步和消息 Seam 使异步执行来自网页请 ... -
第21章. Email
2009-05-26 20:11 1371现在Seam包含一个用于模板和发送邮件的可选组件。 Emai ... -
第 20章. RSS支持
2009-05-26 20:10 834第 20章. RSS支持 20.1. 安装 20.2. ... -
第19章. 微软的Excel 电子表格应用程序支持
2009-05-26 20:07 1854第19章. 微软的Excel 电子表格应用程序支持 S ... -
第18章. iText PDF 生成
2009-05-26 20:01 6529第18章. iText PDF 生成 18.1. 使用PDF ... -
第17章. Seam文本
2009-05-26 19:59 1040第17章. Seam文本 面向协作站点需要一种更有友好的 ... -
第16章. 国际化、本地化和主题
2009-05-26 19:57 1436第16章. 国际化、本地化和主题 Seam使构建国际化应用程 ... -
第15章 安全(2)
2009-05-26 19:56 941第15章 安全(2) 15.5. 错误消息 安全 ... -
第15章 安全(1)
2009-05-26 19:53 102315.1. 概述 Seam安全API为你基于Seam的 ... -
第14章 Seam 和 JBoss 规则
2009-05-26 19:50 1459第14章 Seam 和 JBoss 规则 Seam使从 ... -
第13章 Seam 应用程序框架
2009-05-26 19:49 1444第13章 Seam 应用程序框架 Seam真正地使通过 ...
相关推荐
第二篇 实际应用 第4章 商品维护 36 4.1 准备工作 36 4.2 查看商品列表 40 4.3 创建和编辑商品 44 4.4 本章小结 48 第5章 商品搜索 49 5.1 构造查询表单 49 5.2 复杂的数据库查询 50 5.2.1 ...
在文件名称列表中,"ch28-bookstore"可能表示该实例来源于某个教程或章节的第28章,专门讲解网上书店的实现。这可能包括多个子文件夹或文件,比如模型类(.java)、配置文件(.xml)、JSP视图页面(.jsp)、以及可能...
- **第28章:Java Persistence API (JPA)** - 介绍Java Persistence API的基本概念。 - 分析如何在NetBeans平台中使用JPA。 - 讨论JPA在Java应用开发中的应用场景。 - **第29章:MySQL与EclipseLink** - 介绍...
#### 第八章至第十章:特定领域的应用 这部分内容涵盖了搜索引擎、内容管理系统(CMS)、办公自动化(OA)系统、Ajax 技术等多个方面,旨在提供更广泛的行业视角和技术实践经验。 #### 第十一章:Hibernate、...