1 package org.myorg.encconfig.ejb;
2
3 import java.util.Date;
4
5 import javax.ejb.EJBException;
6 import javax.jms.Connection;
7 import javax.jms.ConnectionFactory;
8 import javax.jms.JMSException;
9 import javax.jms.MessageProducer;
10 import javax.jms.Session;
11 import javax.jms.TextMessage;
12 import javax.jms.Topic;
13 import javax.naming.Context;
14 import javax.naming.NamingException;
15 import javax.persistence.EntityManager;
16
17 import org.myorg.encconfig.bo.AuditRecord;
18 import org.slf4j.Logger;
19
20 public abstract class AuditorBase {
21 private Logger log_;
22 private boolean publishJMS_;
23 private EntityManager em_;
24 private ConnectionFactory cf_;
25 private Topic topic_;
26
27 public void setLog(Logger log) { this.log_ = log; }
28 public void setEntityManager(EntityManager em) { this.em_ = em; }
29 public void setConnectionFactory(ConnectionFactory cf) { this.cf_ = cf; }
30 public void setTopic(Topic topic) { this.topic_ = topic; }
31 public void setPublishJMS(boolean publishJMS) {
32 this.publishJMS_ = publishJMS;
33 }
34 public int audit(String message) {
35 AuditRecord rec = new AuditRecord(new Date(), message);
36 int actions=0;
37 if (persistRecord(rec) != null) {
38 actions += 1;
39 }
40 if (publishJMS_ && cf_ != null) {
41 publishRecord(rec);
42 actions += 1;
43 }
44 return actions;
45 }
46
47 protected AuditRecord persistRecord(AuditRecord rec) {
48 if (em_!=null) {
49 em_.persist(rec);
50 log_.debug("message persisted:{}", rec);
51 return rec;
52 }
53 return null;
54 }
55
56
57 protected void publishRecord(AuditRecord rec) {
58 Connection connection=null;
59 Session session = null;
60 MessageProducer publisher = null;
61 try {
62 connection = cf_.createConnection();
63 session = connection.createSession(
64 false, Session.AUTO_ACKNOWLEDGE);
65 TextMessage msg = session.createTextMessage(rec.getMessage());
66 publisher = session.createProducer(topic_);
67 publisher.send(msg);
68 log_.debug("message sent:{}", msg);
69 } catch (JMSException ex) {
70 log_.error("error sending JMS message", ex);
71 throw new EJBException("error sending JMS message:"+ex);
72 } finally {
73 close(connection, session);
74 }
75 }
76
77 protected void close(Connection conn, Session session) {
78 try { if (session != null) { session.close(); } }
79 catch (JMSException ex) {log_.info("error closing session", ex); }
80 try { if (conn != null) { conn.close(); } }
81 catch (JMSException ex) {log_.info("error closing connection", ex); }
82 }
83 protected void close(Context jndi) {
84 try { if (jndi != null) { jndi.close(); } }
85 catch (NamingException ex) {log_.info("error closing jndi", ex); }
86 }
87
88 }