国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 服務(wù)器 > Web服務(wù)器 > 正文

分布式Hibernate search詳解

2024-09-01 13:53:12
字體:
供稿:網(wǎng)友

分布式Hibernate Search與Apache Tomcat6,ActiveMQ 和Spring.今天我將跟大家分享我的經(jīng)驗(yàn),以master/slave(s)方式配置分布式Hibernate Search并整合Apache ActiveMQ,Spring,應(yīng)用程序額容器是Apache Tomcat 6。

怎么工作:

-Hibernate Search 支持使用JMS back-end 和 master/slave(s) 索引進(jìn)行分布式配置
- mater通過網(wǎng)絡(luò)共享暴露索引 (例如通過NFS。。。)
- slave(s) 復(fù)制mater的索引到本地

版本

- Apache Tomcat 6.0.20
- Hibernate Search 3.1.1 GA
- Apache ActiveMQ 5.3.0
- Spring 2.5.6
- XBean-Spring 3.6
${local.index.dir} - directory to store master index
${master.index.dir} - directory to copy master index to, it's shared network location for replication with slave(s)

Mater索引的配置

Mater的配置稍顯復(fù)雜。以下是配置屬性說明
$(local.index.dir) - 存儲(chǔ)mater索引的目錄
$(master.index.dir) -拷貝mater索引的目標(biāo)目錄,通過網(wǎng)絡(luò)定位供slave(s)復(fù)制。

首先,為了簡單起見,我們將ActiveMQ中介運(yùn)行在同一臺(tái)服務(wù)器上。因此,我們?cè)赪EB-INF/activemq.xml文件中使用簡單的嵌入式中介配置。

<beans  xmlns="http://www.springframework.org/schema/beans"  xmlns:amq="http://activemq.apache.org/schema/core"  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xsi:schemaLocation="http://www.springframework.org/schema/beans  http://www.springframework.org/schema/beans/spring-beans-2.0.xsd  http://activemq.apache.org/schema/core  http://activemq.apache.org/schema/core/activemq-core.xsd">  <amq:broker brokerName="HibernateSearchBroker">    <amq:managementContext>      <amq:managementContext createConnector="false"/>    </amq:managementContext>    <amq:transportConnectors>      <amq:transportConnector uri="tcp://localhost:61616" />     </amq:transportConnectors>  </amq:broker>  <amq:queue name="queue/hibernatesearch" physicalName="hibernateSearchQueue" /> </beans> 

其次,需要在web application MEAT-INF/context.xml(Tocmat)中配置配置JNDI資源(JMS Connection Factory 和 Quene)

<!-- ActiveMQ ConnectionFactory --> <Resource name="jms/ConnectionFactory" auth="Container" type="org.apache.activemq.ActiveMQConnectionFactory" description="JMS Connection Factory" factory="org.apache.activemq.jndi.JNDIReferenceFactory" brokerURL="tcp://0.0.0.0:61616?trace=true" brokerName="HibernateSearchBroker" />  <!-- ActiveMQ HibernateSearch queue --> <Resource name="queue/hibernatesearch" auth="Container" type="org.apache.activemq.command.ActiveMQQueue" description="Hibernate search queue" factory="org.apache.activemq.jndi.JNDIReferenceFactory" physicalName="hibernateSearchQueue" /> 

接下來在Hibernate.cfg.xml文件中配置Hibernate Searc

<property name="hibernate.search.default.directory_provider">org.hibernate.search.store.FSMasterDirectoryProvider</property> <property name="hibernate.search.default.indexBase">${local.index.dir}</property> <property name="hibernate.search.default.sourceBase">${master.index.dir}</property> <property name="hibernate.search.default.refresh">60</property> 

Master和slave之間代碼的一個(gè)重要區(qū)別是:master中必須包含實(shí)現(xiàn) AbstractJMSHibernateSearchController 的子類作為監(jiān)聽器,例如

import javax.jms.MessageListener; import org.hibernate.Session; import org.hibernate.search.backend.impl.jms.AbstractJMSHibernateSearchController; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @Service public class JMSHibernateSearchController  extends AbstractJMSHibernateSearchController    implements MessageListener {  @Override  protected void cleanSessionIfNeeded(Session session) {   // clean session here ...     }  @Override  protected Session getSession() {   // return new session here ...     } } 

最后在Spring的配置文件applicationContext.xml文件中,加入以下配置

<bean id="broker" class="org.apache.activemq.xbean.BrokerFactoryBean">  <property name="config" value="WEB-INF/activemq.xml" />  <property name="start" value="true" /> </bean>  <bean name="jmsConnectionFactory" class="org.springframework.jndi.JndiObjectFactoryBean">  <property name="jndiName" value="java:comp/env/jms/ConnectionFactory" /> </bean> <bean name="jmsHibernateSearchQueue" class="org.springframework.jndi.JndiObjectFactoryBean">  <property name="jndiName" value="java:comp/env/queue/hibernatesearch" /> <bean id="hibernateSearchController" class="<your implementation of AbstractJMSHibernateSearchController>" /> <bean id="jmsContainer" class="org.springframework.jms.listener.DefaultMessageListenerContainer" depends-on="broker">  <property name="connectionFactory" ref="jmsConnectionFactory"/>  <property name="destination" ref="jmsHibernateSearchQueue"/>  <property name="messageListener" ref="hibernateSearchController" /> </bean> 

With those configurations in place Hibernate Search master is ready to run.
正確配置好之后,Hibernate Search master就可以運(yùn)行了。

Slave 索引配置

Slave(s)的配置要簡單得多,以下是配置屬性說明

${server} - 運(yùn)行ActiveMQ中介服務(wù)器
${lcoal.index.dir} - 存儲(chǔ)本地索引的目錄(master的拷貝)
${mater.index.share}-掛載mater索引的網(wǎng)絡(luò)共享目錄.

首先,我們需要在網(wǎng)站應(yīng)用 MEAT-INF/context.xml(Tocmat)中配置配置JNDI資源(JMS Connection Factory 和 Quene)

... <!-- ActiveMQ ConnectionFactory --> <Resource name="jms/ConnectionFactory" auth="Container" type="org.apache.activemq.ActiveMQConnectionFactory" description="JMS Connection Factory" factory="org.apache.activemq.jndi.JNDIReferenceFactory" brokerURL="tcp://${server}:61616?trace=true" brokerName="HibernateSearchBroker" />  <!-- ActiveMQ HibernateSearch queue --> <Resource name="queue/hibernatesearch" auth="Container" type="org.apache.activemq.command.ActiveMQQueue" description="Hibernate search queue" factory="org.apache.activemq.jndi.JNDIReferenceFactory" physicalName="hibernateSearchQueue" /> ... 

接下來我們需要在hibernate.cfg.xml中配置Hibernate Search

<property name="hibernate.search.default.directory_provider">org.hibernate.search.store.FSSlaveDirectoryProvider</property> <property name="hibernate.search.default.indexBase">${local.index.dir}</property> <property name="hibernate.search.default.sourceBase">${master.index.share}</property> <property name="hibernate.search.default.refresh">60</property> <property name="hibernate.search.worker.backend">jms</property> <property name="hibernate.search.worker.jms.connection_factory">java:comp/env/jms/ConnectionFactory</property> <property name="hibernate.search.worker.jms.queue">java:comp/env/queue/hibernatesearch</property> <property name="hibernate.search.worker.jndi.java.naming.factory.initial">org.apache.activemq.jndi.ActiveMQInitialContextFactory</property> 

配置到此結(jié)束

說些關(guān)于JUnit測(cè)試的題外話.唯一的問題是需要使用Spring JNDI templates模擬JNDI,例如

<bean name="jmsConnectionFactory" class="org.springframework.jndi.JndiObjectFactoryBean">   <property name="jndiName" value="java:comp/env/jms/ConnectionFactory" />   <property name="jndiTemplate">     <bean class="org.springframework.mock.jndi.ExpectedLookupTemplate">       <constructor-arg index="0" value="java:comp/env/jms/ConnectionFactory" />       <constructor-arg index="1">         <bean class="org.apache.activemq.ActiveMQConnectionFactory">           <property name="brokerURL">             <value>tcp://0.0.0.0:61616</value>           </property>         </bean>       </constructor-arg>     </bean>   </property> </bean>  <bean name="jmsHibernateSearchQueue" class="org.springframework.jndi.JndiObjectFactoryBean">   <property name="jndiName" value="java:comp/env/queue/hibernatesearch" />   <property name="jndiTemplate">     <bean class="org.springframework.mock.jndi.ExpectedLookupTemplate">       <constructor-arg index="0" value="java:comp/env/queue/hibernatesearch" />       <constructor-arg index="1">         <bean id="jmsHibernateSearchQueue"  class="org.apache.activemq.command.ActiveMQQueue">           <constructor-arg value="queue/hibernateSearchQueue"/>         </bean>               </constructor-arg>     </bean>   </property> </bean> 

總結(jié)

以上就是本文關(guān)于分布式Hibernate search詳解的全部內(nèi)容,希望對(duì)大家有所幫助。有什么問題可以隨時(shí)留言,小編會(huì)及時(shí)回復(fù)大家的,感謝朋友們對(duì)本站的支持!


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 贵港市| 尼玛县| 佛坪县| 漠河县| 柳州市| 衡阳市| 阜康市| 河南省| 增城市| 乌拉特后旗| 格尔木市| 恭城| 前郭尔| 大厂| 资兴市| 兴国县| 都江堰市| 凯里市| 大庆市| 黔江区| 兴安盟| 霍城县| 湘潭市| 中山市| 廉江市| 菏泽市| 湘阴县| 武城县| 砚山县| 宁强县| 南雄市| 平定县| 新晃| 陆河县| 丘北县| 霸州市| 卢氏县| 平果县| 新密市| 洪湖市| 东宁县|