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/ >
