/*
* Copyright 2002-2009 the original author or authors.
*
* Licensed 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.springframework.flex.samples.jmschat;
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.jms.Connection;
import javax.jms.DeliveryMode;
import javax.jms.JMSException;
import javax.jms.MapMessage;
import javax.jms.Message;
import javax.jms.MessageConsumer;
import javax.jms.MessageListener;
import javax.jms.MessageProducer;
import javax.jms.Session;
import javax.jms.Topic;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import org.apache.activemq.ActiveMQConnectionFactory;
import org.apache.activemq.command.ActiveMQMapMessage;
/**
*
* @author Christophe Coenraets
* @author Jeremy Grelle
*/
public class JMSChat implements MessageListener, ActionListener {
private final String url = "tcp://localhost:61616";
private Connection connection;
private Session session;
private Topic topic;
private MessageProducer producer;
private final JTextField tfUser;
private final JTextField tfMessage;
private final JTextArea taChat;
public static void main(String args[]) {
new JMSChat();
}
public JMSChat() {
try {
ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory(this.url);
this.connection = factory.createConnection();
this.session = this.connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
this.topic = this.session.createTopic("sampletopic.flex.jms.chat");
MessageConsumer consumer = this.session.createConsumer(this.topic);
consumer.setMessageListener(this);
this.producer = this.session.createProducer(this.topic);
this.producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
this.connection.start();
} catch (JMSException e) {
e.printStackTrace();
}
// Build user interface
JFrame frame = new JFrame("JMS Chat");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.taChat = new JTextArea();
frame.getContentPane().add(this.taChat, BorderLayout.CENTER);
Box north = new Box(BoxLayout.X_AXIS);
north.add(new JLabel("User Name:"));
this.tfUser = new JTextField();
north.add(this.tfUser);
frame.getContentPane().add(north, BorderLayout.NORTH);
Box south = new Box(BoxLayout.X_AXIS);
south.add(new JLabel("Message:"));
this.tfMessage = new JTextField();
south.add(this.tfMessage);
JButton btSend = new JButton("Send");
btSend.addActionListener(this);
south.add(btSend);
frame.getContentPane().add(south, BorderLayout.SOUTH);
int width = 300;
int height = 300;
frame.setSize(width, height);
frame.setVisible(true);
}
public void onMessage(Message object) {
try {
ActiveMQMapMessage message = (ActiveMQMapMessage) object;
String userId = message.getString("userId");
String msg = message.getString("chatMessage");
this.taChat.append(userId + ": " + msg + "\n");
} catch (JMSException e) {
e.printStackTrace();
}
}
public void actionPerformed(ActionEvent event) {
try {
MapMessage message = this.session.createMapMessage();
message.setString("userId", this.tfUser.getText());
message.setString("chatMessage", this.tfMessage.getText());
this.producer.send(message);
} catch (JMSException e) {
e.printStackTrace();
}
}
}