Hi

If you look at the latest commits today from James Strachan I think he
add to Camel 2.0 a solution to your problem.
See his comment on CAMEL-505
http://issues.apache.org/activemq/browse/CAMEL-505

/Claus Ibsen
Apache Camel Committer
Blog: http://davsclaus.blogspot.com/



On Sun, Dec 7, 2008 at 11:20 AM, Tomasz Domzal
<[EMAIL PROTECTED]> wrote:
>
> I had exactly same problem few months ago and came up with quick and dirty
> solution.
> By default all attributes on Camel JMS URI (ex. targetClient for Websphare
> MQ) are are passed to camel JmsComponent object. Such behavior is not what
> we want in case of additional destination attributes (like MS MQ
> 'targetClient'). But in JmsComponent object there is method:
>
>  protected String convertPathToActualDestination(String path, Map
> parameters)
>
> which overloaded can modify this behavior. There is extended JmsComponent
> code. Please find more description in supplied javadoc snippet:
>
> // -------------------
>
> /**
>  * JMSComponent with modification that allows setting attributes on JMS
> destination object.<br/>
>  * Attributes enumerated in 'destinationArgs' attribute will be set as
> attributes on destination URI instead on underlying [EMAIL PROTECTED] 
> JmsComponent}
> object.
>  * For example setting 'targetClient' attribute on Webshere MQ in Camel JMS
> endpoint URI should look like:
>  *
> <pre>jmsMqComp:queue:queue://queue_name?destinationArgs=targetClient&targetClient=1</pre>
>  * where jmsMqComp is bean id of [EMAIL PROTECTED]
> JmsComponentWithDestinationAttributes} instance.<br/>
>  * (Please note URI attribute setting method on Websphere MQ works only with
> URI queue format - thats the reason
>  * there is keyword 'queue' is used twice in this example - first is from
> Camel URI format, second starts WS MQ queue URI)
>  */
> public class JmsComponentWithDestinationAttributes extends JmsComponent {
>
>  private Log log =
> LogFactory.getLog(JmsComponentWithDestinationAttributes.class);
>
>  @Override
>  protected String convertPathToActualDestination(String path, Map
> parameters) {
>    if (log.isDebugEnabled())
>      log.debug("resolve: [path: "+path+"][parameters: "+parameters+"]");
>    String subject = super.convertPathToActualDestination(path, parameters);
>    // attributes enumerated in 'destinationArgs' are removed from map and
> appended as destination options
>    if (parameters.containsKey("destinationArgs")) {
>      StringBuffer subjectBuf = new StringBuffer(subject);
>      boolean subjectHasOptions = (subject.indexOf('?')!=-1);
>      String destinationArgs = (String)
> parameters.remove("destinationArgs");
>      String[] args = destinationArgs.split(",");
>      for (String arg : args) {
>        if (subjectHasOptions) {
>          subjectBuf.append("&");
>        } else {
>          subjectBuf.append("?");
>          subjectHasOptions = true;
>        }
>        subjectBuf.append(arg);
>        subjectBuf.append('=');
>        subjectBuf.append((String) parameters.remove(arg));
>      }
>      subject = subjectBuf.toString();
>    }
>    if (log.isDebugEnabled())
>      log.debug("resolved [path: "+subject+"][parameters: "+parameters+"]");
>    return subject;
>  }
> }
>
> // -------------------
>
> and assuming Spring bean configuration:
>
>  <bean id="jmsMqComp"
> class="com.somecompany.JmsComponentWithDestinationAttributes">
>    <property name="connectionFactory">
>      <bean class="com.ibm.mq.jms.MQQueueConnectionFactory">
>        <property name="transportType">
>          <util:constant
> static-field="com.ibm.mq.jms.JMSC.MQJMS_TP_CLIENT_MQ_TCPIP"/>
>        </property>
>        <property name="hostName" value="mq_host"/>
>        <property name="port" value="mq_port" />
>        <property name="queueManager" value="mq_qmanager"/>
>        <property name="channel" value="mq_channel"/>
>      </bean>
>    </property>
>  </bean>
>
> JMS URI in Camel:
>
>
> jmsMqComp:queue:queue://queue_name?destinationArgs=targetClient&targetClient=1
>
> will set targetClient=1 option on WS MQ destination.
>
> It's definitely not best solution. ActiveMQ has dedicated component in Camel
> which accepts many AMQ dedicated options. Maybe this is way to go for
> Websphere MQ also ?
> --
> View this message in context: 
> http://www.nabble.com/Camel-to-Websphere-MQ-communication-tp20834360s22882p20879636.html
> Sent from the Camel - Users mailing list archive at Nabble.com.
>
>

Reply via email to