[hibernate-issues] [Hibernate-JIRA] Commented: (HSEARCH-984) Hibernate Search 4 violates javax.jms.Message contract, incompatible with HornetQ

Karel Piwko (JIRA) noreply at atlassian.com
Fri Nov 25 06:44:19 EST 2011


    [ http://opensource.atlassian.com/projects/hibernate/browse/HSEARCH-984?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=44428#comment-44428 ] 

Karel Piwko commented on HSEARCH-984:
-------------------------------------

Hi Sanne,

sorry I wasn't clear in my description. The last error output is there only to illustrate that Hibernate Search requires that property. The log right above it shows the problem, which is indeed dots in the property name.

> Hibernate Search 4 violates javax.jms.Message contract, incompatible with HornetQ
> ---------------------------------------------------------------------------------
>
>                 Key: HSEARCH-984
>                 URL: http://opensource.atlassian.com/projects/hibernate/browse/HSEARCH-984
>             Project: Hibernate Search
>          Issue Type: Bug
>          Components: integration
>    Affects Versions: 4.0.0.CR2
>            Reporter: Karel Piwko
>            Assignee: Sanne Grinovero
>            Priority: Blocker
>              Labels: hornetq
>             Fix For: 4.0.0.Final
>
>
> I'm trying to create a JMS based indexer for Hibernate Search 4 running on AS7.
> Supposing following producer:
> {code}
> @GET
>     @Produces("text/xml")
>     public Index indexMembers() throws Exception {
>    
>         Connection connection = connectionFactory.createConnection();
>         Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
>         MessageProducer producer = session.createProducer(hibernateSearchQueue);
>         ObjectMessage message = session.createObjectMessage();
>         // this is not working on hornetq
>         message.setStringProperty(JMSBackendQueueTask.INDEX_NAME_JMS_PROPERTY, "default");
>         
>         producer.send(message);
>         session.close();
>         return getIndexSize();
>     }
> {code}
> and following configuration:
> {code:xml}
> <persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>     xsi:schemaLocation="
>         http://java.sun.com/xml/ns/persistence
>         http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
>     <persistence-unit name="primary">
>         <provider>org.hibernate.ejb.HibernatePersistence</provider>
>         <!-- If you are running in a production environment, add a managed data source, the example data source is just for proofs
>             of concept! -->
>         <jta-data-source>java:jboss/datasources/ExampleDS</jta-data-source>
>         <properties>
>             <!-- Properties for Hibernate -->
>             <property name="hibernate.hbm2ddl.auto" value="create-drop" />
>             <property name="hibernate.show_sql" value="false" />
>             <!-- Properties for Hibernate Search -->
>             <property name="hibernate.search.default.indexBase" value="target" />
>             <!-- optional -->
>             <property name="hibernate.search.default.directory_provider" value="ram" />
>             <!-- Set worker to be a JMS based -->
>             <property name="hibernate.search.default.worker.backend" value="jms" />
>             <!-- Set worker to work in a sync way -->
>             <property name="hibernate.search.default.worker.execution" value="sync" />
>             <property name="hibernate.search.default.worker.jms.connection_factory" value="/ConnectionFactory" />
>             <property name="hibernate.search.default.worker.jms.queue" value="queue/hibernatesearch" />
>             <!-- optional, not used at the moment -->
>             <!--
>                 <property name="hibernate.search.default.worker.jndi.*" />
>             -->
>         </properties>
>     </persistence-unit>
> </persistence>
> {code}
> and 
> {code}
> @MessageDriven(activationConfig = {
>         //@ActivationConfigProperty(propertyName = "destinationType", propertyValue = "org.hornetq.jms.client.HornetQQueue"),
>         @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue"),
>         @ActivationConfigProperty(propertyName = "destination", propertyValue = "queue/hibernatesearch"),
>         @ActivationConfigProperty(propertyName = "DLQMaxResent", propertyValue = "1") })
> public class HSearchController extends AbstractJMSHibernateSearchController implements MessageListener {
>     @Inject
>     EntityManager em;
>     // method retrieving the appropriate session
>     protected Session getSession() {
>         return (Session) em.getDelegate();
>     }
>     // potentially close the session opened in #getSession(), not needed here
>     protected void cleanSessionIfNeeded(Session session) {
>     }
> }
> {code}
> This leads to the error when triggered on AS7 with HQ:
> {code}
> java.lang.IllegalArgumentException: The property name 'hibernate.search.jms.indexNameProperty' is not a valid java identifier.
> 	org.hornetq.jms.client.HornetQMessage.checkProperty(HornetQMessage.java:1032)
> 	org.hornetq.jms.client.HornetQMessage.setStringProperty(HornetQMessage.java:793)
> 	org.jboss.as.quickstarts.kitchensink.rest.HSearchIndexationRESTService.indexMembers(HSearchIndexationRESTService.java:57)
> 	org.jboss.as.quickstarts.kitchensink.rest.HSearchIndexationRESTService$Proxy$_$$_WeldClientProxy.indexMembers(HSearchIndexationRESTService$Proxy$_$$_WeldClientProxy.java)
> 	sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> 	sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
> 	sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
> 	java.lang.reflect.Method.invoke(Method.java:597)
> 	org.jboss.resteasy.core.MethodInjectorImpl.invoke(MethodInjectorImpl.java:140)
> 	org.jboss.resteasy.core.ResourceMethod.invokeOnTarget(ResourceMethod.java:255)
> 	org.jboss.resteasy.core.ResourceMethod.invoke(ResourceMethod.java:220)
> 	org.jboss.resteasy.core.ResourceMethod.invoke(ResourceMethod.java:209)
> 	org.jboss.resteasy.core.SynchronousDispatcher.getResponse(SynchronousDispatcher.java:519)
> 	org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:496)
> 	org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:119)
> 	org.jboss.resteasy.plugins.server.servlet.ServletContainerDispatcher.service(ServletContainerDispatcher.java:208)
> 	org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service(HttpServletDispatcher.java:55)
> 	org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service(HttpServletDispatcher.java:50)
> 	javax.servlet.http.HttpServlet.service(HttpServlet.java:847)
> 	org.jboss.weld.servlet.ConversationPropagationFilter.doFilter(ConversationPropagationFilter.java:67)
> {code}
> *which is indeed correct, check http://docs.oracle.com/javaee/5/api/javax/jms/Message.html and Message Selector / Identifiers section*.
> Without this property, the code fail with:
> {code}
> 10:55:41,125 ERROR [org.hornetq.ra.inflow.HornetQMessageHandler] (Thread-18 (group:HornetQ-client-global-threads-898159460)) Failed to deliver message: java.lang.IllegalArgumentException: HSEARCH000113: 'null' is not a valid index name
>         at org.hibernate.search.indexes.impl.IndexManagerHolder.getIndexManager(IndexManagerHolder.java:309)
>         at org.hibernate.search.backend.impl.jms.AbstractJMSHibernateSearchController.onMessage(AbstractJMSHibernateSearchController.java:101)
>         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [:1.6.0_27]
>         at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) [:1.6.0_27]
>         at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) [:1.6.0_27]
>         at java.lang.reflect.Method.invoke(Method.java:597) [:1.6.0_27]
>         at org.jboss.as.ee.component.ManagedReferenceMethodInterceptorFactory$ManagedReferenceMethodInterceptor.processInvocation(ManagedReferenceMethodInterceptorFactory.java:72)
>         at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288)
>         at org.jboss.invocation.InterceptorContext$Invocation.proceed(InterceptorContext.java:374)
>         at org.jboss.as.weld.ejb.Jsr299BindingsInterceptor.doMethodInterception(Jsr299BindingsInterceptor.java:122)
>         at org.jboss.as.weld.ejb.Jsr299BindingsInterceptor.processInvocation(Jsr299BindingsInterceptor.java:130)
>         at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288)
>         at org.jboss.invocation.WeavedInterceptor.processInvocation(WeavedInterceptor.java:53)
>         at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288)
>         at org.jboss.as.weld.ejb.EjbRequestScopeActivationInterceptor.processInvocation(EjbRequestScopeActivationInterceptor.java:59)
>         at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288)
>         at org.jboss.as.ee.component.NamespaceContextInterceptor.processInvocation(NamespaceContextInterceptor.java:44)
>         at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288)
>         at org.jboss.as.ee.component.TCCLInterceptor.processInvocation(TCCLInterceptor.java:45)
>         at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288)
>         at org.jboss.invocation.InitialInterceptor.processInvocation(InitialInterceptor.java:21)
>         at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288)
>         at org.jboss.invocation.ChainedInterceptor.processInvocation(ChainedInterceptor.java:61)
>         at org.jboss.as.ee.component.ViewDescription$ComponentDispatcherInterceptor.processInvocation(ViewDescription.java:225)
>         at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288)
>         at org.jboss.as.ejb3.component.pool.PooledInstanceInterceptor.processInvocation(PooledInstanceInterceptor.java:51)
>         at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288)
>         at org.jboss.as.ejb3.component.interceptors.CurrentInvocationContextInterceptor.processInvocation(CurrentInvocationContextInterceptor.java:41)
>         at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288)
>         at org.jboss.as.ejb3.component.interceptors.EjbClientContextInterceptorFactory$1.processInvocation(EjbClientContextInterceptorFactory.java:45)
>         at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288)
>         at org.jboss.invocation.ChainedInterceptor.processInvocation(ChainedInterceptor.java:61)
>         at org.jboss.as.ee.component.ViewService$View.invoke(ViewService.java:156)
>         at org.jboss.as.ee.component.ViewDescription$1.processInvocation(ViewDescription.java:166)
>         at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288)
>         at org.jboss.invocation.ChainedInterceptor.processInvocation(ChainedInterceptor.java:61)
>         at org.jboss.as.ee.component.ProxyInvocationHandler.invoke(ProxyInvocationHandler.java:72)
>         at javax.jms.MessageListener$$$view28.onMessage(Unknown Source)
>         at sun.reflect.GeneratedMethodAccessor68.invoke(Unknown Source)
>         at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) [:1.6.0_27]
>         at java.lang.reflect.Method.invoke(Method.java:597) [:1.6.0_27]
>         at org.jboss.as.ejb3.inflow.MessageEndpointInvocationHandler.doInvoke(MessageEndpointInvocationHandler.java:140)
>         at org.jboss.as.ejb3.inflow.AbstractInvocationHandler.invoke(AbstractInvocationHandler.java:73)
>         at $Proxy162.onMessage(Unknown Source)  at org.hornetq.ra.inflow.HornetQMessageHandler.onMessage(HornetQMessageHandler.java:278)
>         at org.hornetq.core.client.impl.ClientConsumerImpl.callOnMessage(ClientConsumerImpl.java:866)
>         at org.hornetq.core.client.impl.ClientConsumerImpl.access$100(ClientConsumerImpl.java:44)
>         at org.hornetq.core.client.impl.ClientConsumerImpl$Runner.run(ClientConsumerImpl.java:983)
>         at org.hornetq.utils.OrderedExecutorFactory$OrderedExecutor$1.run(OrderedExecutorFactory.java:100)
>         at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) [:1.6.0_27]
>         at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) [:1.6.0_27]
>         at java.lang.Thread.run(Thread.java:662) [:1.6.0_27]
> {code}

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

        


More information about the hibernate-issues mailing list