我使用的是glassfish v3,我在其中通过管理控制台创建了JavaMail会话。我想这样使用Mail会话:

....
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。是否不可能将Resource注入普通类?当我说正常时,我指的是不是托管bean或ejb之类的类。

最佳答案

不,您不能在普通班上那样做。引用SUN's J2EE injection page:

请记住,Java EE 5平台
容器可以处理注射
仅在使用时透明
在容器管理的组件上,例如
作为EJB bean,Servlet和JavaServer
页面(JSP)技术标签处理程序。

这有两个原因。首先,
性能方面的考虑
容器可以限制其搜索
仅对组件进行注释
管理,这些定义在
部署描述符或
在特定的类路径中可访问
位置。二,容器必须
可以控制
能够透明的组件
执行注入
零件。

08-06 06:32