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/
