对于我的最终项目,我计划在 ejb 模块中实现休眠搜索。由于远程客户端调用索引我的数据库,我有以下异常:
原因:org.hibernate.service.UnknownServiceException:请求未知服务 [org.hibernate.search.hcore.impl.SearchFactoryReference]
请在下面找到我的代码:
1.我的ejb会话:
import javax.annotation.PostConstruct;
import javax.ejb.LocalBean;
import javax.ejb.Stateless;
import org.apache.lucene.search.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.hibernate.search.FullTextSession;
import org.hibernate.search.Search;
import org.hibernate.search.query.dsl.QueryBuilder;
/**
* Session Bean implementation class HibernateIndexer
*/
@Stateless(name="HIND")
@LocalBean
public class HibernateIndexer implements HibernateIndexerRemote, HibernateIndexerLocal {
protected Configuration config;
protected SessionFactory sessionFactory;
protected Session session;
protected FullTextSession ftx;
/**
* Default constructor.
*/
public HibernateIndexer() {
// TODO Auto-generated constructor stub
}
@PostConstruct
private void init(){
config=new Configuration();
sessionFactory= config.configure().buildSessionFactory();
session=sessionFactory.openSession();
ftx=Search.getFullTextSession(session);
}
public void indexer(){
try {
ftx.createIndexer().startAndWait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
session.close();
}
}
2.我的ejb实体
2.1 TgPersonnePer.java
import org.hibernate.search.annotations.Analyze;
import org.hibernate.search.annotations.DocumentId;
import org.hibernate.search.annotations.Field;
import org.hibernate.search.annotations.Index;
import org.hibernate.search.annotations.Indexed;
import org.hibernate.search.annotations.IndexedEmbedded;
import org.hibernate.search.annotations.Store;
@Indexed
public class TgPersonnePer implements java.io.Serializable {
@DocumentId
private String perId;
@IndexedEmbedded
private TgPersonneMoralePer tgPersonneMoralePer;
public TgPersonnePer() {
}
public TgPersonnePer(String perId) {
this.perId = perId;
}
// setter and getter
...................
}
2.2 TgPersonneMoralePer.java
import org.hibernate.search.annotations.Field;
public class TgPersonneMoralePer implements java.io.Serializable {
private String perId;
private TgPersonnePer tgPersonnePer;
@Field
private String perDenoSociale;
@Field
private String perSigle;
public TgPersonneMoralePer() {
}
public TgPersonneMoralePer(TgPersonnePer tgPersonnePer) {
this.tgPersonnePer = tgPersonnePer;
}
// Setter and getter
.................
}
3. 我的休眠配置文件:hibernate.cfg.xml
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="hibernate.bytecode.use_reflection_optimizer">false</property>
<property name="hibernate.connection.driver_class">oracle.jdbc.OracleDriver</property>
<property name="hibernate.connection.url">jdbc:oracle:thin:@localhost:1521:XE</property>
<property name="hibernate.connection.username">exam</property>
<property name="hibernate.connection.password">azerty</property>
<property name="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</property>
<property name="hibernate.search.autoregister_listeners">true</property>
<property name="hibernate.validator.apply_to_ddl">false</property>
<!-- Echo all executed SQL to stdout -->
<property name="hibernate.hbm2ddl.auto">update</property>
<property name="hibernate.show_sql">true</property>
<!-- Hibernate research configuration-->
<property name="hibernate.search.default.directory_provider">filesystem</property>
<property name="hibernate.search.default.indexBase">D:\Lucene\indexes</property>
<property name="hibernate.ejb.event.post-insert">org.hibernate.search.event.FullTextIndexEventListener</property>
<property name="hibernate.ejb.event.post-update">org.hibernate.search.event.FullTextIndexEventListener</property>
<property name="hibernate.ejb.event.post-delete">org.hibernate.search.event.FullTextIndexEventListener</property>
<mapping resource="org/module/entities/TgPersonneMoralePer.hbm.xml" />
<mapping resource="org/module/entities/TgPersonnePer.hbm.xml" />
</session-factory>
</hibernate-configuration>
4.我的jboss部署结构:jboss-deployment-structure.xml
<?xml version="1.0" encoding="UTF-8"?>
<jboss-deployment-structure>
<deployment>
<dependencies>
<module name="org.hibernate" slot="main"/>
<module name="org.jboss.logging" slot="main"/>
<module name="javax.transaction.api" slot="main"/>
<module name="org.javassist"/>
<!-- Module de hibernate Search -->
<module name="org.hibernate.search.orm" slot="main"/>
<module name="org.hibernate.search.engine" slot="main"/>
<module name="org.apache.lucene" slot="main"/>
<module name="org.apache.lucene.internal" slot="main"/>
</dependencies>
<exclusions>
<module name="org.javassist" slot="main"/>
</exclusions>
</deployment>
</jboss-deployment-structure>