0

I am unable to correctly setup a slave node for Hibernate Search. I have found multiple articles on the subject and follow them, but it will not work for me. I have setup the the master successfully. Maybe a few more sets of eyes can see something I don't.

I'm using: Spring 3.2
Hibernate Search 3.4.1
Hibernate 3.6.1
Apache Tomcat 7.0.27
ActiveMQ 5.9.0 (as stand-alone. I've tried embedded as well with the same results).

Application META-INF\context.xml:

<Context>
<Resource
name="jms/ConnectionFactory"
auth="Container"
type="org.apache.activemq.ActiveMQConnectionFactory"
description="JMS Connection Factory"
factory="org.apache.activemq.jndi.JNDIReferenceFactory"
brokerURL="tcp://localhost:61616"
brokerName="HibernateSearchBroker" />

<Resource
name="queue/hibernatesearch"
auth="Container" type="org.apache.activemq.command.ActiveMQQueue"
description="Hibernate search queue"
factory="org.apache.activemq.jndi.JNDIReferenceFactory"
physicalName="hibernateSearchQueue" />

</Context>

Hibernate dao-config.xml:

    <bean id="breezeSessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
    <property name="dataSource" ref="dataSource"/>
    <property name="annotatedClasses">
        <list>
...
        </list>
    </property>

    <property name="hibernateProperties">
        hibernate.search.worker.backend=jms
        hibernate.search.worker.jndi.url=tcp://localhost:61616
        hibernate.search.worker.jms.connection_factory=jms/ConnectionFactory (tried java:comp/env/jms/ConnectionFactory as well)
        hibernate.search.worker.jms.queue=queue/hibernatesearch (tried java:comp/env/queue/hibernatesearch as well) 
         hibernate.search.worker.jndi.java.naming.factory.initial=org.apache.activemq.jndi.ActiveMQInitialContextFactory
        #hibernate.search.default.directory_provider=org.hibernate.search.store.FSSlaveDirectoryProvider (tried this as well)
hibernate.search.default.directory_provider = filesystem-slave

        hibernate.search.default.refresh=120
        hibernate.search.default.indexBase=[local]
        hibernate.search.default.sourceBase=[share]
        hibernate.search.retry_initialize_period=15
    </property>
</bean>

Stack Trace:

...
Caused by: org.hibernate.HibernateException: could not init listeners
at org.hibernate.event.EventListeners.initializeListeners(EventListeners.java:205)
at org.hibernate.cfg.Configuration.getInitializedEventListeners(Configuration.java:1980)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1842)
at org.springframework.orm.hibernate3.LocalSessionFactoryBean.newSessionFactory(LocalSessionFactoryBean.java:863)
at org.springframework.orm.hibernate3.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:782)
at org.springframework.orm.hibernate3.AbstractSessionFactoryBean.afterPropertiesSet(AbstractSessionFactoryBean.java:188)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1545)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1483)
... 61 more
Caused by: org.hibernate.search.SearchException: Unable to lookup Search queue (queue/hibernatesearch   ) and connection factory (jms/ConnectionFactory)
at org.hibernate.search.backend.impl.jms.JMSBackendQueueProcessorFactory.prepareJMSTools(JMSBackendQueueProcessorFactory.java:97)
at org.hibernate.search.backend.impl.jms.JMSBackendQueueProcessorFactory.initialize(JMSBackendQueueProcessorFactory.java:61)
at org.hibernate.search.backend.impl.BatchedQueueingProcessor.<init>(BatchedQueueingProcessor.java:108)
at org.hibernate.search.backend.impl.TransactionalWorker.initialize(TransactionalWorker.java:98)
at org.hibernate.search.backend.WorkerFactory.createWorker(WorkerFactory.java:69)
at org.hibernate.search.spi.SearchFactoryBuilder.buildNewSearchFactory(SearchFactoryBuilder.java:277)
at org.hibernate.search.spi.SearchFactoryBuilder.buildSearchFactory(SearchFactoryBuilder.java:144)
at org.hibernate.search.event.FullTextIndexEventListener.initialize(FullTextIndexEventListener.java:151)
at org.hibernate.event.EventListeners$1.processListener(EventListeners.java:198)
at org.hibernate.event.EventListeners.processListeners(EventListeners.java:181)
at org.hibernate.event.EventListeners.initializeListeners(EventListeners.java:194)
... 68 more
Caused by: javax.naming.NameNotFoundException: jms/ConnectionFactory
at org.apache.activemq.jndi.ReadOnlyContext.lookup(ReadOnlyContext.java:235)
at javax.naming.InitialContext.lookup(InitialContext.java:411)
at org.hibernate.search.backend.impl.jms.JMSBackendQueueProcessorFactory.prepareJMSTools(JMSBackendQueueProcessorFactory.java:92)
... 78 more

To me that says I didn't configure the JNDI name correctly - but I've tried every combo I could think of out of frustration. Any help is appreciated.

mark
  • 41
  • 8

1 Answers1

0

you can find your answer in this blog

http://aredko.blogspot.fr/2009/12/distributed-hibernate-search-with.html

<property name="hibernateProperties">
        hibernate.search.worker.backend=jms
        hibernate.search.worker.jndi.url=
        hibernate.search.worker.jms.connection_factory=java:comp/env/jms/ConnectionFactory
        hibernate.search.worker.jms.queue=java:comp/env/queue/hibernatesearch
        hibernate.search.worker.jndi.java.naming.factory.initial=org.apache.activemq.jndi.ActiveMQInitialContextFactory
        hibernate.search.default.directory_provider=org.hibernate.search.store.FSSlaveDirectoryProvider

        hibernate.search.default.refresh=120
        hibernate.search.default.indexBase=[local]
        hibernate.search.default.sourceBase=[share]
        hibernate.search.retry_initialize_period=15
</property>

keep your context.xml