<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Youssef Mohamed Mehdi&#039;s Blog</title>
	<atom:link href="http://youssefmohamedmehdi.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://youssefmohamedmehdi.wordpress.com</link>
	<description>Just another WordPress.com weblog</description>
	<lastBuildDate>Tue, 01 Dec 2009 10:53:43 +0000</lastBuildDate>
	<language>fr</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='youssefmohamedmehdi.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>Youssef Mohamed Mehdi&#039;s Blog</title>
		<link>http://youssefmohamedmehdi.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://youssefmohamedmehdi.wordpress.com/osd.xml" title="Youssef Mohamed Mehdi&#039;s Blog" />
	<atom:link rel='hub' href='http://youssefmohamedmehdi.wordpress.com/?pushpress=hub'/>
		<item>
		<title>Hello world JMS</title>
		<link>http://youssefmohamedmehdi.wordpress.com/2009/12/01/hello-world-jms/</link>
		<comments>http://youssefmohamedmehdi.wordpress.com/2009/12/01/hello-world-jms/#comments</comments>
		<pubDate>Tue, 01 Dec 2009 10:29:24 +0000</pubDate>
		<dc:creator>youssefmehdi</dc:creator>
				<category><![CDATA[JMS]]></category>
		<category><![CDATA[Selector]]></category>
		<category><![CDATA[activemq]]></category>
		<category><![CDATA[jndi]]></category>
		<category><![CDATA[session]]></category>
		<category><![CDATA[connection]]></category>
		<category><![CDATA[consumer]]></category>
		<category><![CDATA[subscriber]]></category>
		<category><![CDATA[synchrone]]></category>
		<category><![CDATA[asynchrone]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://youssefmohamedmehdi.wordpress.com/?p=4</guid>
		<description><![CDATA[Dans ce tutorial nous allons voir comment se connecter à un provider JMS. Préparation de l&#8217;environnement: Une fois le téléchargement terminé, dézippez l&#8217;archive et éditez le fichier de configuration pour y rajouter une Queue où les messages seront postés. Démarrez le serveur JMS: Nous avons besoin d&#8217;un serveur JMS, pour ce tutorial j&#8217;ai choisi activemq [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=youssefmohamedmehdi.wordpress.com&amp;blog=10737367&amp;post=4&amp;subd=youssefmohamedmehdi&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Dans ce tutorial nous allons voir comment se connecter à un provider JMS.</p>
<ol>
<li><strong>Préparation de l&#8217;environnement:</strong>
<ul>
<li>Une fois le téléchargement terminé, dézippez l&#8217;archive et éditez le fichier de configuration pour y rajouter une Queue où les messages seront postés.</li>
<li>Démarrez le serveur JMS:</li>
</ul>
</li>
<p>Nous avons besoin d&#8217;un serveur JMS, pour ce tutorial j&#8217;ai choisi activemq que vous pouvez télécharger depuis <a title="http://activemq.apache.org/" href="http://activemq.apache.org/" target="_blank">http://activemq.apache.org/</a></p>
<p>conf/activemq.xml</p>
<blockquote><p><span style="color:#0000ff;">&lt;beans&#8230;</span></p>
<p><span style="color:#0000ff;">&#8230;&#8230;..</span></p>
<p><span style="color:#0000ff;">&lt;broker xmlns=&#8221;http://activemq.apache.org/schema/core&#8221; brokerName=&#8221;localhost&#8221; dataDirectory=&#8221;${activemq.base}/data&#8221;&gt;</span></p>
<p><span style="color:#0000ff;">&#8230;&#8230;&#8230;..</span></p>
<pre><span style="color:#0000ff;">&lt;destinations&gt;
   ...

</span>
  &lt;queue physicalName="<span style="color:#ff0000;">MyTestQueue</span>" /&gt;
<pre><span style="color:#0000ff;">&lt;/destinations&gt;</span></pre>
</pre>
<p><span style="color:#0000ff;">&#8230;&#8230;&#8230;..<br />
&lt;/broker&gt;</span></p></blockquote>
<p>Vous pouvez aussi mettre la configuration des destinations dans un fichier xml séparé ensuite l&#8217;inclure dans le fichier activemq.xml</p>
<blockquote><p>à l&#8217;aide de &lt;import resource=&#8221;fichier.xml&#8221;/&gt;</p></blockquote>
<p>Activemq permet la création des destinations par les clients mais c&#8217;est une mauvaise pratique parce que l&#8217;admin du serveur JMS peut très bien l&#8217;interdire et si vous changez de serveur, il se peut que cette option ne soit pas possible (JBOSS, &#8230;).</p>
<p>bin/activemq.bat</p>
<p>vérifiez que la queue à été bien créée au démarrage du serveur : <a title="http://localhost:8161/admin/queues.jsp" href="http://localhost:8161/admin/queues.jsp" target="_blank">http://localhost:8161/admin/queues.jsp</a></p>
<li><strong>Poster un message dans une queue</strong>
<ul>Pour exécuter les programmes dessous, il faut rajouter les jars suivants:</p>
<li>activemq-core.jar</li>
<li>geronimo-jms_1.1_spec.jar</li>
<li>commons-logging.jar</li>
<li>geronimo-j2ee-management_1.0_spec.jar</li>
</ul>
</li>
<p>Premièrement nous avons besoin de définir quelque propriétés pour pouvoir se connecté avec jndi à notre serveur JMS.<br />
créez un fichier jndi.properties dans votre classpath:</p>
<blockquote><p>java.naming.factory.initial = org.apache.activemq.jndi.ActiveMQInitialContextFactory<br />
java.naming.provider.url = tcp://localhost:61616<br />
queue.MyTestQueue = MyTestQueue</p></blockquote>
<p><strong>Client</strong></p>
<blockquote><p>import javax.jms.JMSException;<br />
import javax.jms.Queue;<br />
import javax.jms.QueueConnection;<br />
import javax.jms.QueueConnectionFactory;<br />
import javax.jms.QueueSender;<br />
import javax.jms.QueueSession;<br />
import javax.jms.TextMessage;<br />
import javax.naming.Context;<br />
import javax.naming.InitialContext;<br />
import javax.naming.NamingException;</p>
<p>public class MonPublisher {<br />
public static void main(String args[])<br />
{<br />
QueueConnection conn = null;<br />
try {<br />
//créer un context.<br />
Context context = new InitialContext();</p>
<p>QueueConnectionFactory factory = (QueueConnectionFactory) context.lookup(&#8220;ConnectionFactory&#8221;);<br />
//créer une connection<br />
conn =  factory.createQueueConnection();<br />
conn.start();<br />
Queue queue = (Queue) context.lookup(&#8220;MyTestQueue&#8221;);<br />
QueueSession session = conn.createQueueSession(false,QueueSession.AUTO_ACKNOWLEDGE);<br />
QueueSender sender = session.createSender(queue);<br />
TextMessage message = session.createTextMessage();<br />
message.setText(&#8220;Hello JMS&#8221;);<br />
sender.send(message);<br />
conn.close();</p>
<p>} catch (NamingException e) {<br />
e.printStackTrace();<br />
} catch (JMSException e) {<br />
e.printStackTrace();<br />
}<br />
finally{<br />
if(conn != null)<br />
{<br />
try<br />
{<br />
conn.close();<br />
}<br />
catch (Throwable e) {<br />
}<br />
}<br />
}<br />
}<br />
}</p></blockquote>
<li><strong>Consommer un message d&#8217;une queue</strong>
<ul>
<li><strong>Mode synchrone</strong></li>
<blockquote><p>import javax.jms.JMSException;<br />
import javax.jms.Message;<br />
import javax.jms.MessageConsumer;<br />
import javax.jms.Queue;<br />
import javax.jms.QueueConnection;<br />
import javax.jms.QueueConnectionFactory;<br />
import javax.jms.QueueSender;<br />
import javax.jms.QueueSession;<br />
import javax.jms.TextMessage;<br />
import javax.naming.Context;<br />
import javax.naming.InitialContext;<br />
import javax.naming.NamingException;</p>
<p>public class ConsommateurSynchrone {<br />
public static void main(String args[])<br />
{<br />
QueueConnection conn = null;<br />
try {<br />
//créer un context.<br />
Context context = new InitialContext();</p>
<p>QueueConnectionFactory factory = (QueueConnectionFactory) context.lookup(&#8220;ConnectionFactory&#8221;);<br />
//créer une connection<br />
conn =  factory.createQueueConnection();<br />
conn.start();<br />
Queue queue = (Queue) context.lookup(&#8220;MyTestQueue&#8221;);<br />
QueueSession session = conn.createQueueSession(false,QueueSession.AUTO_ACKNOWLEDGE);<br />
MessageConsumer receiver = session.createConsumer(queue);</p>
<p>Message message = receiver.receive();<br />
if(message != null &amp;&amp; message instanceof TextMessage)<br />
{<br />
TextMessage txtMessage = (TextMessage)message;<br />
System.out.println(&#8220;contenu du message:&#8221;+txtMessage.getText());<br />
}<br />
conn.close();</p>
<p>} catch (NamingException e) {<br />
e.printStackTrace();<br />
} catch (JMSException e) {<br />
e.printStackTrace();<br />
}<br />
finally{<br />
if(conn != null)<br />
{<br />
try<br />
{<br />
conn.close();<br />
}<br />
catch (Throwable e) {<br />
}<br />
}<br />
}<br />
}<br />
}</p></blockquote>
<p>Dans le mode synchrone, la consommation de message se fait à l&#8217;aide de la méthode receive du consommateur. Cette méthode reste bloqué jusqu&#8217;à la réception d&#8217;un message. Elle peut aussi prendre un timeout en paramètre.</p>
<li><strong>Mode asynchrone<br />
</strong></li>
<blockquote><p>import javax.jms.JMSException;<br />
import javax.jms.Message;<br />
import javax.jms.MessageConsumer;<br />
import javax.jms.MessageListener;<br />
import javax.jms.Queue;<br />
import javax.jms.QueueConnection;<br />
import javax.jms.QueueConnectionFactory;<br />
import javax.jms.QueueSession;<br />
import javax.jms.TextMessage;<br />
import javax.naming.Context;<br />
import javax.naming.InitialContext;<br />
import javax.naming.NamingException;</p>
<p>public class ConsommateurAsynchrone {<br />
public static void main(String args[])<br />
{<br />
QueueConnection conn = null;<br />
try {<br />
//créer un context.<br />
Context context = new InitialContext();</p>
<p>QueueConnectionFactory factory = (QueueConnectionFactory) context.lookup(&#8220;ConnectionFactory&#8221;);<br />
//créer une connection<br />
conn =  factory.createQueueConnection();</p>
<p>Queue queue = (Queue) context.lookup(&#8220;MyTestQueue&#8221;);<br />
QueueSession session = conn.createQueueSession(false,QueueSession.AUTO_ACKNOWLEDGE);<br />
MessageConsumer receiver = session.createConsumer(queue);<br />
receiver.setMessageListener(new MessageListener() {<br />
public void onMessage(Message message) {<br />
if(message instanceof TextMessage)<br />
{<br />
TextMessage txtMessage = (TextMessage)message;<br />
try {<br />
System.out.println(&#8220;contenu du message:&#8221;+txtMessage.getText());<br />
} catch (JMSException e) {<br />
e.printStackTrace();<br />
}<br />
}<br />
}<br />
});<br />
conn.start();</p>
<p>} catch (NamingException e) {<br />
e.printStackTrace();<br />
} catch (JMSException e) {<br />
e.printStackTrace();<br />
}<br />
}<br />
}</p></blockquote>
<p>Dans le mode asynchrone, le messagListener permet la réception des messages et leur traitement dans la méthode onMessage.</ul>
</li>
<li><strong>Filtre de Message</strong>s</li>
<p>Si vous avez besoin de ne recevoir que les messages qui vous interesses, avec des critères spécifique, JMS donne la possibilité de définir des selecteurs de messages pour les consommateurs au moment de leur création (createSubscriber, createConsumer, &#8230;.) , la tache de selection est confiée au provider JMS plutôt qu&#8217;aux clients.</p>
<p>La selection de messages se fait sur les attributs JMS standards ou sur les propriétés définit par le client. Un selecteur est une expression booleenne dont la syntaxe est basée sur les expressions booleennes de SQL92 :</p>
<p>Exemples:</p>
<blockquote><p>TypeProduit=&#8217;highTech&#8217; OR Prix &gt; 300</p></blockquote>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/youssefmohamedmehdi.wordpress.com/4/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/youssefmohamedmehdi.wordpress.com/4/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/youssefmohamedmehdi.wordpress.com/4/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/youssefmohamedmehdi.wordpress.com/4/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/youssefmohamedmehdi.wordpress.com/4/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/youssefmohamedmehdi.wordpress.com/4/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/youssefmohamedmehdi.wordpress.com/4/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/youssefmohamedmehdi.wordpress.com/4/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/youssefmohamedmehdi.wordpress.com/4/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/youssefmohamedmehdi.wordpress.com/4/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/youssefmohamedmehdi.wordpress.com/4/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/youssefmohamedmehdi.wordpress.com/4/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/youssefmohamedmehdi.wordpress.com/4/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/youssefmohamedmehdi.wordpress.com/4/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=youssefmohamedmehdi.wordpress.com&amp;blog=10737367&amp;post=4&amp;subd=youssefmohamedmehdi&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://youssefmohamedmehdi.wordpress.com/2009/12/01/hello-world-jms/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1dd012079d91ec2f76463486a1b1e041?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">youssefmehdi</media:title>
		</media:content>
	</item>
	</channel>
</rss>
