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

<channel>
	<title>Information Centre &#187; mq</title>
	<atom:link href="http://my.center-of.info/tag/mq/feed/" rel="self" type="application/rss+xml" />
	<link>http://my.center-of.info</link>
	<description>“Wenn etwas schon da war, wie kann man es dann patentieren?” D.E.Knuth, 2002</description>
	<lastBuildDate>Mon, 28 Sep 2009 23:04:39 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Java JMS MQ Beispiel</title>
		<link>http://my.center-of.info/2009/06/23/java-jms-mq-beispiel/</link>
		<comments>http://my.center-of.info/2009/06/23/java-jms-mq-beispiel/#comments</comments>
		<pubDate>Tue, 23 Jun 2009 09:27:51 +0000</pubDate>
		<dc:creator>Haf</dc:creator>
				<category><![CDATA[JEE]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[jms]]></category>
		<category><![CDATA[mq]]></category>

		<guid isPermaLink="false">http://my.center-of.info/?p=128</guid>
		<description><![CDATA[Vor einiger Zeit wurde MQ installiert. Nun folgt endlich ein Beispiel wie man in Java MQ ansprechen kann. Dabei wird JMS (Java Message Servic) ohne JNDI (Java Naming and Directory Interface) verwendet. Ein JNDI-Beispiel folgt in einem späteren Blog.

Das Beispiel zeigt wie man mittels JMS eine MQ Nachricht verschicken und empfangen kann.
Die Architektur steht hier [...]]]></description>
			<content:encoded><![CDATA[<p>Vor einiger Zeit wurde <a href="http://my.center-of.info/2008/10/28/mq-install-on-linux/" target="_blank">MQ installiert</a>. Nun folgt endlich ein Beispiel wie man in Java MQ ansprechen kann. Dabei wird JMS (Java Message Servic) ohne JNDI (Java Naming and Directory Interface) verwendet. Ein JNDI-Beispiel folgt in einem späteren Blog.<br />
<span id="more-128"></span></p>
<p>Das Beispiel zeigt wie man mittels JMS eine MQ Nachricht verschicken und empfangen kann.<br />
Die Architektur steht hier nicht im Vordergrund, das nur die MQ Kommunikation.</p>
<p>Für das Versenden von MQ Nachrichten ist ein MQQueueSender verantwortlich, entsprechendes gilt für das Empfangen (MQQueueReceiver).<br />
Da bei MQ mehrere Clients Nachrichten verschicken können und jedem Client nur seine Antworten interessieren, gibt es die Möglichkeit dem Receiver einen Filter (Selector) anzugeben. Mit diesem Selector werden dann nur die MQ Nachrichten geliefert (empfangen), welche die Kriterien erfüllen.<br />
Hier lohnt es sich (nur) Correlation und Message ID zu nutzen, da andere Eigenschaften zu langsam in der Filterung sind.<br />
Bei der Correlation ID muss noch das Präfix &#8216;ID:&#8217; angehangen werden, welches bei der Message ID schon automatisch vorhanden ist.</p>
<p>Nachfolgend ein kleines MQ JMS Beispiel</p>
<pre class="brush: java">
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.Session;
import javax.jms.TextMessage;

import com.ibm.jms.JMSTextMessage;
import com.ibm.mq.jms.JMSC;
import com.ibm.mq.jms.MQQueue;
import com.ibm.mq.jms.MQQueueConnection;
import com.ibm.mq.jms.MQQueueConnectionFactory;
import com.ibm.mq.jms.MQQueueReceiver;
import com.ibm.mq.jms.MQQueueSender;
import com.ibm.mq.jms.MQQueueSession;
import com.ibm.msg.client.wmq.v6.base.internal.MQC;

public class TestMQJMSPlain {

     public static void main(String[] args) {

         MQQueueConnectionFactory cf = new MQQueueConnectionFactory();

         try {

           cf.setHostName(&amp;quot;...&amp;quot;);
           cf.setPort(1415);
           cf.setTransportType(JMSC.MQJMS_TP_CLIENT_MQ_TCPIP);
           cf.setQueueManager(&amp;quot;...&amp;quot;);
           cf.setChannel(&amp;quot;SYSTEM.DEF.SVRCONN&amp;quot;);
           String qIn = &amp;quot;...&amp;quot;;
           String qOut = &amp;quot;...&amp;quot;;

           MQQueueConnection connection = (MQQueueConnection) cf.createQueueConnection();
           // create a new Session, which is not transacted
           MQQueueSession session = (MQQueueSession) connection.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
           // create queues
           MQQueue queueRead = (MQQueue) session.createQueue(qIn);
           MQQueue queueWrite = (MQQueue) session.createQueue(qOut);
           // if the client on the other side is a non-jms client set this property
           queueWrite.setTargetClient(JMSC.MQJMS_CLIENT_NONJMS_MQ);

           // create a sender
           MQQueueSender sender =  (MQQueueSender) session.createSender(queueWrite);
           MQQueueReceiver receiver = null;      

           // create the message which will be sent over MQ
           JMSTextMessage message = (JMSTextMessage) session.createTextMessage(dat);
          // define the message type (not really necessary, depends from the client on the other side)
          message.setJMSType(MQC.MQFMT_STRING);
          // set a correlation ID
          message.setJMSCorrelationID(&amp;quot;MyIdSomethingElse&amp;quot; + System.currentTimeMillis());
          // set the replay queue
          message.setJMSReplyTo(queueRead);

          // lets start the connection
          connection.start();

          // send the JMS-Message
          sender.send(message);

          // create the selector to retrieve only the right response
          // the combination of message and correlation ID depends the individually defined constraints
          // it is wise to use the correlation and message ID for the selector, cause this are
          // faster as some other properties
          // Hint: the format for correlation ID is
          // JMSCorrelationID = &#039;ID:AF01CE....hex string...&#039;
          // the prefix &#039;ID&#039; is mandatory. However the message ID contains the fragment &#039;ID:&#039;
          String selector = &amp;quot;JMSCorrelationID = &#039;ID:&amp;quot; + dumpId2Hex(message.getJMSCorrelationIDAsBytes()) +
                                 &amp;quot;&#039; AND JMSMessageID = &#039;&amp;quot; + message.getJMSMessageID() + &amp;quot;&#039;&amp;quot;;

          // create a receiver with the defined selector
          receiver = (MQQueueReceiver) session.createReceiver(queueRead, selector);

          // receive the response (with match the filter in the selector). This call blocks max. 20000 ms
          Message receivedMessage = receiver.receive(20000);

          // check if message is received and a text message
          if (receivedMessage instanceof TextMessage) {
               // get the content...
              String replyString = ((TextMessage) receivedMessage).getText();
         }

         // close everything...
         sender.close();
         receiver.close();
         session.close();
         connection.close();		    

           }
	    catch (JMSException jmsex) {
	    	log.error(&amp;quot;JMSException&amp;quot;, jmsex);
	    }
	    catch (Exception ex) {
	    	log.error(&amp;quot;An other error occurred.&amp;quot;, ex);
	    }
     }
}
</pre>
]]></content:encoded>
			<wfw:commentRss>http://my.center-of.info/2009/06/23/java-jms-mq-beispiel/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[Update] MQ install on Linux</title>
		<link>http://my.center-of.info/2008/10/28/mq-install-on-linux/</link>
		<comments>http://my.center-of.info/2008/10/28/mq-install-on-linux/#comments</comments>
		<pubDate>Mon, 27 Oct 2008 22:14:53 +0000</pubDate>
		<dc:creator>Haf</dc:creator>
				<category><![CDATA[DevEnv]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[mq]]></category>
		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://blog.had493.schokokeks.org/?p=9</guid>
		<description><![CDATA[Aus gegebenem Anlass wird WebSphere MQ benötigt. Da IBM eine 90tägige Trail-Version anbietet und man lieber zuerst ausprobiert, bevor etwas produktiv genutzt werden soll, habe ich testweise WebSphere MQ 7 unter Ubuntu installiert.

Es wird keine direkte Ubuntu-Version angeboten, aber die rpm-Pakete lassen sich auch unter Ubuntu installieren. Man muss nicht alle rpm-Pakete installieren, erst recht [...]]]></description>
			<content:encoded><![CDATA[<p>Aus gegebenem Anlass wird WebSphere MQ benötigt. Da IBM eine 90tägige Trail-Version anbietet und man lieber zuerst ausprobiert, bevor etwas produktiv genutzt werden soll, habe ich testweise WebSphere MQ 7 unter Ubuntu installiert.<br />
<span id="more-9"></span><br />
Es wird keine direkte Ubuntu-Version angeboten, aber die rpm-Pakete lassen sich auch unter Ubuntu installieren. Man muss nicht alle rpm-Pakete installieren, erst recht nicht die mitgelieferte Java-Umgebung (IBM Java SDK). Hier reicht die SUN Version völlig aus (Paket: sun-java6-jdk).</p>
<pre class="brush: bash">
$&gt; ls
copyright                              MQSeriesMsg_hu-7.0.0-0.i386.rpm
gsk7bas-7.0-4.14.i386.rpm              MQSeriesMsg_it-7.0.0-0.i386.rpm
ibm-java2-i386-sdk-5.0-5.0.i386.rpm    MQSeriesMsg_ja-7.0.0-0.i386.rpm
lap                                    MQSeriesMsg_ko-7.0.0-0.i386.rpm
licenses                               MQSeriesMsg_pl-7.0.0-0.i386.rpm
mqlicense.sh                           MQSeriesMsg_pt-7.0.0-0.i386.rpm
MQSeriesClient-7.0.0-0.i386.rpm        MQSeriesMsg_ru-7.0.0-0.i386.rpm
MQSeriesConfig-7.0.0-0.i386.rpm        MQSeriesMsg_Zh_CN-7.0.0-0.i386.rpm
MQSeriesEclipseSDK33-7.0.0-0.i386.rpm  MQSeriesMsg_Zh_TW-7.0.0-0.i386.rpm
MQSeriesFTA-7.0.0-0.i386.rpm           MQSeriesRuntime-7.0.0-0.i386.rpm
MQSeriesJava-7.0.0-0.i386.rpm          MQSeriesSamples-7.0.0-0.i386.rpm
MQSeriesJRE-7.0.0-0.i386.rpm           MQSeriesSDK-7.0.0-0.i386.rpm
MQSeriesKeyMan-7.0.0-0.i386.rpm        MQSeriesServer-7.0.0-0.i386.rpm
MQSeriesMan-7.0.0-0.i386.rpm           MQSeriesTXClient-7.0.0-0.i386.rpm
MQSeriesMsg_cs-7.0.0-0.i386.rpm        PreReqs
MQSeriesMsg_de-7.0.0-0.i386.rpm        readadd.txt
MQSeriesMsg_es-7.0.0-0.i386.rpm        READMEs
MQSeriesMsg_fr-7.0.0-0.i386.rpm
</pre>
<p>Bevor die Installation begonnen werden kann, muss die Lizenz akzeptiert werden:</p>
<pre class="brush: bash">$&gt;./mqlicense.sh -accept</pre>
<p>Zur Installation des MQ Servers reicht folgendes:</p>
<pre class="brush: bash">$&gt;rpm -ivh --nodeps MQSeriesRuntime-7.0.0-0.i386.rpm MQSeriesServer-7.0.0-0.i386.rpm
</pre>
<p>Das Flag &#8211;nodeps ist notwendig, um nicht die Abhängigkeit zu /bin/sh aufzulösen.</p>
<p>Nach der Installation gibt es einen neuen User <strong>mqm</strong>. Dieser hat die Verwaltungs-Rechte für den MQServer.</p>
<p>Um einen Queue Manager (qm.world) zu erstellen, der eine Queue (q.one) beinhaltet sind folgende Befehle notwendig:</p>
<pre class="brush: bash">mqm:$&gt; crtmqm -q qm.world
mqm:$&gt; strmqm
mqm:$&gt; runmqsc
define qlocal (q.one)
end</pre>
<p>Mit -q wird eine Standard-Queue definiert, somit braucht man bei den restlichen Befehlen keine QueueManager-Angaben machen.</p>
<p>Zum Testen kann man die Beispiel-Programme verwenden:</p>
<pre class="brush: bash">mqm:/opt/mqm/samp/bin$&gt; ./amqsput Q.ONE
Sample AMQSPUT0 start
target queue is Q.ONE
Das ist ein Beispieltext mit wenig Inhalt etc.
</pre>
<p>Mit der Eingabe einer leeren Zeile kommt man aus dem Programm raus. In dem Beispiel wurde ein Satz in die Queue geschrieben. Zum Lesen aus der Queue:</p>
<pre class="brush: bash">mqm:/opt/mqm/samp/bin$&gt; ./amqsget Q.ONE</pre>
<p>Der Server ist jetzt installiert und funktionstüchtig. Nun wird der Client installiert. Zum Testen auch auf dem gleichen Rechner.</p>
<pre class="brush: bash">$&gt;rpm -ivh --nodeps MQSeriesClient-7.0.0-0.i386.rpm</pre>
<p>Um mit dem Server zu kommunizieren benötigt man noch einen Channel:</p>
<pre class="brush: bash">mqm:$&gt; runmqsc
define channel (ch.one) chltype (svrconn) trptype (tcp) mcauser (&#039;mqm&#039;)
define listener (l.one) trptype (tcp) control (qmgr)
start listener (l.one)
end</pre>
<p>Beim dem Listener wird der Standardport genutzt (1414, ansonsten &#8220;port (&#8230;)&#8221; hinzufügen).</p>
<p>Dem Client muss der Host und der Channel mitgeteilt werden:</p>
<pre class="brush: bash">$&gt;export MQSERVER=&#039;CH.ONE/TCP/localhost&#039;</pre>
<p>Um Daten in die Queue zu schreiben bzw. zu lesen existieren auch hierfür Beispielprogramme:</p>
<pre class="brush: bash">mqm:/opt/mqm/samp/bin$&gt; ./amqsputc Q.ONE qm.world
Ein Text vom Client.
mqm:/opt/mqm/samp/bin$&gt; ./amqsgetc Q.ONE qm.world
</pre>
<p>Man beachte jeweils das &#8220;<strong>c</strong>&#8221; an den Programmnamen.</p>
<p>Somit sind Server und Client installiert. Möchte man nun mit Java auf die Queues zugreifen, benötigt man die entsprechenden Bibliotheken:</p>
<pre class="brush: bash">rpm -ivh --nodeps MQSeriesJava-7.0.0-0.i386.rpm</pre>
<p>Die libs sind unter</p>
<pre class="brush: bash">$&gt;ls /opt/mqm/java/lib
CL3Export.jar                  com.ibm.mq.pcf.jar       jta.jar
CL3Nonexport.jar               com.ibm.mq.postcard.jar  ldap.jar
com.ibm.mq.commonservices.jar  com.ibm.mq.soap.jar      libmqjbnd.so
com.ibm.mq.defaultconfig.jar   connector.jar            libmqjexitstub02.so
com.ibm.mq.headers.jar         dhbcore.jar              libPgmIpLayer.so
com.ibm.mq.jar                 fscontext.jar            OSGi
com.ibm.mq.jmqi.jar            jca                      providerutil.jar
com.ibm.mqjms.jar              jms.jar                  rmm.jar
com.ibm.mq.jms.Nojndi.jar      jndi.jar                 soap</pre>
<p>zu finden.</p>
<p>Demnächst folgt ein Beitrag zur Java Entwicklung mit MQ.</p>
<p>[Update 23.06.2009]<br />
Ein <a href="http://my.center-of.info/2009/06/23/java-jms-mq-beispiel/">Java Beispiel mit JMS</a> gibt es nun auch.</p>
<p>Links:</p>
<p>[1] <a title="IBM WebSphere MQ" href="http://www-142.ibm.com/software/dre/ecatalog/detail.wss?locale=de_DE&amp;synkey=G106020C87422R91">IBM WebSphere MQ</a></p>
<p>[2] <a title="IBM WebSphere MQ v7, Trail-Download" href="http://www.ibm.com/developerworks/downloads/ws/wmq/?S_TACT=105AGX28&amp;S_CMP=TRIALS">IBM WebSphere MQ 7, Trail-Download</a>. (Zugangsdaten sind notwendig, kostenlose Registrierung ist möglich)</p>
<p>[3] IBM Help: <a title="WebSphere MQ: Quick Beginning for Linux" href="http://publib.boulder.ibm.com/infocenter/wmqv7/v7r0/topic/com.ibm.mq.amq1ac.doc/lq10120_.htm">WebSphere MQ Linux install</a></p>
]]></content:encoded>
			<wfw:commentRss>http://my.center-of.info/2008/10/28/mq-install-on-linux/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
