Finally found the answer:

The remote breakpoint i put on my embedded ActiveMQ consumer was a default
breakpoint with suspend-policty=all.

And as the consumer and the server runs on the same JVM, i was also
suspending all the ActiveMQ server threads!

The solution is to use a breakpoint suspend-policy=thread so that only the
consumer thread is suspended and the server threads can continue to run.


2012/9/4 Sébastien Lorber <lorber.sebast...@gmail.com>

> Hello,
>
> I'm trying to test the queue persistence of ActiveMQ.
>
> I have an embedded ActiveMQ server with an unique consumer.
> This embedded server receive JMS messages from many other JVM applications.
>
> It works fine, consumer application receive the notifications.
>
>
>
> So i've tried to test the persistence of the messages.
> I've put a (remote) breakpoint on the MessageListener of the consumer so
> that i can enqueue many messages and make the ActiveMQ server crash.
> On server restart, i'd like all the enqueued messages to be able to be
> consumed, and not to be lost.
>
> And then i tried that test.
> I got into that breakpoint on the first message send.
> But for all messages i try to send, i get the following stacktrack on the
> producer side:
>
>
> Exception in thread "main"
> org.springframework.jms.UncategorizedJmsException: Uncategorized exception
> occured during JMS processing; nested exception is javax.jms.JMSException:
> Wire format negotiation timeout: peer did not send his wire format.
>  at
> org.springframework.jms.support.JmsUtils.convertJmsAccessException(JmsUtils.java:316)
> at
> org.springframework.jms.support.JmsAccessor.convertJmsAccessException(JmsAccessor.java:168)
>  at org.springframework.jms.core.JmsTemplate.execute(JmsTemplate.java:469)
> at org.springframework.jms.core.JmsTemplate.send(JmsTemplate.java:534)
>  at
> org.springframework.jms.core.JmsTemplate.convertAndSend(JmsTemplate.java:612)
> at
> org.springframework.jms.core.JmsTemplate.convertAndSend(JmsTemplate.java:604)
>  at
> com.xxxxxxxxxxx.mobilepush.client.RealClientTest.main(RealClientTest.java:29)
> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>  at
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
> at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
>  at java.lang.reflect.Method.invoke(Method.java:597)
> at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120)
> Caused by: javax.jms.JMSException: Wire format negotiation timeout: peer
> did not send his wire format.
> at
> org.apache.activemq.util.JMSExceptionSupport.create(JMSExceptionSupport.java:62)
>  at
> org.apache.activemq.ActiveMQConnection.syncSendPacket(ActiveMQConnection.java:1380)
> at
> org.apache.activemq.ActiveMQConnection.ensureConnectionInfoSent(ActiveMQConnection.java:1466)
>  at
> org.apache.activemq.ActiveMQConnection.createSession(ActiveMQConnection.java:308)
> at
> org.springframework.jms.support.JmsAccessor.createSession(JmsAccessor.java:196)
>  at org.springframework.jms.core.JmsTemplate.execute(JmsTemplate.java:457)
> ... 9 more
> Caused by: java.io.IOException: Wire format negotiation timeout: peer did
> not send his wire format.
> at
> org.apache.activemq.transport.WireFormatNegotiator.oneway(WireFormatNegotiator.java:98)
>  at
> org.apache.activemq.transport.MutexTransport.oneway(MutexTransport.java:68)
> at
> org.apache.activemq.transport.ResponseCorrelator.asyncRequest(ResponseCorrelator.java:81)
>  at
> org.apache.activemq.transport.ResponseCorrelator.request(ResponseCorrelator.java:86)
> at
> org.apache.activemq.ActiveMQConnection.syncSendPacket(ActiveMQConnection.java:1351)
>  ... 13 more
>
>
>
>
> I don't understand why my producer would be blocked when my consumer is in
> my breakpoint.
>
>
> My broker uri is: mobilepush.activemq.broker.transport.connector.uri=tcp://
> 0.0.0.0:61616
>
>
>
> -------------------------------------------------------------------------------------------------------------------------------------------------
>
>
> Any idea?
>
>
> My configuration is pretty simple:
>
>
> SERVER:
>
>     <!--  lets create an embedded ActiveMQ Broker -->
>     <amq:broker useJmx="false" persistent="true">
>         <amq:transportConnectors>
>             <amq:transportConnector
> uri="${mobilepush.activemq.broker.transport.connector.uri}" />
>         </amq:transportConnectors>
>         <amq:persistenceAdapter>
>             <amq:kahaPersistenceAdapter
> directory="${mobilepush.activemq.broker.queue.persistence.directory}"
> maxDataFileLength="100 Mb"/>
>         </amq:persistenceAdapter>
>     </amq:broker>
>
>
>
>
>
> CONSUMER:
>
> <bean id="connectionFactory"
> class="fr.xebia.management.jms.SpringManagedConnectionFactory">
>         <property name="connectionFactory">
>             <bean class="org.apache.activemq.ActiveMQConnectionFactory" >
>                 <property name="brokerURL"
> value="${mobilepush.activemq.broker.uri}"/>
>             </bean>
>         </property>
>     </bean>
>
>     <bean id="pushConsumer"
> class="com.xxxxxxxxxxxxxxx.mobilepush.messaging.jms.PushConsumer">
>         <property name="jmsPushMessageConverter"
> ref="jmsPushMessageConverter"/>
>         <property name="pushDelegate" ref="directPushDelegate"/>
>     </bean>
>
>     <management:executor-service id="pushConsumerExecutor"
>
>  
> pool-size="${mobilepush.consumer.thread.min}-${mobilepush.consumer.thread.max}"
> keep-alive="60" />
>
>     <jms:listener-container
>             task-executor="pushConsumerExecutor"
>             connection-factory="connectionFactory"
>             acknowledge="auto"
>
> container-class="fr.xebia.springframework.jms.ManagedDefaultMessageListenerContainer">
>         <jms:listener destination="mobilepush.queue" ref="pushConsumer"
> method="onMessage" />
>     </jms:listener-container>
>
> (management namespace and xebia class it only a JMX decorator)
>
>
>
>
> PRODUCER:
>
>     <bean id="connectionFactory"
> class="org.apache.activemq.ActiveMQConnectionFactory"  >
>         <property name="brokerURL"
> value="${mobilepush.activemq.broker.uri}"/>
>     </bean>
>
>
>     <bean id="mobilePushJmsTemplate"
> class="org.springframework.jms.core.JmsTemplate">
>         <property name="defaultDestination" ref="mobilePushQueue"/>
>         <property name="messageConverter" ref="jmsPushMessageConverter"/>
>         <property name="connectionFactory">
>             <!-- lets wrap in a pool to avoid creating a connection per
> send -->
>             <bean
> class="org.springframework.jms.connection.SingleConnectionFactory">
>                 <property name="targetConnectionFactory">
>                     <ref local="connectionFactory" />
>                 </property>
>             </bean>
>         </property>
>     </bean>
>
>
>
> Thanks
>
>

Reply via email to