1

I have the following convertor:

@Component
public class EventConverter implements MessageConverter {

@Override
public Object fromMessage(Message message) throws JMSException, MessageConversionException {

// ...DO SOMETHING HERE
}


@Override
public Message toMessage(Object eventObject, Session session) throws JMSException, MessageConversionException {

// ... DO ANOTHER THING HERE
}

My beans definition looks like this:

    <!-- Message converter - to convert between out Event class and JMS message -->
<bean id="eventConverter"
    class="com.shared.events.common.handlers.EventConverter" />

<bean id="redeliveryConnectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">
    <property name="brokerURL" value="${activemq_url}" />
    <property name="redeliveryPolicy" ref="redeliveryPolicy" />
    <property name="nonBlockingRedelivery" value="true" />
</bean>

<bean id="redeliveryCachingConnectionFactory"
    class="org.springframework.jms.connection.CachingConnectionFactory"
    p:targetConnectionFactory-ref="redeliveryConnectionFactory"
    p:sessionCacheSize="10" />

<!-- Redelivery: retry after 3sec, 6sec,9sec,12sec,15sec finally put in 
    DLQ -->

<bean id="redeliveryPolicy" class="org.apache.activemq.RedeliveryPolicy">
    <property name="queue" value="*" />
    <property name="initialRedeliveryDelay" value="0" />
    <property name="redeliveryDelay" value="3000" />
    <property name="maximumRedeliveryDelay" value="3600000" />
    <property name="maximumRedeliveries" value="5" />
    <property name="useExponentialBackOff" value="true" />
    <property name="backOffMultiplier" value="1" />
</bean>


<!-- A JmsTemplate instance that uses the cached connection and destination -->
<bean id="redeliveryJmsTemplate" class="org.springframework.jms.core.JmsTemplate">
    <property name="connectionFactory" ref="redeliveryCachingConnectionFactory" />
    <property name="messageConverter" ref="eventConverter" />
    <property name="sessionTransacted" value="true" />
</bean>

<!-- EDIT EDIT EDIT -->


<!-- The Spring message listener container configuration -->
<jms:listener-container container-type="default"
    destination-type="queue" connection-factory="redeliveryConnectionFactory"
    acknowledge="transacted" concurrency="5" cache="consumer"> <!-- remove prefetch on production -->

    <jms:listener destination="accountStatsQueue" ref="accountStatsService"
        method="onMessage" />

<!-- Listeners -->
<bean id="accountStatsService" class="com.service.AccountStatsService" />

<!-- Destinations -->
<bean id="accountStatsQueue" class="org.apache.activemq.command.ActiveMQQueue">
    <constructor-arg value="AccountStatsQueue" />

the toMessage() function is being called straight from my EventConverter which is great.

The problem is that the fromMessage() is not being called from my EventConvertor. (btw: org.springframework.jms.support.converter.SimpleMessageConverter does get called on fromMessage() , Its like my EventConverter is not overriding it in the specific function - fromMessage().)

Any ideas?

Urbanleg
  • 6,252
  • 16
  • 76
  • 139
  • And how are you using this converter? I only see a bean definition which by itself doesn't do anything. You will have to wire it to your JmsTemplate else it will just sit in memory and do nothing. – M. Deinum Aug 24 '15 at 05:43
  • Thanks Deinum for your repsonse, Iv'e edit my Post. – Urbanleg Aug 24 '15 at 07:06
  • Nice that is for sending, how are you receiving messages and is that part actually using your converter? – M. Deinum Aug 24 '15 at 08:15
  • M. Deinum, I'm not really sure as for what you are asking, Iv'e edited my .xml file with all other relevant info regarding the jms. please look at the section – Urbanleg Aug 24 '15 at 09:20
  • 1
    And how should your listener know that its should use your converter. You haven't told him to do that. You are only using your converter for sending not for receiving. You need to add a reference to the message converter to your `listener-container`. – M. Deinum Aug 24 '15 at 09:43
  • It works! thanks very much M. Deinum. I simply added the convertor to my listener-container – Urbanleg Aug 24 '15 at 10:28

0 Answers0