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
32
33
34
35
36 public class JMSQueueReceiver extends AbstractJMSReceiver {
37
38
39
40
41
42
43
44
45 public JMSQueueReceiver(final String qcfBindingName, final String queueBindingName, final String username,
46 final String password) {
47
48 try {
49 final Context ctx = new InitialContext();
50 QueueConnectionFactory queueConnectionFactory;
51 queueConnectionFactory = (QueueConnectionFactory) lookup(ctx, qcfBindingName);
52 final QueueConnection queueConnection = queueConnectionFactory.createQueueConnection(username, password);
53 queueConnection.start();
54 final QueueSession queueSession = queueConnection.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
55 final Queue queue = (Queue) ctx.lookup(queueBindingName);
56 final QueueReceiver queueReceiver = queueSession.createReceiver(queue);
57 queueReceiver.setMessageListener(this);
58 } catch (final JMSException e) {
59 logger.error("Could not read JMS message.", e);
60 } catch (final NamingException e) {
61 logger.error("Could not read JMS message.", e);
62 } catch (final RuntimeException e) {
63 logger.error("Could not read JMS message.", e);
64 }
65 }
66
67
68
69
70
71
72 public static void main(final String[] args) throws Exception {
73 if (args.length != 4) {
74 usage("Wrong number of arguments.");
75 }
76
77 final String qcfBindingName = args[0];
78 final String queueBindingName = args[1];
79 final String username = args[2];
80 final String password = args[3];
81
82 new JMSQueueReceiver(qcfBindingName, queueBindingName, username, password);
83
84 final BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in));
85
86 System.out.println("Type \"exit\" to quit JMSQueueReceiver.");
87 while (true) {
88 final String s = stdin.readLine();
89 if (s.equalsIgnoreCase("exit")) {
90 System.out.println("Exiting. Kill the application if it does not exit "
91 + "due to daemon threads.");
92 return;
93 }
94 }
95 }
96
97
98 private static void usage(final String msg) {
99 System.err.println(msg);
100 System.err.println("Usage: java " + JMSQueueReceiver.class.getName()
101 + " QueueConnectionFactoryBindingName QueueBindingName username password");
102 System.exit(1);
103 }
104 }