在上一篇文章中我们已经了解如何用JavaMail来发送邮件.接下来我们将结合MDB和JavaMail 来模拟实际项目中的一个业务.
业务需求很简单:用户注册网站,注册成功后给用户发送一个通知邮件.实现此业务的技术读者需要对以下两篇文章进行阅读---带你走进EJB--MDB 和 带你走进EJB--MDB实现发送邮件(1) 这两篇文章为本篇文章做好了技术铺垫.以下的实现也是在两篇文章的基数之上进行了局部的更改.
整体的过程如下:
1 在业务逻辑方法中,系统保存用户注册信息,同时向该用户发送邮件通知,告知该用户已经注册成功.
2 在业务逻辑方法中会通过JMS产生消息(发送邮件需要的相关信息)
3 消息驱动Bean(MDB)作为JMS消息监听器,负责监听指定的JMS消息,当JMS的消息送达JMS消息目的地的时候,MDB的onMessage()方法会被触发.调用JavaMail相关类,发送邮件.
4 MDB通过调用JavaMail工具类进行发送邮件,此工具类就是上篇文章的例子(除去客户端部分)
通过以上四个步骤,我们就可以完成通过MDB和Javamail发送邮件通知.
接下来我们将模拟业务逻辑,在用户注册成功的时候,发送成功通知,以下代码便是完成注册,保存用户信息.
public int addUser( String userName,String password,String email)
throws AuctionException {
try {
User user = new User();
user.setUserName(userName);
user.setUserPassWord(password);
user.setEmail(email);
// 持久化User对象
userEao.save(user);
// 创建链接工厂
Connection conn = connFactory.createConnection();
// JMS链接创建JMS会话
Session session = conn.createSession(false/* 不是事务性会话 */,
Session.AUTO_ACKNOWLEDGE);
// JMS会话创建消息生产者.
MessageProducer sender = session.createProducer(dest);
// 设置消息生产者生产出来的消息的传递模式,有效时间.
sender.setDeliveryMode(DeliveryMode.PERSISTENT);
sender.setTimeToLive(20000);
// 通过JMS会话创建一个MapMessage
MapMessage msg = session.createMapMessage();
msg.setString("mailTo", user.getEmail());
msg.setString("userName", user.getUsername());
// 发送消息
sender.send(msg);
conn.close();
return bid.getId();
} catch (JMSException e) {
e.printStackTrace();
log.debug(e.getMessage());
throw new UserException("处理用户出现异常,请重试");
}
}
以上代码内容,一方面是创建用户实例,保存用户信息,另一个方面建立JMS详细对话,并将消息传送到制定的目的地中,其中可以携带需求所需要的信息内容,这里我们传送的是用户名称和用户邮箱地址.
鉴于篇幅,后两步的内容将在下一篇文章中继续进行.