MailEJB.ejb
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.Sessionic.lookup(JNDINames.MAIL_SESSION);
54       Boolean sendMailBoolean = (Booleanic.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 = (ObjectMessagemsg;
66     Mail mail = null;
67     try {
68       mail = (Mailmessage.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 }