我在应用小型图书馆使用wildfly电子邮件资源发送电子邮件时遇到了一些问题 带库的想法是提供单例提供异步方法来发送电子邮件。 简短的服务看起来像
@Singleton
public class MailService {
private static final String MIME_TYPE = "text/html; charset=utf-8";
private static final Logger LOG = Logger.getLogger(MailService.class.getName());
@Inject
private Session session;
@Asynchronous
public void sendEmail(final EmailModel email) {
try {
MimeMessage message = new MimeMessage(session);
if (email.normalRecipientsListIsEmpty()) {
throw new RuntimeException("need destination address.");
}
message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(email.getNormalRecipients()));
message.setRecipients(Message.RecipientType.CC, InternetAddress.parse(email.getCCRecipients()));
message.setRecipients(Message.RecipientType.BCC, InternetAddress.parse(email.getBCCRecipients()));
message.setSubject(email.getSubject());
message.setContent(email.getContent(), MIME_TYPE);
Transport.send(message);
} catch (MessagingException e) {
throw new RuntimeException("Failed to sen email.", e);
}
}
}
通过@Produces
服务字段中的Stateless
注释在项目中生成注入会话。
虽然在Windows上一切正常,但是如果部署在运行在linux上的wildfly上,则会出现超时异常消息,例如"无法获取5000milis内的方法锁定"
当我将整个代码移动到项目时,没有任何变化,一切都开始完美。
我的问题是,为什么会发生这种情况?在某处或在配置中实现是否存在差异?我该如何解决这个问题并将代码移回库中,以便在其他项目中重用它?