This example illustrates how JMS (Java Message Service) API can be used in a Java applet : Java消息服务JMS « J2EE平台 « Java

En
Java
1. 图形用户界面
2. 三维图形动画
3. 高级图形
4. 蚂蚁编译
5. Apache类库
6. 统计图
7. 
8. 集合数据结构
9. 数据类型
10. 数据库JDBC
11. 设计模式
12. 开发相关类
13. EJB3
14. 电子邮件
15. 事件
16. 文件输入输出
17. 游戏
18. 泛型
19. GWT
20. Hibernate
21. 本地化
22. J2EE平台
23. 基于J2ME
24. JDK-6
25. JNDI的LDAP
26. JPA
27. JSP技术
28. JSTL
29. 语言基础知识
30. 网络协议
31. PDF格式RTF格式
32. 映射
33. 常规表达式
34. 脚本
35. 安全
36. Servlets
37. Spring
38. Swing组件
39. 图形用户界面
40. SWT-JFace-Eclipse
41. 线程
42. 应用程序
43. Velocity
44. Web服务SOA
45. 可扩展标记语言
Java 教程
Java » J2EE平台 » Java消息服务JMS屏幕截图 
This example illustrates how JMS (Java Message Service) API can be used in a Java applet
 

/*
 * @(#)MQApplet.java  1.1 10/10/03
 *
 * Copyright (c) 2003 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.
 */



================================================================================
@(#)README  1.6 03/22/05
================================================================================

JMS Applet example

Description
-----------
This example illustrates how JMS API can be used in a Java applet.
MQApplet is a simple chat applet. It can be used with any Java enabled
browser.

Files
-----
MQApplet.java   Source file for this example.
mqapplet.html   HTML Source file for the applet.
README          This file.
build.xml       Build rules (for Jakarta Ant).

Configuring the environment
---------------------------
To recompile or run this example, you may need to modify the build.xml
file. Please change the value of the "libdir" property as appropriate.
It should point to the directory that contains the "imq.jar" and
"jms.jar" files.

Building the example
--------------------

* Set the JAVA_HOME environment variable to point to the JDK.
* Simply run the Jakarta ant build tool to build the applet.

The applet compilation process is a bit different from the typical
standalone Message Queue clients. It needs to do the following things -

* Compile MQApplet.java into MQApplet.class
* Bundle MQApplet.class into a jar file -> mqapplet.jar
* Copy the imq.jar and jms.jar files to a local directory.
* Generate a self signed certificate using keytool.
* Sign mqapplet.jar, imq.jar and jms.jar using this certificate.
  Applets must be signed if they need to do anything non-trivial.
  Otherwise you will get security exceptions at runtime.

Running the example applet
--------------------------

The build script places all the files necessary for running this
applet into a new directory named "install". Copy all the contents of
this directory somewhere under a web server's document root. This
includes -

    * mqapplet.html
    * Signed Jar files : mqapplet.jar, imq.jar, jms.jar

After this, the applet can be run by simply pointing the browser to
the "mqapplet.html" file.

After the applet is loaded, the web browser (Java pluginshould open
a dialog box asking for permission to run a signed applet. Click on
the "Yes" button.

When the applet starts running it will not automatically connect to
a Message Queue broker. Please specify the broker's address and click 
on the "Connect" button. 

Running as a standalone application
-----------------------------------

The MQApplet.class(build/MQApplet.classcan also be used as a 
standalone application. It presents the same UI as the applet. To run 
this example as a standalone application, you need to set CLASSPATH 
to include at least:
    jms.jar
    imq.jar
    directory containing this example

A detailed guideline on setting CLASSPATH is found in the README
file in the jms demo subdirectory as well as in the "Quick Start
Tutorial" in the Sun Java(tmSystem Message Queue Developer's Guide.

The following are examples for setting CLASSPATH on the different
platforms. These commands are run from the directory containing
this example.

On Solaris:
    setenv CLASSPATH /usr/share/lib/jms.jar:/usr/share/lib/imq.jar:.

On Windows:
    set CLASSPATH=%IMQ_HOME%\lib\jms.jar;%IMQ_HOME%\lib\imq.jar;.

On Linux:
    setenv CLASSPATH /opt/sun/mq/share/lib/jms.jar:
  /opt/sun/mq/share/lib/imq.jar:.

#####hpux-dev#####
On HP-UX:
    export CLASSPATH=/opt/sun/mq/share/lib/jms.jar:/opt/sun/mq/share/lib/imq.jar:.

Note that it is assumed that the above export command is run on
BASH shell


After setting the CLASSPATH, simply run -
    java MQApplet

Obviously, you don't need the signed jar files for running as
a standalone application.




/*
 * @(#)MQApplet.java  1.1 10/10/03
 *
 * Copyright (c) 2003 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.awt.*;
import java.awt.event.*;
import java.applet.*;

import javax.swing.*;
import javax.swing.event.*;

import javax.jms.*;

/**
 * This is a simple chat applet that uses JMS APIs. It uses publish
 * subscribe model. It can also be run as a standalone application.
 */
public class MQApplet extends JApplet
    implements ActionListener, ExceptionListener, MessageListener {
    private static boolean DEBUG = Boolean.getBoolean("mqapplet.debug");
    private static String TRANSPORT;
    static {
        TRANSPORT = System.getProperty("mqapplet.transport");
        if (TRANSPORT == null)
            TRANSPORT = "";
    }

    private JPanel mainPanel;
    private StatusPanel statusBar;
    private JTextField urlField;
    private JTextField hostField, portField;
    private JTextField addrField;

    private JTextArea txArea, rxArea;
    JButton connectButton, exitButton, clearButton, sendButton;

    private boolean createExitButton = false;

    public void init() {
        initGUI();
        initJMS();
    }

    public void destroy() {
        shutdownJMS();
        shutdownGUI();
    }

    private void enableExit() {
        createExitButton = true;
    }

    private void initGUI() {
        // The application window contains the 'mainPanel' container
        // and a status bar.
        Container content = getContentPane();

        // Create the mainPanel container. It holds all the UI
        // components...
        mainPanel = new JPanel();
        mainPanel.setLayout(new BorderLayout());
        content.add("Center", mainPanel);

        // Create the status bar..
        statusBar = new StatusPanel();
        content.add("South", statusBar);

        //
        // Now start populating mainPanel...
        //

        // dialogPanel contains JMS configuration and the connect
        // button.
        JPanel dialogPanel = new JPanel();
        dialogPanel.setLayout(
            new BoxLayout(dialogPanel, BoxLayout.Y_AXIS));
        dialogPanel.setBorder(
            createMyBorder("JMS Connection Properties..."));

        JPanel dummyPanel;

        if (TRANSPORT.equalsIgnoreCase("http")) {
            dummyPanel = new JPanel();
            dummyPanel.setLayout(new BoxLayout(dummyPanel, BoxLayout.X_AXIS));
            dummyPanel.add(new JLabel("imqConnectionURL : "));
            urlField = new JTextField("http://");
            dummyPanel.add(urlField);
            dialogPanel.add(dummyPanel);
        }
        else if (TRANSPORT.equalsIgnoreCase("tcp")) {
            dummyPanel = new JPanel();
            dummyPanel.setLayout(new BoxLayout(dummyPanel, BoxLayout.X_AXIS));
            dummyPanel.add(new JLabel("imqBrokerHostName : "));
            hostField = new JTextField("localhost");
            dummyPanel.add(hostField);
            dialogPanel.add(dummyPanel);

            dummyPanel = new JPanel();
            dummyPanel.setLayout(new BoxLayout(dummyPanel, BoxLayout.X_AXIS));
            dummyPanel.add(new JLabel("imqBrokerHostPort : "));
            portField = new JTextField("7676");
            dummyPanel.add(portField);
            dialogPanel.add(dummyPanel);
        }
        else {
            dummyPanel = new JPanel();
            dummyPanel.setLayout(new BoxLayout(dummyPanel, BoxLayout.X_AXIS));
            dummyPanel.add(new JLabel("imqAddressList : "));
            addrField = new JTextField("mq://localhost:7676");
            dummyPanel.add(addrField);
            dialogPanel.add(dummyPanel);
        }

        dummyPanel = new JPanel();
        dummyPanel.setLayout(new BoxLayout(dummyPanel, BoxLayout.X_AXIS));

        connectButton = new JButton();
        connectButton.setBorder(BorderFactory.createCompoundBorder(
            BorderFactory.createEmptyBorder(3033),
            connectButton.getBorder()));
        connectButton.addActionListener(this);
        setConnectButton("Connect");
        dummyPanel.add(connectButton);

        if (createExitButton) {
            exitButton = new JButton("Exit");
            exitButton.setBorder(BorderFactory.createCompoundBorder(
                BorderFactory.createEmptyBorder(3333),
                exitButton.getBorder()));
            exitButton.addActionListener(this);
            dummyPanel.add(exitButton);
        }

        dialogPanel.add(dummyPanel);

        JPanel messagePanel = new JPanel();
        messagePanel.setLayout(new GridLayout(21));

        dummyPanel = new JPanel();
        dummyPanel.setLayout(new BoxLayout(dummyPanel, BoxLayout.Y_AXIS));
        dummyPanel.setBorder(createMyBorder("Received messages "));

        rxArea = new JTextArea();
        rxArea.setEditable(false);
        JScrollPane spane = new JScrollPane(rxArea,
            JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
            JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
        dummyPanel.add(spane);

        clearButton = new JButton("Clear");
        clearButton.setBorder(BorderFactory.createCompoundBorder(
            BorderFactory.createEmptyBorder(3333),
            clearButton.getBorder()));
        clearButton.addActionListener(this);
        dummyPanel.add(clearButton);
        messagePanel.add(dummyPanel);

        dummyPanel = new JPanel();
        dummyPanel.setLayout(new BoxLayout(dummyPanel, BoxLayout.Y_AXIS));
        dummyPanel.setBorder(createMyBorder("Send message "));

        txArea = new JTextArea();
        txArea.setEditable(true);
        spane = new JScrollPane(txArea,
            JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
            JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
        dummyPanel.add(spane);

        sendButton = new JButton("Send");
        sendButton.setBorder(BorderFactory.createCompoundBorder(
            BorderFactory.createEmptyBorder(3333),
            sendButton.getBorder()));
        sendButton.addActionListener(this);
        dummyPanel.add(sendButton);
        messagePanel.add(dummyPanel);

        mainPanel.add("North", dialogPanel);
        mainPanel.add("Center", messagePanel);
    }

    private void initJMS() {
    }

    private void shutdownGUI() {
        remove(mainPanel);
        mainPanel = null;
    }

    private void shutdownJMS() {
        doDisconnect();
    }

    public void processEvent(AWTEvent e) {
        if (e.getID() == Event.WINDOW_DESTROY) {
            System.exit(0);
        }
    }

    public void actionPerformed(ActionEvent e) {
        if (e.getActionCommand().equals("Connect")) {
            if (TRANSPORT.equalsIgnoreCase("http")) {
                String us = urlField.getText();
                statusBar.setStatusLine("Connecting to " + us + "...");
                initHTTPConnectionFactory(us);
            }
            else if (TRANSPORT.equalsIgnoreCase("tcp")) {
                String h = hostField.getText();
                String p = portField.getText();
                statusBar.setStatusLine("Connecting to " + h + ":" + p + "...");
                initTCPConnectionFactory(h, p);
            }
            else {
                String addr = addrField.getText();
                statusBar.setStatusLine("Connecting to " + addr + "...");
                initConnectionFactory(addr);
            }

            doConnect();
        }

        if (e.getActionCommand().equals("Disconnect")) {
            statusBar.setStatusLine("Disconnecting...");
            doDisconnect();
            statusBar.setStatusLine("Connection closed.");
        }

        if (e.getActionCommand().equals("Send")) {
            String ss = txArea.getText();
            doSend(ss);
            txArea.setText(null);
        }

        if (e.getActionCommand().equals("Clear")) {
            rxArea.setText(null);
        }

        if (e.getActionCommand().equals("Exit")) {
            doDisconnect();
            System.exit(0);
        }
    }

    public void updateRxArea(String s) {
        rxArea.append(s);
    }

    public void enableConnectButton() {
        setConnectButton("Connect");
    }

    public void enableDisconnectButton() {
        setConnectButton("Disconnect");
    }

    ConnectionFactory connectionFactory = null;
    Connection connection = null;
    Session session = null;
    Topic topic = null;
    MessageConsumer msgConsumer = null;
    MessageProducer msgProducer = null;
    TextMessage textMessage = null;


    public void initHTTPConnectionFactory(String s) {
        try {
            if (connectionFactory == null) {
                connectionFactory = (ConnectionFactory)
                    new com.sun.messaging.ConnectionFactory();
            }

            // Provider specific code start.
            com.sun.messaging.ConnectionFactory cf =
                (com.sun.messaging.ConnectionFactoryconnectionFactory;
            cf.setProperty(
                com.sun.messaging.ConnectionConfiguration.imqConnectionType,
                "HTTP");
            cf.setProperty(
                com.sun.messaging.ConnectionConfiguration.imqConnectionURL,
                s);

            // Provider specific code end.
        }
        catch (JMSException e) {
            updateRxArea("initHTTPConnectionFactory : " + e.toString() "\n");
            e.printStackTrace();
            if (e.getLinkedException() != null)
                e.getLinkedException().printStackTrace();
        }
    }

    public void initTCPConnectionFactory(String h, String p) {
        try {
            if (connectionFactory == null) {
                connectionFactory = (ConnectionFactory)
                    new com.sun.messaging.ConnectionFactory();
            }

            // Provider specific code start.
            com.sun.messaging.ConnectionFactory cf =
                (com.sun.messaging.ConnectionFactoryconnectionFactory;
      // Set imqAddressList property.
            ((com.sun.messaging.ConnectionFactory)cf).setProperty(
                com.sun.messaging.ConnectionConfiguration.imqAddressList,
                new StringBuffer().append("mq://").append(h).append(
                    ":").append(p).append("/jms").toString());
            // Provider specific code end.
        }
        catch (JMSException e) {
            updateRxArea("initTCPConnectionFactory : " + e.toString() "\n");
            e.printStackTrace();
            if (e.getLinkedException() != null)
                e.getLinkedException().printStackTrace();
        }
    }

    public void initConnectionFactory(String a) {
        if (connectionFactory == null) {
            connectionFactory = (ConnectionFactory)
                new com.sun.messaging.ConnectionFactory();
        }

        try {
            // Provider specific code start.
            com.sun.messaging.ConnectionFactory cf =
                (com.sun.messaging.ConnectionFactoryconnectionFactory;
            cf.setProperty(
                com.sun.messaging.ConnectionConfiguration.imqAddressList,
                a);
            // Provider specific code end.
        }
        catch (JMSException e) {
            updateRxArea("initConnectionFactory : " + e.toString() "\n");
            e.printStackTrace();
            if (e.getLinkedException() != null)
                e.getLinkedException().printStackTrace();
        }
    }

    public void doConnect() {
        try {
            connection = connectionFactory.createConnection();
            connection.setExceptionListener(this);
            connection.start();

            session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
            topic = session.createTopic("MQChatAppletTopic");
            msgConsumer = session.createConsumer(topic);
            msgConsumer.setMessageListener(this);
            msgProducer = session.createProducer(topic);
            textMessage = session.createTextMessage();

            statusBar.setStatusLine("Connected");
            enableDisconnectButton();
        }
        catch (JMSException e) {
            updateRxArea("doConnect : " + e.toString() "\n");
            statusBar.setStatusLine("Unable to connect.");
            e.printStackTrace();
            if (e.getLinkedException() != null)
                e.getLinkedException().printStackTrace();
        }
    }

    public void doSend(String s) {
        if (msgProducer == null) {
            statusBar.setStatusLine("Not connected.");
            return;
        }

        try {
            textMessage.setText(s);
            msgProducer.send(textMessage);
        }
        catch (JMSException e) {
            updateRxArea("doSend : " + e.toString() "\n");
            e.printStackTrace();
        }
    }

    public void doDisconnect() {
        try {
            if (connection != null)
                connection.close();
        }
        catch (Exception e) {}

        connection = null;
        session = null;
        topic = null;
        msgConsumer = null;
        msgProducer = null;
        textMessage = null;

        enableConnectButton();
    }

    public void onException(JMSException e) {
        statusBar.setStatusLine("Connection lost : " + e.toString());
        doDisconnect();
    }

    public void onMessage(Message m) {
        try {
            if (instanceof TextMessage) {
                String s = ((TextMessagem).getText();
                updateRxArea(s);
            }
        }
        catch (JMSException e) {
            e.printStackTrace();
            updateRxArea("onMessage : " + e.toString() "\n");
        }
    }

    private void setConnectButton(String text) {
        connectButton.setText(text);
        connectButton.setActionCommand(text);
        connectButton.invalidate();
        connectButton.validate();
        mainPanel.repaint();
    }

    private javax.swing.border.Border createMyBorder(String title) {
        javax.swing.border.Border inner =
            BorderFactory.createLineBorder(Color.black);

        if (title != null)
            inner = BorderFactory.createTitledBorder(inner, title);

        javax.swing.border.Border outer =
            BorderFactory.createEmptyBorder(3333);

        return BorderFactory.createCompoundBorder(outer, inner);
    }

    public void cleanupAndExit() {
        destroy();
        System.exit(0);
    }

    public static MQApplet mq = null;
    public static void mainWindowClosed() {
        mq.cleanupAndExit();
    }

    public static void main(String []args) {
        JFrame f = new JFrame("MQApplet");
        f.setDefaultCloseOperation(f.DO_NOTHING_ON_CLOSE);
        f.addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent e) {
                mainWindowClosed();
            }
        });

        mq = new MQApplet();
        mq.enableExit();

        mq.init();
        mq.start();

        f.getContentPane().add("Center", mq);
        f.setSize(600600);
        f.show();
    }

    class StatusPanel extends JPanel {
        private JLabel label = null;

        public StatusPanel() {
            setLayout(new BorderLayout());
            setBorder(BorderFactory.createLoweredBevelBorder());
            label = new JLabel();

            int size = label.getFont().getSize();
            label.setFont(new Font("Serif", Font.PLAIN, size));
            add("West", label);

            setStatusLine("Ready");
        }

        public void setStatusLine(String statusLine) {
            if (statusLine == null)
                statusLine = "";

            label.setText(statusLine);
            invalidate();
            validate();
            repaint();
        }
    }
}

/*
 * EOF
 */

        
mqapplet.zip( 7 k)
Related examples in the same category
1. The mqping utility is similar to the Unix ping utility in some regards
2. This example illustrates how JMS can be used to create a simple chat application
3. The UniversalClient example is a basic 'client' application that uses the JMS 1.1 APIs
4. How to write a GUI application that uses a JMS QueueBrowser to browse the contents of a queue
5. This example is a simple JMS client application
6. Demonstrates a simple end-to-end "Hello World" JMS example that can be compiled and run with the Sun Java(tm) System Message Queue product
7. The BrokerMetrics example is a JMS application that monitors the Sun Java(tm) System Message Queue broker
8. The DestListMetrics example is a JMS application that monitors the destinations on a Sun Java(tm) System Message Queue broker
9. The DestMetrics example is a JMS application that monitors a destination on a Sun Java(tm) System Message Queue broker
10. The VMMetrics example is a JMS application that monitors the Java VM used by the Sun Java(tm) System Message Queue broker
11. 传输集群监控
12. The TopicSelectors class demonstrates the use of multiple subscribers and message selectors
13. A message will not be acknowledged until processing of it is complete
14. Reads a textfile, creates a BytesMessage from it, then reads the message
15. A durable subscription is active even when the subscriber is not active
16. Creates and then reads a StreamMessage and a BytesMessage
17. Creates and reads messages in all supported JMS message formats: BytesMessage, TextMessage, MapMessage, StreamMessage, and ObjectMessage
18. 使用邮件标题字段
19. Demonstrates that mutable objects are copied, not passed by reference, when you use them to create message objects
20. A simple implementation of a request/reply message exchange
21. 发送多封邮件到队列
22. Fetches one or more messages from a queue using synchronous message delivery
23. The simplest form of the publish/subscribe model: the producer publishes a message, and the consumer reads it using a synchronous receive
24. Demonstrates the use of transactions in a JMS application
25. Creates a Producer and a Consumer objects (Producer and Consumer classes are defined in this file)
26. Fetches one or more messages from a queue using asynchronous message delivery
27. The use of a message listener in the publish/subscribe model. The producer publishes several messages, and the consumer reads them asynchronously
www.java2java.com | Contact Us
Copyright 2010 - 2030 Java Source and Support. All rights reserved.
All other trademarks are property of their respective owners.