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.Session;
21 import javax.jms.Topic;
22 import javax.jms.TopicConnection;
23 import javax.jms.TopicConnectionFactory;
24 import javax.jms.TopicSession;
25 import javax.jms.TopicSubscriber;
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 JMSTopicReceiver extends AbstractJMSReceiver {
37
38
39
40
41
42
43
44
45 public JMSTopicReceiver(final String tcfBindingName, final String topicBindingName, final String username,
46 final String password) {
47 try {
48 final Context ctx = new InitialContext();
49 TopicConnectionFactory topicConnectionFactory;
50 topicConnectionFactory = (TopicConnectionFactory) lookup(ctx, tcfBindingName);
51 final TopicConnection topicConnection = topicConnectionFactory.createTopicConnection(username, password);
52 topicConnection.start();
53 final TopicSession topicSession = topicConnection.createTopicSession(false, Session.AUTO_ACKNOWLEDGE);
54 final Topic topic = (Topic) ctx.lookup(topicBindingName);
55 final TopicSubscriber topicSubscriber = topicSession.createSubscriber(topic);
56 topicSubscriber.setMessageListener(this);
57 } catch (final JMSException e) {
58 logger.error("Could not read JMS message.", e);
59 } catch (final NamingException e) {
60 logger.error("Could not read JMS message.", e);
61 } catch (final RuntimeException e) {
62 logger.error("Could not read JMS message.", e);
63 }
64 }
65
66
67
68
69
70
71 public static void main(final String[] args) throws Exception {
72 if (args.length != 4) {
73 usage("Wrong number of arguments.");
74 }
75
76 final String tcfBindingName = args[0];
77 final String topicBindingName = args[1];
78 final String username = args[2];
79 final String password = args[3];
80
81 new JMSTopicReceiver(tcfBindingName, topicBindingName, username, password);
82
83 final BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in));
84
85 System.out.println("Type \"exit\" to quit JMSTopicReceiver.");
86 while (true) {
87 final String s = stdin.readLine();
88 if (s.equalsIgnoreCase("exit")) {
89 System.out.println("Exiting. Kill the application if it does not exit "
90 + "due to daemon threads.");
91 return;
92 }
93 }
94 }
95
96 private static void usage(final String msg) {
97 System.err.println(msg);
98 System.err.println("Usage: java " + JMSTopicReceiver.class.getName()
99 + " TopicConnectionFactoryBindingName TopicBindingName username password");
100 System.exit(1);
101 }
102 }