- WMQ třídy pro Javu:
- zapouzdřují Message Queue Interface (MQI),
- poskytují plnou sadu funkčností WMQ,
- je to proprietární řešení, ale jednodušší k používání, než JMS.
- (WMQ třídy pro) JMS:
- Java "industry standard" pro messaging,
- je součástí Java EE specifikace (a tedy součástí většiny (Java) aplikačních serverů),
- umožňuje spravovat administrované objekty (connection factory, fronty ad.) v centrální repository.
Společná konfigurace
Ať už použijeme jeden, nebo druhý způsob, v obou případech je potřeba mít vytvořené některé objekty. Všechny použité typy objektů jsem popisoval již v minulém zápisu. Jedinou informací navíc je, že vytvořený kanál musí být typu server-connection.
WMQ třídy pro Javu
Třídy pro Javu jsou poměrně přímočaré - stačí, pokud člověk rozumí hierarchii a funkci základních objektů ve WMQ:
- Vytvoří se instance Queue Manageru.
- Z něj se získá instace Queue, s parametrem daného typu otevření (procházení, vstup, výstup atd.).
- Vytvoří se Message a nastaví se jí nějaká data.
- Zpráva se vloží do (nebo načte z) fronty.
- Zavřou se zdroje.
package com.adastracorp.jprase.wmq.java; import com.ibm.mq.MQMessage; import com.ibm.mq.MQQueue; import com.ibm.mq.MQQueueManager; import com.ibm.mq.constants.CMQC; public class JavaProvider { private static final String QM_NAME = "QM_JAVA"; private static final String HOSTNAME = "192.168.6.128"; private static final String CHANNEL = "JAVA.CHANNEL"; private static final int PORT = 5557; private static final String QUEUE = "JPRASE"; private static void init() { MQEnvironment.hostname = HOSTNAME; MQEnvironment.channel = CHANNEL; MQEnvironment.port = PORT; } public static void main(String[] args) throws Exception { init(); MQQueueManager queueManager = new MQQueueManager(QM_NAME); MQQueue queue = queueManager .accessQueue(QUEUE, CMQC.MQOO_OUTPUT | CMQC.MQOO_INQUIRE); MQMessage message = new MQMessage(); message.writeUTF("Hello, WMQ!"); queue.put(message); queue.close(); queueManager.disconnect(); } }
WMQ třídy pro JMS
U JMS je trochu více konfigurace - je potřeba vytvořit Initial Context a do něj vložit Connection Factory a Destination. Destination je mapovaná na (existující) frontu a queue managera. WMQ v současné verzi (7.0.1.2) poskytuje pro JNDI dvě implementace (ale je možné použít i jiné, např. JNDI na WebSphere AS):
Výsledná konfigurace vypadá takto:
- LDAP server (com.sun.jndi.ldap.com.sun.jndi.fscontext.RefFSContextFactory),
- File system (com.sun.jndi.fscontext.RefFSContextFactory).
Výsledná konfigurace vypadá takto:
Kód samotný je pak klasické JMS:
- Vytvoření InitialContext.
- Vyhledání ConnectionFactory.
- Vytvoření Connection.
- Vytvoření Session.
- Vytvoření Destination.
- Vytvoření MessageProducer/MessageConsumer.
- Vytvoření Message (pro producenta).
- Odeslání (příjem) Message.
- Zavření zdrojů.
package com.adastracorp.jprase.wmq.jms; import javax.jms.Connection; import javax.jms.ConnectionFactory; import javax.jms.DeliveryMode; import javax.jms.Destination; import javax.jms.MessageProducer; import javax.jms.Session; import javax.jms.TextMessage; import javax.naming.Context; public class JmsProvider { private static final String CONTEXT_FACTORY = "com.sun.jndi.fscontext.RefFSContextFactory"; private static final String PROVIDER_URL = "file:///jms"; private static Context getContext() throws NamingException { Properties env = new Properties(); env.put(Context.INITIAL_CONTEXT_FACTORY, CONTEXT_FACTORY); env.put(Context.PROVIDER_URL, PROVIDER_URL); return new InitialContext(env); } public static void main(String[] args) throws Exception { Context context = getContext(); ConnectionFactory factory = (ConnectionFactory) context.lookup("jmsConnFact"); Connection connection = factory .createConnection(); Session session = connection .createSession(false, Session.AUTO_ACKNOWLEDGE); Destination destination = session .createQueue("JPRASE"); MessageProducer producer = session .createProducer(destination); producer.setDeliveryMode( DeliveryMode.NON_PERSISTENT); TextMessage message = session .createTextMessage( "Hello, JMS!"); producer.send(message); producer.close(); session.close(); connection.close(); } }
Žádné komentáře:
Okomentovat
Poznámka: Komentáře mohou přidávat pouze členové tohoto blogu.