01 package com.bea.medrec.mail;
02
03 import com.bea.medrec.utils.JNDINames;
04 import com.bea.medrec.utils.MedRecLog4jFactory;
05 import com.bea.medrec.value.Mail;
06 import javax.jms.JMSException;
07 import javax.jms.MessageListener;
08 import javax.jms.ObjectMessage;
09 import javax.mail.MessagingException;
10 import javax.mail.Transport;
11 import javax.mail.internet.InternetAddress;
12 import javax.mail.internet.MimeMessage;
13 import javax.naming.InitialContext;
14 import javax.naming.NamingException;
15 import org.apache.log4j.Logger;
16 import weblogic.ejb.GenericMessageDrivenBean;
17 import weblogic.ejbgen.*;
18
19 /**
20 * <p>Handles the flow of outgoing mail messages.</p>
21 *
22 * @author Copyright (c) 2005 by BEA Systems. All Rights Reserved.
23 */
24 @EnvEntries({
25 @EnvEntry(name = "sendmailflag",
26 type = "java.lang.Boolean",
27 value = "false")
28 })
29 @MessageDriven(ejbName = "MailBean",
30 destinationJndiName = "jms/MAIL_MDB_QUEUE",
31 destinationType = "javax.jms.Queue",
32 initialBeansInFreePool = "0",
33 maxBeansInFreePool = "10",
34 defaultTransaction = MessageDriven.DefaultTransaction.REQUIRED)
35 @ResourceEnvRefs({
36 @ResourceEnvRef(name = "jms/MAIL_MDB_QUEUE",
37 type = "javax.jms.Queue",
38 jndiName = "jms/MAIL_MDB_QUEUE")
39 })
40 public class MailEJB
41 extends GenericMessageDrivenBean implements MessageListener {
42
43 // Attributes
44 private static Logger logger =
45 MedRecLog4jFactory.getLogger(MailEJB.class.getName());
46 private boolean mailEnabled = false;
47 private javax.mail.Session session = null;
48
49 public void setMessageDrivenContext() {
50 try {
51 InitialContext ic = new InitialContext();
52 session = (javax.mail.Session) ic.lookup(JNDINames.MAIL_SESSION);
53 Boolean sendMailBoolean = (Boolean) ic.lookup("sendmailflag");
54 if (sendMailBoolean != null)
55 mailEnabled = sendMailBoolean.booleanValue();
56 } catch (NamingException ne) {
57 logger.debug(ne);
58 }
59 }
60
61 public void onMessage(javax.jms.Message msg) {
62 logger.debug("Message from mail queue: " +
63 msg);
64 ObjectMessage message = (ObjectMessage) msg;
65 Mail mail = null;
66 try {
67 mail = (Mail) message.getObject();
68 } catch (JMSException je) {
69 logger.error("Unable to obtain mail message from queue");
70 getMessageDrivenContext().setRollbackOnly();
71 }
72 if (mail != null && mailEnabled) {
73 try {
74 javax.mail.Message mailMessage = new MimeMessage(session);
75 mailMessage.setFrom(new InternetAddress(mail.getFrom()));
76 mailMessage.setRecipient(javax.mail.Message.RecipientType.TO,
77 new InternetAddress(mail.getTo()));
78 mailMessage.setSubject(mail.getSubject());
79 mailMessage.setContent(mail.getMessage(), "text/html");
80 mailMessage.setSentDate(new java.util.Date());
81 Transport.send(mailMessage);
82 } catch (MessagingException me) {
83 logger.info(me);
84 getMessageDrivenContext().setRollbackOnly();
85 } catch (Exception ex) {
86 logger.error("Unable to mail: \n" +
87 mail.toString(), ex);
88 }
89 } else {
90 logger.info("Mail turned OFF. Please edit 'sendmailflag' " +
91 "in MailEJB.ejb to enable.");
92 }
93 }
94 }
|