1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.openehealth.ipf.commons.audit.queue;
17
18 import org.openehealth.ipf.commons.audit.AuditContext;
19 import org.slf4j.Logger;
20 import org.slf4j.LoggerFactory;
21
22 import javax.jms.*;
23
24 import static java.util.Objects.requireNonNull;
25
26
27
28
29
30
31
32
33
34
35
36
37
38 public class JmsAuditMessageQueue extends AbstractAuditMessageQueue {
39
40 private static final Logger LOG = LoggerFactory.getLogger(JmsAuditMessageQueue.class);
41
42 private final ConnectionFactory connectionFactory;
43 private final String queueName;
44 private final String userName;
45 private final String password;
46
47
48
49
50
51
52
53
54 public JmsAuditMessageQueue(ConnectionFactory connectionFactory, String queueName,
55 String userName, String password) {
56 this.connectionFactory = requireNonNull(connectionFactory, "ConnectionFactory must not be null");
57 this.queueName = queueName != null ? queueName : "atna-audit";
58 this.userName = userName;
59 this.password = password;
60 }
61
62
63 @Override
64 protected void handle(AuditContext auditContext, String... auditRecords) {
65 try {
66 Connection connection = connectionFactory.createConnection(userName, password);
67 connection.start();
68 try {
69 Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
70 Queue queue = session.createQueue(queueName);
71 MessageProducer producer = session.createProducer(queue);
72 for (String auditMessage : auditRecords) {
73 TextMessage message = session.createTextMessage(auditMessage);
74 producer.send(message);
75 }
76 } finally {
77 if (connection != null) connection.close();
78 }
79 } catch (Exception e) {
80 auditContext.getAuditExceptionHandler().handleException(auditContext, e, auditRecords);
81 }
82 }
83
84 @Override
85 public void flush() {
86
87 }
88
89 }