在上一篇文章中我们已经了解如何用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详细对话,并将消息传送到制定的目的地中,其中可以携带需求所需要的信息内容,这里我们传送的是用户名称和用户邮箱地址.
鉴于篇幅,后两步的内容将在下一篇文章中继续进行.