/*
* Copyright 2009 Red Hat, Inc.
* Red Hat licenses this file to you under the Apache License, version
* 2.0 (the "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
* http://www.apache.org/licenses/LICENSE-2.0
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
* implied. See the License for the specific language governing
* permissions and limitations under the License.
*/
package org.hornetq.jms.example;
import java.awt.Color;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageConsumer;
import javax.jms.MessageListener;
import javax.jms.MessageProducer;
import javax.jms.Session;
import javax.jms.TextMessage;
import javax.swing.BorderFactory;
import javax.swing.JApplet;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.SwingConstants;
import javax.swing.SwingUtilities;
import org.hornetq.api.core.TransportConfiguration;
import org.hornetq.api.core.client.ClientSessionFactory;
import org.hornetq.api.core.client.HornetQClient;
import org.hornetq.api.jms.HornetQJMSClient;
import org.hornetq.core.remoting.impl.netty.NettyConnectorFactory;
/**
* A AppletExample
*
* @author <a href="mailto:jmesnil@redaht.com>Jeff Mesnil</a>
*
*
*/
public class AppletExample extends JApplet implements ActionListener
{
// Constants -----------------------------------------------------
// Attributes ----------------------------------------------------
// Static --------------------------------------------------------
// Constructors --------------------------------------------------
/**
*
*/
private static final long serialVersionUID = -2129589098734805722L;
private Destination destination;
private Connection connection;
private MessageProducer producer;
private MessageConsumer consumer;
private JTextArea display;
private JButton sendButton;
private Session session;
@Override
public void init()
{
super.init();
try
{
SwingUtilities.invokeAndWait(new Runnable()
{
public void run()
{
createGUI();
}
});
}
catch (Exception e)
{
System.err.println("createGUI didn't successfully complete");
}
Map<String, Object> params = new HashMap<String, Object>();
TransportConfiguration connector = new TransportConfiguration(NettyConnectorFactory.class.getName(), params);
ClientSessionFactory sf = HornetQClient.createClientSessionFactory(connector);
ConnectionFactory cf = HornetQJMSClient.createConnectionFactory(sf);
destination = HornetQJMSClient.createTopic("exampleTopic");
try
{
connection = cf.createConnection();
session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
producer = session.createProducer(destination);
consumer = session.createConsumer(destination);
consumer.setMessageListener(new MessageListener()
{
public void onMessage(final Message msg)
{
try
{
SwingUtilities.invokeAndWait(new Runnable()
{
public void run()
{
try
{
display.setText(display.getText() + "\n" + ((TextMessage)msg).getText());
}
catch (JMSException e)
{
e.printStackTrace();
}
}
});
}
catch (Exception e)
{
e.printStackTrace();
}
}
});
}
catch (JMSException e)
{
e.printStackTrace();
}
}
@Override
public void start()
{
super.start();
try
{
connection.start();
}
catch (JMSException e)
{
e.printStackTrace();
}
}
@Override
public void stop()
{
System.out.println("close connection");
if (connection != null)
{
try
{
connection.close();
}
catch (JMSException e)
{
e.printStackTrace();
}
}
super.stop();
}
// Public --------------------------------------------------------
public static void main(final String[] args)
{
final AppletExample applet = new AppletExample();
applet.init();
JFrame frame = new JFrame("Applet Example");
frame.getContentPane().add(applet);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);
applet.start();
Runtime.getRuntime().addShutdownHook(new Thread()
{
@Override
public void run()
{
applet.stop();
}
});
}
public void actionPerformed(final ActionEvent e)
{
try
{
producer.send(session.createTextMessage(new Date().toString()));
}
catch (JMSException e1)
{
e1.printStackTrace();
}
}
// Package protected ---------------------------------------------
// Protected -----------------------------------------------------
// Private -------------------------------------------------------
private void createGUI()
{
JPanel contentPane = new JPanel(new GridBagLayout());
GridBagConstraints c = new GridBagConstraints();
int numColumns = 3;
JLabel l1 = new JLabel("Received Messages:", SwingConstants.CENTER);
c.gridx = 0;
c.gridy = 0;
c.anchor = GridBagConstraints.SOUTH;
c.gridwidth = numColumns;
contentPane.add(l1, c);
display = new JTextArea(5, 20);
JScrollPane scrollPane = new JScrollPane(display);
display.setEditable(false);
display.setForeground(Color.gray);
c.gridy = 1;
c.gridwidth = numColumns;
c.anchor = GridBagConstraints.CENTER;
c.weighty = 1.0;
c.fill = GridBagConstraints.BOTH;
contentPane.add(scrollPane, c);
sendButton = new JButton("Send");
c.gridy = 2;
c.gridwidth = 1;
c.anchor = GridBagConstraints.SOUTH;
c.weighty = 0.0;
c.fill = GridBagConstraints.NONE;
contentPane.add(sendButton, c);
sendButton.addActionListener(this);
JButton clearButton = new JButton("Clear");
c.gridx = 2;
c.weightx = 0.0;
c.anchor = GridBagConstraints.SOUTHEAST;
c.fill = GridBagConstraints.NONE;
contentPane.add(clearButton, c);
clearButton.addActionListener(new ActionListener()
{
public void actionPerformed(final ActionEvent e)
{
display.setText("");
}
});
// Finish setting up the content pane and its border.
contentPane.setBorder(BorderFactory.createCompoundBorder(BorderFactory.createLineBorder(Color.black),
BorderFactory.createEmptyBorder(5, 20, 5, 10)));
setContentPane(contentPane);
}
// Inner classes -------------------------------------------------
}