1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.logging.log4j.core.net;
18
19 import javax.jms.JMSException;
20 import javax.jms.Queue;
21 import javax.jms.QueueConnection;
22 import javax.jms.QueueConnectionFactory;
23 import javax.jms.QueueReceiver;
24 import javax.jms.QueueSession;
25 import javax.jms.Session;
26 import javax.naming.Context;
27 import javax.naming.InitialContext;
28 import javax.naming.NamingException;
29 import java.io.BufferedReader;
30 import java.io.InputStreamReader;
31 import java.nio.charset.Charset;
32
33
34
35
36
37 public class JMSQueueReceiver extends AbstractJMSReceiver {
38
39
40
41
42
43
44
45
46 public JMSQueueReceiver(final String qcfBindingName, final String queueBindingName, final String username,
47 final String password) {
48
49 try {
50 final Context ctx = new InitialContext();
51 QueueConnectionFactory queueConnectionFactory;
52 queueConnectionFactory = (QueueConnectionFactory) lookup(ctx, qcfBindingName);
53 final QueueConnection queueConnection = queueConnectionFactory.createQueueConnection(username, password);
54 queueConnection.start();
55 final QueueSession queueSession = queueConnection.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
56 final Queue queue = (Queue) ctx.lookup(queueBindingName);
57 final QueueReceiver queueReceiver = queueSession.createReceiver(queue);
58 queueReceiver.setMessageListener(this);
59 } catch (final JMSException e) {
60 logger.error("Could not read JMS message.", e);
61 } catch (final NamingException e) {
62 logger.error("Could not read JMS message.", e);
63 } catch (final RuntimeException e) {
64 logger.error("Could not read JMS message.", e);
65 }
66 }
67
68
69
70
71
72
73 public static void main(final String[] args) throws Exception {
74 if (args.length != 4) {
75 usage("Wrong number of arguments.");
76 }
77
78 final String qcfBindingName = args[0];
79 final String queueBindingName = args[1];
80 final String username = args[2];
81 final String password = args[3];
82
83 new JMSQueueReceiver(qcfBindingName, queueBindingName, username, password);
84
85 final Charset enc = Charset.defaultCharset();
86 final BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in, enc));
87
88 System.out.println("Type \"exit\" to quit JMSQueueReceiver.");
89 while (true) {
90 final String s = stdin.readLine();
91 if (s.equalsIgnoreCase("exit")) {
92 System.out.println("Exiting. Kill the application if it does not exit "
93 + "due to daemon threads.");
94 return;
95 }
96 }
97 }
98
99
100 private static void usage(final String msg) {
101 System.err.println(msg);
102 System.err.println("Usage: java " + JMSQueueReceiver.class.getName()
103 + " QueueConnectionFactoryBindingName QueueBindingName username password");
104 System.exit(1);
105 }
106 }