import javax.jms.Connection;
import javax.jms.MessageConsumer;
import javax.jms.Session;
import javax.jms.Topic;
import javax.jms.TopicConnectionFactory;
import javax.naming.Context;
import javax.naming.InitialContext;
/**
*
* @author pavit
*/
public class JMSConnector implements Runnable {
public void run() {
try {
Context context = new InitialContext();
TopicConnectionFactory factory = (TopicConnectionFactory) context.lookup("jmstopicFactory");
Connection connection = factory.createConnection();
Topic topic = (javax.jms.Topic) context.lookup("jmstopic");
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
MessageConsumer consumer = session.createConsumer(topic);
MessageListenerImpl messageListener = new MessageListenerImpl();
consumer.setMessageListener(messageListener);
connection.start();
connection.start();
} catch (Exception e) {
e.printStackTrace();
}
}
}
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;
/**
*
* @author pavit
*/
@WebListener
public class JMSContextListener implements ServletContextListener {
@Override
public void contextInitialized(ServletContextEvent sce) {
Thread thread = new Thread(new JMSConnector());
thread.start();
}
@Override
public void contextDestroyed(ServletContextEvent sce) {
}
}
package lk.java;
import java.io.IOException;
import java.util.Collections;
import java.util.HashSet;
import java.util.Set;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.TextMessage;
import javax.websocket.OnClose;
import javax.websocket.OnMessage;
import javax.websocket.OnOpen;
import javax.websocket.Session;
import javax.websocket.server.ServerEndpoint;
/**
*
* @author pavith
*/
@ServerEndpoint("/endpoint")
public class MessageListenerImpl implements MessageListener {
private static Set<Session> peers = Collections.synchronizedSet(new HashSet<Session>());
@OnMessage
public String onMessage(String message) {
System.out.println(message);
return null;
}
@OnOpen
public void onOpen(Session peer) throws IOException {
peers.add(peer);
// broadcast("Socket Connection is Open for Session " + peer.getId());
}
@OnClose
public void onClose(Session peer) {
peers.remove(peer);
}
private static void broadcast(String message) throws IOException {
peers.forEach((t) -> {
try {
t.getBasicRemote().sendText(message);
} catch (IOException ex) {
Logger.getLogger(MessageListenerImpl.class.getName()).log(Level.SEVERE, null, ex);
}
});
}
/**
* On JMS Message
*
* @param message
*/
@Override
public void onMessage(Message message) {
try {
TextMessage msg = (TextMessage) message;
System.out.println("Servlet Context Thread : " + msg.getText());
MessageListenerImpl.broadcast(msg.getText());
} catch (JMSException | IOException ex) {
Logger.getLogger(MessageListenerImpl.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
package lk.java;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.annotation.Resource;
import javax.inject.Inject;
import javax.jms.Connection;
import javax.jms.JMSConnectionFactory;
import javax.jms.JMSContext;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageProducer;
import javax.jms.Session;
import javax.jms.TextMessage;
import javax.jms.Topic;
import javax.jms.TopicConnectionFactory;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
*
* @author pavit
*/
@WebServlet(name = "SendMessages", urlPatterns = {"/SendMessages"})
public class SendMessages extends HttpServlet {
// @Resource(mappedName = "jmstopic")
// private Topic topic;
//
// @Inject
// @JMSConnectionFactory("jmstopicFactory")
// private JMSContext context;
@Resource(mappedName = "jmstopic")
private Topic topic;
@Resource(mappedName = "jmstopicFactory")
private TopicConnectionFactory topicFactory;
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String user = request.getParameter("user");
String parameter = request.getParameter("message");
System.out.println(user + ":" + parameter);
try {
this.sendJMSMessageToJmstopic(user + ":" + parameter);
} catch (JMSException ex) {
Logger.getLogger(SendMessages.class.getName()).log(Level.SEVERE, null, ex);
}
}
private Message createJMSMessageForjmstopic(Session session, Object messageData) throws JMSException {
// TODO create and populate message to send
TextMessage tm = session.createTextMessage();
tm.setText(messageData.toString());
return tm;
}
private void sendJMSMessageToJmstopic(Object messageData) throws JMSException {
Connection connection = null;
Session session = null;
try {
connection = topicFactory.createConnection();
session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
MessageProducer messageProducer = session.createProducer(topic);
messageProducer.send(createJMSMessageForjmstopic(session, messageData));
} finally {
if (session != null) {
try {
session.close();
} catch (JMSException e) {
Logger.getLogger(this.getClass().getName()).log(Level.WARNING, "Cannot close session", e);
}
}
if (connection != null) {
connection.close();
}
}
}
}