2010-12-08 178 views
3

我正在使用glassfish v3,其中通過管理控制檯創建了JavaMail會話。我想用這樣的郵件會話:將@Resource注入普通類

.... 
import javax.annotation.Resource; 
import javax.mail.*; 
import javax.mail.internet.*; 

public class Mailer { 

    MailGenerator mailGenerator; 
    @Resource(name = "mail/WMCMail") 
    private Session mailSession; 

    public Mailer(MailGenerator mailGenerator) { 
     this.mailGenerator = mailGenerator; 
    } 

    public void sendMixedMail(String recipient, String subject) { 
     try { 
      Message message = new MimeMessage(mailSession); 

      message.setRecipients(
       Message.RecipientType.TO, 
       InternetAddress.parse(recipient, false)); 
      message.setSubject(subject); 

      ...... 

      Transport.send(message); 

      logger.log(Level.INFO, "Mail sent to {0}.", recipient); 
     } catch (MessagingException ex) { 
      logger.log(Level.SEVERE, "Error in sending email to " + recipient, ex); 
     } 
    } 
} 

當我調用sendMixedMail方法時,我看到mailSession爲null。注入資源到普通類中是不可能的?當我說正常時,我的意思是一個不是託管bean或ejb的類。

回答

5

不,你不能爲普通的班級做到這一點。從SUN's J2EE injection page報價:

請記住,在Java EE 5平臺 容器可以處理注射 透明時,才使用 容器管理組件,例如 如EJB豆的Servlet和JavaServer Pages(JSP)技術標籤處理程序。

這是出於兩個原因。首先, 性能方面的考慮,一個 容器可以限制其搜索的 註釋只有它 管理組件,這些組件在 部署描述符定義,或者是 在特定的類路徑 地點訪問。其次,容器必須控制 組件的創建,以便能夠透明地執行 組件的注入。