JMS外发邮件(EJB)

环境:jdk1.6/jboss4.2

 

前提:一些基本的EJB知识

 

1. 在jboss-4.2.2.GA\server\default\deploy目录下,新建simple-jms-service.xml文件,定义消息存放地址,

 

<?xml version="1.0" encoding="UTF-8"?>
<server>
	<mbean code="org.jboss.mq.server.jmx.Queue"
         name="jboss.mq.destination:service=Queue,name=simplejms">
    <attribute name="JNDIName">queue/simplejms</attribute>
    <depends optional-attribute-name="DestinationManager">jboss.mq:service=DestinationManager</depends>
  </mbean>
</server>
 

 

部署成功后在jmx-console页面上可以看到刚部署的queue/simplejms。

 

2. 修改同一目录下mail-service.xml文件

 

<?xml version="1.0" encoding="UTF-8"?>
<!-- $Id: mail-service.xml 62349 2007-04-15 16:48:15Z dimitris@jboss.org $ -->
<server>

  <!-- ==================================================================== -->
  <!-- Mail Connection Factory                                              -->
  <!-- ==================================================================== -->

  <mbean code="org.jboss.mail.MailService"
         name="jboss:service=Mail">
    <attribute name="JNDIName">java:/Mail</attribute>
    <attribute name="User">你邮件用户名</attribute>
    <attribute name="Password">邮件密码</attribute>
    <attribute name="Configuration">
      <!-- A test configuration -->
      <configuration>
        <!-- Change to your mail server prototocol -->
        <property name="mail.store.protocol" value="pop3"/>
        <property name="mail.transport.protocol" value="smtp"/>

        <!-- Change to the user who will receive mail  -->
        <property name="mail.user" value="nobody"/>

        <!-- Change to the mail server  -->
        <property name="mail.pop3.host" value="pop3.163.com"/>

        <!-- Change to the SMTP gateway server -->
        <property name="mail.smtp.host" value="smtp.163.com"/>
		
		<!-- Add to authorize -->
		<property name="mail.smtp.auth" value="true"/>
        
        <!-- The mail server port -->
        <property name="mail.smtp.port" value="25"/>
        
        <!-- Change to the address mail will be from  -->
        <property name="mail.from" value="nobody@163.com"/>

        <!-- Enable debugging output from the javamail classes -->
        <property name="mail.debug" value="false"/>
      </configuration>
    </attribute>
    <depends>jboss:service=Naming</depends>
  </mbean>

</server>
 

 

3. 编写消息消费者(一个MDB),不是很严密,没有验证为空什么的。

 

package com.xxx.ejb3.mdb;

import javax.ejb.ActivationConfigProperty;
import javax.ejb.MessageDriven;
import javax.jms.MapMessage;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import javax.naming.Context;
import javax.naming.InitialContext;

@MessageDriven(activationConfig = {
		@ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue"),
		@ActivationConfigProperty(propertyName = "destination", propertyValue = "queue/simplejms"),
		@ActivationConfigProperty(propertyName = "acknowledgeMode", propertyValue = "Auto_acknowledge") })
public class NetworkMessageBean implements MessageListener {

	@Override
	public void onMessage(Message msg) {
		try {
			if (msg instanceof MapMessage) {

				MapMessage mmsg = (MapMessage) msg;
				InternetAddress from = new InternetAddress(mmsg
						.getString("from"));
				InternetAddress to = new InternetAddress(mmsg.getString("to"));
				String subject = mmsg.getString("subject");
				String content = mmsg.getString("content");

				System.out
						.println("message is:" + "\nfrom: " + from + "\nto: "
								+ to + "\nsuject: " + subject + "\ncontent: "
								+ content);

				Context ctx = new InitialContext();
				Session session = (Session) ctx.lookup("java:/Mail");

				javax.mail.Message actualMsg = new MimeMessage(session);

				actualMsg.setFrom(from);
				actualMsg.setRecipient(javax.mail.Message.RecipientType.TO, to);
				actualMsg.setSubject(subject);
				actualMsg.setText(content);

				Transport.send(actualMsg);

			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}
 

 

导出成jar包,部署到jboss-4.2.2.GA\server\default\deploy目录。

 

4. 编写消息生产者/消息发送者,这里使用一个普通的Java Application在main方法中完成消息发送。

 

package com.xxx.ejb3.client;

import javax.jms.Destination;
import javax.jms.MapMessage;
import javax.jms.MessageProducer;
import javax.jms.Queue;
import javax.jms.QueueConnection;
import javax.jms.QueueConnectionFactory;
import javax.jms.QueueSession;
import javax.naming.Context;

import com.xxx.ejb3.util.ContextUtil;

public class NetworkMessageProducer {

	public static void main(String[] args) {

		QueueConnection conn = null;
		QueueSession session = null;

		try {
			Context ctx = ContextUtil.getContext();
			QueueConnectionFactory factory = (QueueConnectionFactory) ctx
					.lookup("QueueConnectionFactory");
			conn = factory.createQueueConnection();
			session = conn.createQueueSession(false,
					QueueSession.AUTO_ACKNOWLEDGE);

			Destination destination = (Queue) ctx.lookup("queue/simplejms");
			MessageProducer producer = session.createProducer(destination);

			MapMessage msg = session.createMapMessage();
			msg.setString("from", "jwu@iteye.com"); 
			msg.setString("to", "jwu@qq.com");
			String subject = "no subject/无主题";
			String content = "Hi, this is a mail sent by JMS from a piece of code./支持中文吗";
			msg.setString("subject", subject);
			msg.setString("content", content);

			System.out.println("start sending message...");
			producer.send(msg);
			System.out.println("finish sending message.");

		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				session.close();
				conn.close();
			} catch (Exception e) {
				e.printStackTrace();
			}
		}

	}
}
 

 

在使用这个类时,需要导入jbossall-client.jar和上面自己导出的jar包。

这里使用了一个工具类:ContextUtil.java

 

package com.xxx.ejb3.util;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;

public class ContextUtil {

	private static Context context;

	static {
		try {
			context = new InitialContext();
		} catch (NamingException e) {
			e.printStackTrace();
		}
	}

	public static Context getContext() {
		return context;
	}
}
 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
水资源是人类社会的宝贵财富,在生活、工农业生产中是不可缺少的。随着世界人口的增长及工农业生产的展,需水量也在日益增长,水已经变得比以往任何时候都要珍贵。但是,由于人类的生产和生活,导致水体的污染,水质恶化,使有限的水资源更加紧张。长期以来,油类物质(石油类物质和动植物油)一直是水和土壤中的重要污染源。它不仅对人的身体健康带来极大危害,而且使水质恶化,严重破坏水体生态平衡。因此各国都加强了油类物质对水体和土壤的污染的治理。对于水中油含量的检测,我国处于落后阶段,与国际先进水平存在差距,所以难以满足当今技术水平的要求。为了取得具有代表性的正确数据,使分析数据具有与现代测试技术水平相应的准确性和先进性,不断提高分析成果的可比性和应用效果,检测的方法和仪器是非常重要的。只有保证了这两方面才能保证快速和准确地测量出水中油类污染物含量,以达到保护和治理水污染的目的。开展水中油污染检测方法、技术和检测设备的研究,是提高水污染检测的一条重要措施。通过本课题的研究,探索出一套适合我国国情的水质污染现场检测技术和检测设备,具有广泛的应用前景和科学研究价值。 本课题针对我国水体的油污染,探索一套检测油污染的可行方案和方法,利用非分散红光度法技术,开研制具有自主知识产权的适合国情的适于野便携式的测油仪。利用此仪器,可以检测出被测水样中亚甲基、甲基物质和动植物油脂的污染物含量,为我国众多的环境检测站点监测水体的油污染状况提供依据。
### 内容概要 《计算机试卷1》是一份综合性的计算机基础和应用测试卷,涵盖了计算机硬件、软件、操作系统、网络、多媒体技术等多个领域的知识点。试卷包括单选题和操作应用两大类,单选题部分测试学生对计算机基础知识的掌握,操作应用部分则评估学生对计算机应用软件的实际操作能力。 ### 适用人群 本试卷适用于: - 计算机专业或信息技术相关专业的学生,用于课程学习或考试复习。 - 准备计算机等级考试或职业资格认证的人士,作为实战演练材料。 - 对计算机操作有兴趣的自学者,用于提升个人计算机应用技能。 - 计算机基础教育工作者,作为教学资源或出题参考。 ### 使用场景及目标 1. **学习评估**:作为学校或教育机构对学生计算机基础知识和应用技能的评估工具。 2. **自学测试**:供个人自学者检验自己对计算机知识的掌握程度和操作熟练度。 3. **职业展**:帮助职场人士通过实际操作练习,提升计算机应用能力,增强工作竞争力。 4. **教学资源**:教师可以用于课堂教学,作为教学内容的补充或学生的课后练习。 5. **竞赛准备**:适合准备计算机相关竞赛的学生,作为强化训练和技能检测的材料。 试卷的目标是通过系统性的题目设计,帮助学生全面复习和巩固计算机基础知识,同时通过实际操作题目,提高学生解决实际问题的能力。通过本试卷的学习与练习,学生将能够更加深入地理解计算机的工作原理,掌握常用软件的使用方法,为未来的学术或职业生涯打下坚实的基础。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值