5 Stimmen

Wie kann ich eine TopicConnectionFactory für MQSeries in Spring erstellen?

Ich habe den Artikel gelesen http://techtots.blogspot.com/2010/01/connecting-to-mq-using-spring-without.html über das Konfigurieren QueueConnectionFactories und diese Seite der Dinge gut funktionieren lassen.

# MQ related values
mq.jms.qcf=QM_Epsilon
mq.jms.request.queue=TEST.REQUEST.QUEUE

# Connection details
mq.host.url=localhost:1414/SYSTEM.DEF.SVRCONN
mq.factoryclass=com.ibm.mq.jms.context.WMQInitialContextFactory

# Authentication details
mq.auth=simple
mq.user=******
mq.password=********

<bean id="queueConnectionFactory" class="org.springframework.jndi.JndiObjectFactoryBean">
    <property name="jndiName" value="${mq.jms.qcf}" />
    <property name="resourceRef" value="false" />
    <property name="jndiEnvironment">
        <props>
            <prop key="java.naming.factory.initial">${mq.factoryclass}</prop>
            <prop key="java.naming.provider.url">${mq.host.url}</prop>
            <prop key="java.naming.security.authentication">${mq.auth}</prop>
            <prop key="java.naming.security.principal">${mq.user}</prop>
            <prop key="java.naming.security.credentials">${mq.password}</prop>
        </props>
    </property>
</bean>

Mit dieser Konfiguration wird die queueConnectionFactory Bohne lässt sich leicht in meinen Unterricht einbinden als MQQueueConnectionFactory .

Aber ich möchte das Publish/Subscribe-Modell verwenden, und so wie ich es verstehe, muss ich dafür eine MQTopicConnectionFactory erhalten. Ich habe überall gesucht und zahlreiche Dinge ausprobiert, aber ich kann keine Informationen darüber finden, wie ich diese Konfiguration oder die MQ-Installation so ändern kann, dass ich eine MQTopicConnectionFactory anstelle eines MQQueueConnectionFactory .

5voto

T.Rob Punkte 31064

El WMQInitialContextFactory ist eine Klasse, die einen JNDI-Anbieter über eine WebSphere MQ-Warteschlange implementiert. Anstatt die verwalteten Objekte in einer .bindings-Datei oder in LDAP zu speichern, werden sie serialisiert und in einer Warteschlange gespeichert, und diese Klasse ermöglicht es Ihnen, diese Warteschlange wie einen weiteren JNDI-Speicher zu behandeln. Diese Klasse war immer nur als JNDI-Anbieter gedacht und nicht als Ersatz für die eigentliche IBM JMS-Implementierung. Da das Speichern von verwalteten Objekten in einem Topic nicht funktionieren würde, enthalten diese Klassen keine Topic Factories. Das ist auch nicht anders zu erwarten.

Meiner Meinung nach ist das Problem mit WMQInitialContextFactory ist, dass sie zunächst eine Verbindung zu WebSphere MQ herstellen muss, um eine Verbindungsfabrik zu erhalten, die dann der Anwendung mitteilt, wie sie sich mit WebSphere MQ verbinden soll. Das macht den verlinkten Artikel verwirrend, denn es scheint, dass die gesamte Konfiguration, die WMQ-Verbindungsdetails usw. der Anwendung zugute kommen, während in Wirklichkeit nur ein JNDI-Anbieter gebootet wird, von dem erwartet wird, dass er über definierte Verbindungsfabrik-Objekte mit denselben Informationen verfügt.

Was in dem Artikel fehlt, ist, dass der Autor das IBM-Tool JMSAdmin hätte verwenden müssen, um sich mit dem MQInitialContext zu verbinden und die ConnectionFactory und andere verwaltete Objekte zu definieren, bevor er die Anwendung mit demselben Initial Context verbindet, um auf sie zuzugreifen.

Fürs Protokoll: Die WebSphere MQ JMS-Klassen unterstützen die JMS 1.1 ConnectionFactory- und Destination-Klassen schon seit geraumer Zeit. Davor unterstützten sie sowohl Warteschlangen als auch Themen gemäß der JMS 1.0 Spezifikation.

Sie können die IBM WMQ JMS-Implementierung herunterladen als StützPac MQC7 . Es gibt viel mehr als nur die jar-Dateien. Sie erhalten zum Beispiel jede Menge Beispielcode, Diagnose- und Trace-Utilities, Dokumentation usw. Sie erhalten auch die richtigen Jar-Dateien.

Wenn Sie eine .bindings-Datei (initialer Kontext des Dateisystems) anstelle der WMQInitialContextFactory laden Sie das neueste WebSphere MQ Explorer-Tool als SupportPac MS0T . Sie können ein Verzeichnis erstellen, WMQ Explorer darauf verweisen und alle Ihre Verbindungsfabriken und Ziele definieren. (Oder Sie verwenden domänenspezifische QueueConnectionFactory und TopicConnectionFactory, wenn Sie es ganz altmodisch mögen). Weitere Informationen über die Verwendung von WMQ Explorer zur Definition Ihrer verwalteten Objekte finden Sie unter: _Erstellen und Konfigurieren von JMS-verwalteten Objekten_

Wenn Sie eine Anleitung wünschen, die eine Demonstration der Verwendung des IBM-Tools JMSAdmin zur Erstellung der .bindings-Datei enthält, schauen Sie unter _Ausführen einer eigenständigen Java-Anwendung auf WebSphere MQ V6.0 . (Das JMSAdmin-Tool wird mit dem WMQ-Server installiert, und ich glaube, es ist auch in der oben verlinkten kostenlosen MS0T-WMQ-Client-Installation enthalten). Die Dokumentation für das JMSAdmin-Tool finden Sie hier: Verwendung des WebSphere MQ JMS-Verwaltungstools_

Unabhängig davon, welche Methode Sie zur Erstellung von verwalteten Objekten wählen, können Sie alle möglichen Eigenschaften, die von der IBM-Implementierung unterstützt werden, unter nachschlagen: [Eigenschaften von WebSphere MQ-Klassen für JMS-Objekte](http://publib.boulder.ibm.com/infocenter/wmqv7/v7r0/topic/com.ibm.mq.csqzaw.doc/jm10910.htm)_

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X