Java 如何在应用程序的所有实例之间共享相同的电子邮件会话?

Java 如何在应用程序的所有实例之间共享相同的电子邮件会话?,java,session,jakarta-ee,jakarta-mail,Java,Session,Jakarta Ee,Jakarta Mail,也许这个问题已经得到了回答,但我找不到正确的答案。 我有一个基于JSF的web应用程序,我想在该应用程序的所有实例之间共享相同的电子邮件会话,但我还没有找到如何做到这一点 我的问题是: a) 我在想什么是愚蠢的?我是否应该在每次发送新邮件时创建一个新会话 b) 如果a是假的,有没有合适的方法 其他信息:我正在使用PrimeFaces4.0、ApacheTomcat7.0.41和JDK7 编辑:我正在建立这样的电子邮件连接(使用sun的java mail) 然后我继续在队列中发送消息,但我正在寻找

也许这个问题已经得到了回答,但我找不到正确的答案。 我有一个基于JSF的web应用程序,我想在该应用程序的所有实例之间共享相同的电子邮件会话,但我还没有找到如何做到这一点

我的问题是:

a) 我在想什么是愚蠢的?我是否应该在每次发送新邮件时创建一个新会话

b) 如果a是假的,有没有合适的方法

其他信息:我正在使用PrimeFaces4.0、ApacheTomcat7.0.41和JDK7

编辑:我正在建立这样的电子邮件连接(使用sun的java mail)


然后我继续在队列中发送消息,但我正在寻找一种方法,只需设置一次连接,然后在必要时开始在队列中发送邮件。

Java EE设计器希望您这样做的方式是在服务器中配置javax.mail.Session对象。文档中对此进行了描述

然后,您的托管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获取会话实例。这在上面链接的文档中有描述。

电子邮件会话是什么意思?你有一些代码来解释吗?完成了,对不起,我觉得问题太简单了,不需要代码。你说的多个实例是什么意思?您的意思是将应用程序的多个实例部署到前面有负载平衡器的不同容器中,还是什么?也就是说,你到底在“分享”什么,你希望通过这样做实现什么?
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);
    }

}