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