我已经在我的JSF应用程序的支持bean中设置了一个JavaMail会话,结果发送电子邮件相当容易。但是,根据网络状况,可能需要相当长的时间。 Transport.send()方法将阻止调用线程,直到发送电子邮件或协议以某种方式失败。
我的问题是:考虑到许多用户同时访问服务器的可能性,在JSF支持bean中可以做到这一点吗?
我可以创建一个应用程序范围的工作线程,它可以在BlockingQueue下工作,以处理后台的所有电子邮件。这是正确的做法吗?
答案 0 :(得分:2)
一个可能性是让ejb生成jms-messages,一个mdb以异步方式使用消息并调用Transport.send()
看一下这个例子:http://faeddalberto.blogspot.com/2011/03/sending-email-with-ejb-3-mdb-message.html
答案 1 :(得分:1)
是的,最好将使用网络的任何内容(因此可能无法预测地延迟)移动到单独的线程中。