Thank you Gordon. Your answers helped, but I want to make it a little bit clearer about the relation between QPID and JMS. I can only see 2 possible interpretation of the relation between JMS and QPID (one will necessarily be wrong): 1) QPID relies on (i.e. make use of) a JMS implementation in order to use the JMS services to satisfy the AMQP purposes, 2) QPID actually IS a JMS implementation that directly includes the AMQP required behaviour.
This is confusing for me since in my java program, I am linked to a jms.jar (gotten from the J2EE SDK), in association with the qpid jars, and I suppose this jms.jar contains a JMS implementation (leading to the first interpretation). So in the case 1), I cannot understand how a JMS object (that does not "know" I am using a QPID jar) can interact with an AMQP broker (I mean, when I invoke a send API on a javax.jms.MessageProducer, how is it that Wireshark detects AMQP frames? The meaning of my question in my previous mail was to understand how could the JMS objects (defined, according to me, in the jms.jar) could interact with the QPID jars (I supposed that the AMQP frames are sent by some classes of the QPID jars) since nothing is (apparently) made to link JMS object with QPID classes). In case 2), why should I need using the jms.jar if the implementation already exists in the QPID jars? The only explanation I can imagine is that the jms.jar is used only for the interfaces like Connection, Session etc. some implementors of which resides in QPID library that are used because using org.apache.qpid.jndi.PropertiesFileInitialContextFactory in JNDI. Then, as every used object (ConnectionFactory, Destination ...) are obtained through a first QPID class implementing the InitialContext, this implementing class also choose a QPID class implementing those interfaces (and so on for Connection, Queue ...). This is what I guess, but I would like to have a confirmation from someone who "knows". Thank you. Yann LEGLISE -----Message d'origine----- De : Gordon Sim [mailto:[email protected]] Envoyé : mercredi 19 août 2009 16:11 À : [email protected] Objet : Re: Mixing up AMQP QPID and JMS Leglise Yann wrote: > Hello, Hello! > I had sent a previous mail in the beginning of July concerning an AMQP > version problem between client and broker. > It is OK for this point, but now I am realizing that the things are still not > so clear for me. > Here are some assertions I believe as being true (please tell me if I am > wrong): > > * AMQP is mainly inspired by JMS, and specifiy an implentation > independent protocol for queue messaging, Correct; AMQP is an implementation independent protocol for message queueing applications. I'm not sure whether all those behind AMQP would say they were 'inspired' by JMS(!). However I think it's fair to say that JMS has always been an important use case for AMQP. > * QPID is an implementation of AMQP available for several languages (i.e. > C++, java, python ...), Correct. > * It is possible to write a QPID java client using JMS objects only (i.e. > writing a java program with not a single org.apache.qpid.* import, even if > the qpid jars are necessary for execution at least for the JNDI > initialization that refer to > org.apache.qpid.jndi.PropertiesFileInitialContextFactory), Correct. > * QPID java examples make use, in majority, of JMS, The java examples do, yes. > * For QPID java example that does not make use of JMS (amqpexample > package), the client and the broker must use the same AMQP version (I mean, > if the broker does not handle the AMQP version used by the client, no > communciation can take place), Correct. > So here are my questions: > > 1. What is the links between QPID and JMS (How is it that using only JMS > objects, QPID libraries are used)? I'm not entirely sure I understand the question, so forgive me if I state the obvious or go off in the wrong direction! JMS is an implementation independent API. A JMS client library will implement all the interfaces required by JMS and will map those to some underlying network protocol used to communicate with a broker. The Qpid JMS client library maps the interface to particular interactions using AMQP. (If you are looking for details of that mapping, I'll leave that to another mail and perhaps another person...) > 2. Is the AMQP version negociation allowed by JMS and not by QPID? AMQP defines a simple version check that can be used to ensure the client and server are agreed on the version to be used. It may well be that there are some bugs around that but expected behaviour is that you can point the Qpid JMS client at an AMQP broker and it will negotiate which of the supported versions it will use. Hope this helps, if not please keep asking questions! Thanks for your interest! --Gordon. --------------------------------------------------------------------- Apache Qpid - AMQP Messaging Implementation Project: http://qpid.apache.org Use/Interact: mailto:[email protected] --------------------------------------------------------------------- Apache Qpid - AMQP Messaging Implementation Project: http://qpid.apache.org Use/Interact: mailto:[email protected]
