Good idea!

2008/12/9 Claus Ibsen <[EMAIL PROTECTED]>:
> When that is said, I think we should add a cookbook section how to
> configure WebSphere MQ queues with this targetClient option in the
> Camel wiki documentation. And we could link to it from camel-jms
>
>
> /Claus Ibsen
> Apache Camel Committer
> Blog: http://davsclaus.blogspot.com/
>
>
>
> On Tue, Dec 9, 2008 at 9:47 AM, Claus Ibsen <[EMAIL PROTECTED]> wrote:
>> Hi
>>
>> I doubt the patch could depend on IBM WebSphere MQ .jars so it should
>> use reflection
>> ... or just use Camel's IntrospectionProperites that can auto set them.
>>
>> Or am I mistaking?
>>
>>
>> /Claus Ibsen
>> Apache Camel Committer
>> Blog: http://davsclaus.blogspot.com/
>>
>>
>>
>> On Tue, Dec 9, 2008 at 8:55 AM,  <[EMAIL PROTECTED]> wrote:
>>> Agreed - we should now be able to easily configure any JMS endpoint
>>> with any required settings.
>>>
>>> Having said that - if someone fancies submitting a patch we could add
>>> an MQ based Component & Endpoint to expose all the MQ specific
>>> properties more easily - lettting folks stick to Uris if they prefer.
>>>
>>> On 08/12/2008, Claus Ibsen <[EMAIL PROTECTED]> wrote:
>>>> 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.
>>>>>
>>>>>
>>>>
>>>
>>>
>>> --
>>> James
>>> -------
>>> http://macstrac.blogspot.com/
>>>
>>> Open Source Integration
>>> http://fusesource.com/
>>>
>>
>



-- 
James
-------
http://macstrac.blogspot.com/

Open Source Integration
http://fusesource.com/

Reply via email to