forked from leuchter/VS_LET
118 lines
3.3 KiB
Java
118 lines
3.3 KiB
Java
package vs;
|
|
|
|
import jakarta.jms.Connection;
|
|
import jakarta.jms.ConnectionFactory;
|
|
import jakarta.jms.JMSException;
|
|
import jakarta.jms.Message;
|
|
import jakarta.jms.MessageConsumer;
|
|
import jakarta.jms.MessageProducer;
|
|
import jakarta.jms.Queue;
|
|
import jakarta.jms.Session;
|
|
import jakarta.jms.TextMessage;
|
|
import javax.naming.Context;
|
|
import javax.naming.InitialContext;
|
|
import javax.naming.NamingException;
|
|
|
|
/**
|
|
* requester node for the echo service
|
|
*
|
|
* @author Sandro Leuchter
|
|
*
|
|
*/
|
|
public class EchoRequesterNode {
|
|
private Connection connection;
|
|
private Session session;
|
|
private MessageProducer producer;
|
|
private MessageConsumer consumer;
|
|
private Queue replyQueue;
|
|
|
|
/**
|
|
* constructor, establishes and starts connection to JMS provider specified in
|
|
* JNDI (via jndi.properties), afterwards producer and consumer are ready
|
|
*
|
|
* @throws NamingException JNDI exceptions
|
|
* @throws JMSException JMS exceptions
|
|
*/
|
|
public EchoRequesterNode() throws NamingException, JMSException {
|
|
Context ctx = new InitialContext();
|
|
ConnectionFactory factory = (ConnectionFactory) ctx.lookup("ConnectionFactory");
|
|
this.connection = factory.createConnection();
|
|
this.session = this.connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
|
|
Queue queue = (Queue) ctx.lookup(Conf.QUEUE);
|
|
this.producer = this.session.createProducer(queue);
|
|
this.replyQueue = this.session.createTemporaryQueue();
|
|
this.consumer = this.session.createConsumer(this.replyQueue);
|
|
this.connection.start();
|
|
}
|
|
|
|
/**
|
|
* synchronously receives the TextMessages in an infinite loop and prints
|
|
* payload text to StdOut
|
|
*
|
|
* @see jakarta.jms.TextMessage
|
|
* @throws JMSException JMS exceptions
|
|
*/
|
|
public void receiveAndPrintMessages() throws JMSException {
|
|
Message request;
|
|
while ((request = this.consumer.receive()) != null) {
|
|
try {
|
|
if (request instanceof TextMessage) {
|
|
TextMessage requestText = (TextMessage) request;
|
|
String messageText = requestText.getText();
|
|
System.out.println("empfangen: " + messageText);
|
|
}
|
|
} catch (JMSException e) {
|
|
System.err.println(e);
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* creates TextMessage for JMS provider with temporary reply queue set and sends
|
|
* it to Destination of producer, which is configured in Conf.QUEUE
|
|
*
|
|
* @param text text to be send
|
|
* @throws JMSException JMS exceptions
|
|
*/
|
|
public void sendMessage(String text) throws JMSException {
|
|
TextMessage message = this.session.createTextMessage();
|
|
message.setText(text);
|
|
message.setJMSReplyTo(this.replyQueue);
|
|
this.producer.send(message);
|
|
}
|
|
|
|
/**
|
|
* main routine and starting point of program
|
|
*
|
|
* @param args[0] text to be send to echo service replier
|
|
*/
|
|
public static void main(String[] args) {
|
|
String text = args[0];
|
|
EchoRequesterNode node = null;
|
|
try {
|
|
node = new EchoRequesterNode();
|
|
node.sendMessage(text);
|
|
node.receiveAndPrintMessages();
|
|
} catch (NamingException | JMSException e) {
|
|
System.err.println(e);
|
|
} finally {
|
|
try {
|
|
if ((node != null) && (node.producer != null)) {
|
|
node.producer.close();
|
|
}
|
|
if ((node != null) && (node.consumer != null)) {
|
|
node.consumer.close();
|
|
}
|
|
if ((node != null) && (node.session != null)) {
|
|
node.session.close();
|
|
}
|
|
if ((node != null) && (node.connection != null)) {
|
|
node.connection.close();
|
|
}
|
|
} catch (JMSException e) {
|
|
System.err.println(e);
|
|
}
|
|
}
|
|
}
|
|
}
|