3
votes

I am working on a Spring application where we have implemented code to send messages through IBM MQ.

Now we have been advised not to directly use MQ APIs directly and instead use JMS.

The steps I followed :

  1. created a JNDI name to connect to the Message queue configured as:

    <bean id="emailQueueDestination" class="org.springframework.jndi.JndiObjectFactoryBean" lazy-init="true">
            <property name="jndiName" value="<<JNDI name of Queue" >>/>
    </bean>
    
  2. I need a connecton factory object to connect to the JMS Provider and I have configured it as:

    <bean id="emailQueueConnectionFactory" class="com.ibm.mq.jms.MQQueueConnectionFactory">
      <property name="queueManager" value="" />
          <property name="hostName" value="" />
      <property name="channel" value="" />
      <property name="port" value="1414" />
    </bean>
    

Further I have injected the above 2 beans in JMSTemplate class:

<bean id="emailQueueTemplate" class="org.springframework.jms.core.JmsTemplate" lazy-init="true">
        <property name="connectionFactory" ref="emailQueueConnectionFactory" />
        <property name="defaultDestination" ref="emailQueueDestination" />
    </bean>

Now since my purpose is to remove dependency on MQ APIs, do you think the configuration above (especially for connection factory) looks good?

1
So, what exactly is your question? "Does it look good?" is not really much of a question.Joachim Sauer
Hi..My queston is whether the implementation above makes my code independent of IBM MQ. In case if IBM MQ is replace by any other technology in future..will this code workuser966506

1 Answers

3
votes

If your code doesn't refer to any of the MQ classes (i.e. it references that bean only as a JMS ConnectionFactory and you don't rely on any other non-standard features of MQ, then this should make your code reasonably easy to port.

I wouldn't bet that switching to another product would require zero code changes (many JMS implementations seem to have some interesting peculiarities), but you're definitely on the right way.