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