簡體   English   中英

如何在應用程序的所有實例之間共享相同的電子郵件會話?

[英]How to share the same email session between all instances of the application?

也許這個問題已經有了答案,但我找不到正確的答案。 我有一個基於 JSF 的 Web 應用程序,我想在該應用程序的所有實例之間共享相同的電子郵件會話,但我還沒有找到如何做到這一點。

我的問題是:

a) 我在想什么是愚蠢的? 每次我想發送新郵件時,我是否應該只創建一個新會話?

b) 如果 a 是假的,是否有適當的方法來做到這一點?

附加信息:我正在使用 PrimeFaces 4.0、Apache Tomcat 7.0.41 和 JDK 7。

編輯:我正在建立這樣的電子郵件連接(使用 sun 的 java 郵件)

    Properties datos = new Properties();
    datos.put("mail.smtp.host", "smtp.gmail.com");
    datos.setProperty("mail.smtp.starttls.enable", "true");
    datos.setProperty("mail.smtp.port", "587");
    datos.setProperty("mail.smtp.user", usuarioAutenticacion);
    datos.put("mail.smtp.timeout", 5000);
    System.out.println(usuarioAutenticacion + " - " + contrasenaAutenticacion);
    sesionCorreo = Session.getDefaultInstance(datos, null);
    sesionCorreo.setDebug(true);

    try {
        conexionCorreo = sesionCorreo.getTransport("smtp");
    } catch (NoSuchProviderException ex) {
        Logger.getLogger(NotificacionesManager.class.getName()).log(Level.SEVERE, null, ex);
    }
    try {
        conexionCorreo.connect(usuarioAutenticacion, contrasenaAutenticacion);

然后我繼續在隊列中發送消息,但我正在尋找一種方法,只設置一次該連接,然后在必要時開始在隊列中發送郵件。

Java EE 設計者希望您這樣做的方式是在服務器中配置 javax.mail.Session 對象。 這在Tomcat 7 JavaMail Sessions文檔中有所描述。

然后,您的托管 bean 應該能夠通過 @Resource 訪問會話:

class MyManagedBean {

    @Resource(name="mail/Session") // this name is defined by your configuration
    private Session mailSession;


    public void someBusinessMethod() {
         ...
         Message message = new MimeMessage(mailSession);
         // compose message
         ...
         Transport.send(message);
    }

}

如果您需要從非托管 bean 執行此操作,那么您可以使用 JNDI 獲取 Session 實例。 這在上面鏈接的文檔中有所描述。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM