distributedqueuedemo.java

来自「JGRoups源码」· Java 代码 · 共 315 行

JAVA
315
字号
// $Id: DistributedQueueDemo.java,v 1.6 2004/09/23 16:29:35 belaban Exp $package org.jgroups.demos;import org.jgroups.ChannelException;import org.jgroups.ChannelFactory;import org.jgroups.JChannelFactory;import org.jgroups.blocks.DistributedQueue;import javax.swing.*;import java.awt.*;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.WindowEvent;import java.awt.event.WindowListener;import java.util.Collection;import java.util.Vector;/** * Uses the DistributedQueue building block. The latter subclasses org.jgroups.util.Queue and overrides * the methods that modify the queue (e.g. add()). Those methods are multicast to the group, whereas * read-only methods such as peek() use the local copy. A DistributedQueue is created given the name * of a group; all queues with the same name find each other and form a group. * @author Romuald du Song */public class DistributedQueueDemo extends Frame implements WindowListener, ActionListener,                                                           DistributedQueue.Notification{    DistributedQueue h = null;    final JButton add = new JButton("Add");    final JButton quit = new JButton("Quit");    final JButton get_all = new JButton("All");    final JButton remove = new JButton("Remove");    final JLabel value = new JLabel("Value");    final JLabel err_msg = new JLabel("Error");    final JTextField value_field = new JTextField();    final java.awt.List listbox = new java.awt.List();    final Font default_font = new Font("Helvetica", Font.PLAIN, 12);    public DistributedQueueDemo()    {        super();        addWindowListener(this);    }    private void showMsg(String msg)    {        err_msg.setText(msg);        err_msg.setVisible(true);    }    private void clearMsg()    {        err_msg.setVisible(false);    }    private void removeItem()    {        h.remove();    }    private void showAll()    {        if (listbox.getItemCount() > 0)        {            listbox.removeAll();        }        if (h.size() == 0)        {            return;        }        clearMsg();        String key;        Vector v = h.getContents();        for (int i = 0; i < v.size(); i++)        {            listbox.add((String)v.elementAt(i));        }    }    public void start(String groupname, ChannelFactory factory, String props)               throws ChannelException    {        h = new DistributedQueue(groupname, factory, props, 10000);        h.addNotifier(this);        setLayout(null);        setSize(400, 300);        setFont(default_font);        value.setBounds(new Rectangle(10, 60, 60, 30));        value_field.setBounds(new Rectangle(100, 60, 100, 30));        listbox.setBounds(new Rectangle(210, 30, 150, 160));        err_msg.setBounds(new Rectangle(10, 200, 350, 30));        err_msg.setFont(new Font("Helvetica", Font.ITALIC, 12));        err_msg.setForeground(Color.red);        err_msg.setVisible(false);        add.setBounds(new Rectangle(60, 250, 60, 30));        quit.setBounds(new Rectangle(130, 250, 70, 30));        get_all.setBounds(new Rectangle(210, 250, 60, 30));        remove.setBounds(new Rectangle(280, 250, 90, 30));        add.addActionListener(this);        quit.addActionListener(this);        get_all.addActionListener(this);        remove.addActionListener(this);        add(value);        add(value_field);        add(err_msg);        add(add);        add(quit);        add(get_all);        add(remove);        add(listbox);        setTitle("DistributedQueue Demo");        showAll();        pack();        setVisible(true);        /*                 new Thread() {                     public void run() {                         System.out.println("-- sleeping");                         Util.sleep(10000);                         for(int i=0; i < 10; i++) {                             System.out.println("-- add()");                             h.add("Bela#" + i);                         }                         while(true) {                             Util.sleep(500);                             try                            {                                System.out.println(h.remove());                            }                            catch (QueueClosedException e)                            {                                e.printStackTrace();                            }                         }                     }                 }.start();        */    }    public void windowActivated(WindowEvent e)    {    }    public void windowClosed(WindowEvent e)    {    }    public void windowClosing(WindowEvent e)    {        System.exit(0);    }    public void windowDeactivated(WindowEvent e)    {    }    public void windowDeiconified(WindowEvent e)    {    }    public void windowIconified(WindowEvent e)    {    }    public void windowOpened(WindowEvent e)    {    }    public void actionPerformed(ActionEvent e)    {        String command = e.getActionCommand();        try        {            if (command == "Add")            {                String value_name = value_field.getText();                if ((value_name == null) || (value_name.length() == 0))                {                    showMsg("Value is empty !");                    return;                }                showMsg("Adding value " + value_name + ':');                h.add(value_name);            }            else if (command == "All")            {                showAll();            }            else if (command == "Quit")            {                setVisible(false);                System.exit(0);            }            else if (command == "Remove")            {                removeItem();            }            else            {                System.out.println("Unknown action");            }        }        catch (Exception ex)        {            value_field.setText("");            showMsg(ex.toString());        }    }    public void entryAdd(Object value)    {        showAll();    }    public void entryRemoved(Object key)    {        showAll();    }    public void viewChange(Vector joined, Vector left)    {        System.out.println("New members: " + joined + ", left members: " + left);    }    public void contentsSet(Collection new_entries)    {        System.out.println("Contents Set:" + new_entries);    }    public void contentsCleared()    {        System.out.println("Contents cleared()");    }    public static void main(String[] args)    {        String groupname = "QueueDemo";        DistributedQueueDemo client = new DistributedQueueDemo();        ChannelFactory factory = new JChannelFactory();        String arg;        String next_arg;        boolean trace = false;        boolean persist = false;        String props =            "UDP(mcast_addr=228.8.8.8;mcast_port=45566;ip_ttl=32;" +            "mcast_send_buf_size=150000;mcast_recv_buf_size=80000):" + "PING(timeout=2000;num_initial_members=3):" +            "MERGE2(min_interval=5000;max_interval=10000):" + "FD_SOCK:" + "VERIFY_SUSPECT(timeout=1500):" +            "UNICAST(timeout=5000):" + "FRAG(frag_size=8192;down_thread=false;up_thread=false):" +            "TOTAL_TOKEN(block_sending=50;unblock_sending=10):" +            "pbcast.GMS(join_timeout=5000;join_retry_timeout=2000;" + "shun=false;print_local_addr=true):" +            "STATE_TRANSFER:" + "QUEUE";        try        {            for (int i = 0; i < args.length; i++)            {                arg = args[i];                if ("-trace".equals(arg))                {                    trace = true;                    continue;                }                if ("-groupname".equals(args[i]))                {                    groupname = args[++i];                    continue;                }                help();                return;            }        }        catch (Exception e)        {            help();            return;        }        try        {            client.start(groupname, factory, props);        }        catch (Throwable t)        {            t.printStackTrace();        }    }    static void help()    {        System.out.println("DistributedQueueDemo [-help]");    }}

⌨️ 快捷键说明

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