⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 transactedexample.java

📁 JMS的例子程序
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
/* * @(#)TransactedExample.java	1.3 00/08/18 * * Copyright (c) 2000 Sun Microsystems, Inc. All Rights Reserved. * * Sun grants you ("Licensee") a non-exclusive, royalty free, license to use, * modify and redistribute this software in source and binary code form, * provided that i) this copyright notice and license appear on all copies of * the software; and ii) Licensee does not utilize the software in a manner * which is disparaging to Sun. * * This software is provided "AS IS," without a warranty of any kind. ALL * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, INCLUDING ANY * IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR * NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN AND ITS LICENSORS SHALL NOT BE * LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING * OR DISTRIBUTING THE SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR ITS * LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR DIRECT, * INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER * CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY, ARISING OUT OF THE USE OF * OR INABILITY TO USE SOFTWARE, EVEN IF SUN HAS BEEN ADVISED OF THE * POSSIBILITY OF SUCH DAMAGES. * * This software is not designed or intended for use in on-line control of * aircraft, air traffic, aircraft navigation or aircraft communications; or in * the design, construction, operation or maintenance of any nuclear * facility. Licensee represents and warrants that it will not use or * redistribute the Software for such purposes. */import java.util.*;import javax.jms.*;/** * The TransactedExample class demonstrates the use of transactions in a JMS * application.  It represents a highly simplified eCommerce application, in * which the following things happen: * * <pre> * Legend * R - Retailer * V - Vendor * S - Supplier * O - Order Queue * C - Confirmation Queue * ()- Thread * []- Queue * *                                   2(b)             3 *          1        2(a)        /+------->[S1 O]<-----------(S1) *        /+-->[V O]<----+      /                             | *       /                \    /                      3       | *      /                  \  /     5      v------------------+ *    (R)                  ( V )-------->[V C]        4 *     \                   /  \            ^------------------+ *      \                 /    \                              | *       \   7         6 /      \                             | *        +---->[R C]<--+        \   2(c)             4       | *                                +------->[SN O]<-----------(SN) * </pre> * * <ol> * <li>A retailer sends a message to the vendor order queue ordering a quantity  * of computers.  It waits for the vendor's reply. * <li>The vendor receives the retailer's order message and places an order  * message into each of its suppliers' order queues, all in one transaction.  * This JMS transaction combines one synchronous receive with multiple sends. * <li>One supplier receives the order from its order queue, checks its * inventory, and sends the items ordered to the order message's replyTo * field. If it does not have enough in stock, it sends what it has.  * The synchronous receive and the send take place in one JMS transaction. * <li>The other supplier receives the order from its order queue, checks its * inventory, and sends the items ordered to the order message's replyTo * field. If it does not have enough in stock, it sends what it has.  * The synchronous receive and the send take place in one JMS transaction. * <li>The vendor receives the replies from the suppliers from its confirmation  * queue and updates the state of the order.  Messages are processed by an  * asynchronous message listener; this step illustrates using JMS transactions  * with a message listener. * <li>When all outstanding replies are processed for a given order, the vendor  * sends a message notifying the retailer whether or not it can fulfill the  * order. * <li>The retailer receives the message from the vendor. * </ol> * <p> * The program contains five classes: Retailer, Vendor, GenericSupplier,  * VendorMessageListener, and Order.  It also contains a main method and a  * method that runs the threads of the Retail, Vendor, and two supplier classes. * <p> * All the messages use the MapMessage message type.  Synchronous receives are * used for all message reception except for the case of the vendor processing  * the replies of the suppliers. These replies are processed asynchronously  * and demonstrate how to use transactions within a message listener. * <p> * All classes except Retailer use transacted sessions. * <p> * The program uses five queues.  Before you run the program, create the * queues and name them A, B, C, D and E. * <p> * When you run the program, specify on the command line the number of * computers to be ordered. * * @author Kim Haase * @author Joseph Fialli * @version 1.3, 08/18/00 */public class TransactedExample {    public static String  vendorOrderQueueName = null;    public static String  retailerConfirmationQueueName = null;    public static String  monitorOrderQueueName = null;    public static String  storageOrderQueueName = null;    public static String  vendorConfirmationQueueName = null;    public static int     exitResult = 0;    /**     * The Retailer class orders a number of computers by sending a message     * to a vendor.  It then waits for the order to be confirmed.     * <p>     * In this example, the Retailer places two orders, one for the quantity     * specified on the command line and one for twice that number.     * <p>     * This class does not use transactions.     *     * @author Kim Haase     * @author Joseph Fialli     * @version 1.3, 08/18/00     */    public static class Retailer extends Thread {        int  quantity = 0;        /**         * Constructor.  Instantiates the retailer with the quantity of          * computers being ordered.         *         * @param q	the quantity specified in the program arguments         */        public Retailer(int q) {            quantity = q;        }        /**         * Runs the thread.         */        public void run() {            QueueConnectionFactory  queueConnectionFactory = null;            QueueConnection         queueConnection = null;            QueueSession            queueSession = null;            Queue                   vendorOrderQueue = null;            Queue                   retailerConfirmationQueue = null;            QueueSender             queueSender = null;            MapMessage              outMessage = null;            QueueReceiver           orderConfirmationReceiver = null;            MapMessage              inMessage = null;            try {                queueConnectionFactory =                    SampleUtilities.getQueueConnectionFactory();                queueConnection =                    queueConnectionFactory.createQueueConnection();                queueSession = queueConnection.createQueueSession(false,                                                     Session.AUTO_ACKNOWLEDGE);                vendorOrderQueue =                    SampleUtilities.getQueue(vendorOrderQueueName, queueSession);                retailerConfirmationQueue =                    SampleUtilities.getQueue(retailerConfirmationQueueName,                                              queueSession);            } catch (Exception e) {                System.out.println("Connection problem: " + e.toString());                System.out.println("Program assumes five queues named A B C D E");                if (queueConnection != null) {                    try {                        queueConnection.close();                    } catch (JMSException ee) {}                }                System.exit(1);            }            /*             * Create non-transacted session and sender for vendor order             * queue.             * Create message to vendor, setting item and quantity values.             * Send message.             * Create receiver for retailer confirmation queue.             * Get message and report result.             * Send an end-of-message-stream message so vendor will             * stop processing orders.             */            try {                queueSender = queueSession.createSender(vendorOrderQueue);                outMessage = queueSession.createMapMessage();                outMessage.setString("Item", "Computer(s)");                outMessage.setInt("Quantity", quantity);                outMessage.setJMSReplyTo(retailerConfirmationQueue);                queueSender.send(outMessage);                System.out.println("Retailer: ordered " + quantity                                   + " computer(s)");                orderConfirmationReceiver =                    queueSession.createReceiver(retailerConfirmationQueue);                queueConnection.start();                inMessage = (MapMessage) orderConfirmationReceiver.receive();                if (inMessage.getBoolean("OrderAccepted") == true) {                    System.out.println("Retailer: Order filled");                } else {                    System.out.println("Retailer: Order not filled");                }                                                System.out.println("Retailer: placing another order");                outMessage.setInt("Quantity", quantity * 2);                queueSender.send(outMessage);                System.out.println("Retailer: ordered "                                    + outMessage.getInt("Quantity")                                   + " computer(s)");                inMessage =                    (MapMessage) orderConfirmationReceiver.receive();                if (inMessage.getBoolean("OrderAccepted") == true) {                    System.out.println("Retailer: Order filled");                } else {                    System.out.println("Retailer: Order not filled");                }                // Send a non-text control message indicating end of messages.                queueSender.send(queueSession.createMessage());            } catch (Exception e) {                System.out.println("Retailer: Exception occurred: "                                    + e.toString());                e.printStackTrace();                exitResult = 1;            } finally {                if (queueConnection != null) {                    try {                        queueConnection.close();                    } catch (JMSException e) {                        exitResult = 1;                    }                }            }        }    }    /**     * The Vendor class uses one transaction to receive the computer order from     * the retailer and order the needed number of monitors and disk drives     * from its suppliers.  At random intervals, it throws an exception to     * simulate a database problem and cause a rollback.     * <p>     * The class uses an asynchronous message listener to process replies from     * suppliers. When all outstanding supplier inquiries complete, it sends a      * message to the Retailer accepting or refusing the order.     *     * @author Kim Haase     * @author Joseph Fialli     * @version 1.3, 08/18/00     */    public static class Vendor extends Thread {        Random  rgen = new Random();        int     throwException = 1;        /**         * Runs the thread.         */        public void run() {            QueueConnectionFactory  queueConnectionFactory = null;            QueueConnection         queueConnection = null;            QueueSession            queueSession = null;            QueueSession            asyncQueueSession = null;            Queue                   vendorOrderQueue = null;            Queue                   monitorOrderQueue = null;            Queue                   storageOrderQueue = null;            Queue                   vendorConfirmationQueue = null;            QueueReceiver           vendorOrderQueueReceiver = null;            QueueSender             monitorOrderQueueSender = null;            QueueSender             storageOrderQueueSender = null;            MapMessage              orderMessage = null;            QueueReceiver           vendorConfirmationQueueReceiver = null;            VendorMessageListener   listener = null;            Message                 inMessage = null;            MapMessage              vendorOrderMessage = null;            Message                 endOfMessageStream = null;            Order                   order = null;            int                     quantity = 0;            try {                queueConnectionFactory =                    SampleUtilities.getQueueConnectionFactory();                queueConnection =                    queueConnectionFactory.createQueueConnection();                queueSession = queueConnection.createQueueSession(true, 0);                asyncQueueSession = queueConnection.createQueueSession(true, 0);                vendorOrderQueue =                    SampleUtilities.getQueue(vendorOrderQueueName, queueSession);                monitorOrderQueue =                    SampleUtilities.getQueue(monitorOrderQueueName, queueSession);                storageOrderQueue =                    SampleUtilities.getQueue(storageOrderQueueName, queueSession);                vendorConfirmationQueue =                    SampleUtilities.getQueue(vendorConfirmationQueueName, queueSession);            } catch (Exception e) {                System.out.println("Connection problem: " + e.toString());                System.out.println("Program assumes six queues named A B C D E F");                if (queueConnection != null) {                    try {                        queueConnection.close();

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -