`

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;
	}
}
 

 

 

分享到:
评论
2 楼 zhyy22145 2012-09-18  
急救的帖子阿!!!!!!!!   
1 楼 zhuchao_ko 2011-02-05  

相关推荐

    JMS 介绍及其在 EJB 2.0 中的用法

    总的来说,JMS在EJB 2.0中的使用扩展了企业级Java应用的能力,使得应用程序可以更有效地处理异步通信和解耦。通过MessageDrivenBean,开发者能够构建出更健壮、可扩展的系统,而不需要直接处理底层的消息传递细节。

    EJB TO JMS

    【EJB to JMS:理解消息传递与JMS Topic】 在企业级Java应用程序中,有时我们需要在不同组件之间传递信息,而无需它们直接相互依赖。这就是Java消息服务(Java Message Service,简称JMS)发挥作用的地方。JMS允许...

    EJB中用JMS模拟多线程机制的设计和实现

    EJB中用JMS模拟多线程机制的设计和实现 作者:高燕 李旭伟 文震 来源:工业技术 / 自动化技术、计算机技术收藏本文章 多线程机制是提高系统执行效率的关键,但对于采用EJB技术的服务器端,由于EJB规范限制使用多线程...

    jms-ejb3 source code

    《JMS与EJB3整合应用的源代码解析》 在Java世界中,JMS(Java Message Service)和EJB3(Enterprise JavaBeans 3.0)是两个至关重要的技术,它们分别负责消息传递和企业级应用的组件模型。本资料主要探讨的是将JMS...

    实战EJB 实战EJB 实战EJB

    ### 实战EJB知识点解析 ...EJB2.0支持与JMS的集成,本节将介绍如何在EJB组件中使用JMS进行消息传递。 通过上述章节的学习,开发者可以全面掌握EJB的基本概念和技术细节,为实际项目开发打下坚实的基础。

    EJB方面 ejb pdf

    - **技术栈集成**:EJB 2.0与JSP、Servlet、JNDI、JDBC、JMS等技术紧密集成,形成完整的J2EE平台,支持构建高度复杂的企业应用。 #### EJB与JavaBean的区别 EJB和JavaBean虽同属Java生态,但它们的应用场景和特性...

    EJB javaEE5 JMS1.1 JSP2.1规范中文版

    **EJB(Enterprise JavaBeans)**是Java EE(Enterprise Edition)平台的...通过阅读这些文档,开发者可以掌握EJB的完整生命周期、JMS的通信模型,以及JSP的页面构建技巧,从而提升构建高效、稳定的企业级应用的能力。

    JMS的使用范例,EJB初学者必看

    本源代码主要向EJB初学者介绍JMS的使用,如何创建和初始化一个请求Requestor对象、如何初始化请求Requestor对象、如何建立一个会话和发送请求、如何打印出请求的过程信息、如何接受由反馈者replier发回的消息等。

    J2EE 应用规范(内含EJB3持久化规范,EJB3核心规范,JAVAEE+5.0以及JMS1_1规范)

    在给定的压缩包文件中,我们可以找到几个关键的规范文档,包括EJB3持久化规范、EJB3核心规范、JAVAEE 5.0规范以及JMS 1.1规范。这些规范是J2EE开发中不可或缺的基础。 1. **EJB3持久化规范**:全称为Enterprise ...

    EJB3 PPT教程

    MDB是EJB3中的消息驱动组件,主要用于处理JMS(Java Message Service)消息。它能够异步接收和处理消息,降低了系统的耦合度。通过`@MessageDriven`注解,可以定义MDB的接口,同时可以使用`@...

    Idea搭建EJB架构Demo项目源代码

    【标题】"Idea搭建EJB架构Demo项目源代码"涉及的是使用IntelliJ IDEA(简称Idea)这个强大的Java集成开发环境来构建一个基于EJB(Enterprise JavaBeans)架构的示例项目。EJB是Java EE(企业版)平台的核心部分,...

    EJB_TEST自己编写的EJB例子

    3. **消息驱动Bean (Message Driven Bean)**:用于处理JMS(Java Message Service)消息,实现异步处理。 **EJB生命周期**: EJB的生命周期包括实例化、初始化、激活、被动使用、去激活和销毁等阶段。例如,对于...

    EJB基础(学习EJB者必看)

    EJB基础学习中,首先会介绍EJB的基本类型,包括会话bean(Session Beans)负责处理客户端请求,实体bean(Entity Beans)代表持久化数据,以及消息驱动bean(Message-driven Beans)用于接收和处理JMS消息。...

    java的ejb.jar包

    javax.ejb.AccessLocalException.class javax.ejb.CreateException.class javax.ejb.DuplicateKeyException.class javax.ejb.EJBContext.class javax.ejb.EJBException.class javax.ejb.EJBHome.class javax.ejb....

    javax.ejb.jar下载

    Files contained in javax.ejb.jar: META-INF/MANIFEST.MF javax.ejb.AccessLocalException.class javax.ejb.AccessTimeout.class javax.ejb.ActivationConfigProperty.class javax.ejb.AfterBegin.class javax....

    EJB消息驱动bean Demo

    在这个“EJB消息驱动bean Demo”中,我们将深入探讨EJB MDB和JMS如何协同工作以实现异步通信。 首先,JMS是Java平台上的标准API,它定义了生产、发送、接收和消费消息的接口。JMS提供两种消息模型:点对点(Point-...

    Weblogic Ejb 学习笔记

    - Message-driven Beans用于接收和处理JMS(Java Message Service)消息。 - Entity Beans映射到数据库中的持久性数据,通常用于对象关系映射(ORM)。 2. **WebLogic Server与EJB** - WebLogic Server作为EJB...

    实战角度比较EJB2和EJB3的架构异同

    【实战角度比较EJB2和EJB3的架构异同】 EJB,即Enterprise JavaBeans,是Java EE(企业版Java)平台的核心组件之一,用于构建可复用、分布式的服务器端应用程序。EJB2和EJB3是EJB技术的两个主要版本,它们在架构上...

    EJB3.0__EJB3.0

    2. **Message Driven Bean(MDB)**:用于处理消息队列(JMS)中的消息,常用于异步处理。 3. **Entity Bean**:代表应用程序中的持久化数据,通常映射到数据库表。EJB3.0引入了注解驱动的JPA(Java Persistence ...

Global site tag (gtag.js) - Google Analytics