`

在JBoss中开发自己的消息驱动Bean

    博客分类:
  • J2EE
阅读更多

JBoss中先用xml文件定义我们的消息管道

定义规则是后最为XXXXXX-service.xml文件,

我定义为snailteam-service.xml

 

定义我们的Queue消息管道

name=snailteamQueue

JNDIName  queue/snailteam

 

定义我们的

Topic消息管道

name=snailteamTopic

JNDIName  topic/snailteamTopic

如下

 

<?xml version="1.0" encoding="UTF-8"?>
<server>
	<!-- 在Jboss中用xml定义Queue消息管道,单用户发送,接受为单用户 -->
	<mbean code="org.jboss.mq.server.jmx.Queue"
		   name="jboss.mq.destination:service=Queue,name=snailteamQueue">
		<attribute name="JNDIName">queue/snailteamQueue</attribute>
		<depends optional-attribute-name="DestinationManager">jboss.mq:service=DestinationManager</depends>	   
    </mbean>
    
    <!-- 在Jboss中用xml定义Topic消息管道,单用户发送,接受可为单用户 -->
    <mbean code="org.jboss.mq.server.jmx.Topic"
		   name="jboss.mq.destination:service=Topic,name=snailteamTopic">
		<attribute name="JNDIName">topic/snailteamTopic</attribute>
		<depends optional-attribute-name="DestinationManager">jboss.mq:service=DestinationManager</depends>	   
    </mbean>
</server>

 

放到目录中

 

Myeclipse中启动JBoss,

控制台观察到如下信息,说明发布成功

 

[TopicService] Topic[topic/snailteamTopic] started, fullSize=200000, pageSize=2000, downCacheSize=2000
 
[QueueService] Queue[queue/snailteamQueue] started, fullSize=200000, pageSize=2000, downCacheSize=2000

 

接着写我们服务端的消息管道监听Bean(消息驱动Bean)

 

Myeclipse中新建一个EJB项目,

别忘了将JBoss的jar包添加进我们的lib中

 



package org.snailtea.message;

import javax.ejb.ActivationConfigProperty;
import javax.ejb.MessageDriven;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.TextMessage;

@MessageDriven(activationConfig = {
		//propertyValue = "javax.jms.Queue" 用来监听javax.jms.Queue消息
		@ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue"),
		//propertyValue = "queue/snailteamQueue" 监听的消息管道
		@ActivationConfigProperty(propertyName = "destination", propertyValue = "queue/snailteamQueue"),

})
public class MessageDrivenBean implements MessageListener {

	public void onMessage(Message message) {
		//Message接受到的消息,我们发送的是TextMessage。
		TextMessage msg = (TextMessage)message;
		try {
			//简单的把消息控制台输出
			System.out.println(msg.getText());
		} catch (JMSException e) {
			 
			e.printStackTrace();
		}
	}

}
 

同样的步骤,新建一个消息Bean,ReceiveBean

package org.snaiteam.message;

import javax.ejb.ActivationConfigProperty;
import javax.ejb.MessageDriven;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.TextMessage;


@MessageDriven(mappedName = "jms/ReceiveBean", activationConfig = {
		//propertyValue = "topic/snailteamTopic" 监听的消息管道
		@ActivationConfigProperty(propertyName = "destination", propertyValue = "topic/snailteamTopic"),
		//propertyValue = "javax.jms.Topic" 用来监听javax.jms.Topic消息
		@ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Topic") })
public class ReceiveBean implements MessageListener {
	public void onMessage(Message message) {
		TextMessage msg = (TextMessage) message;
		try {
			//简单的打印我们的消息 
			System.out.println(this.getClass()+msg.getText());
		} catch (JMSException e) {
			e.printStackTrace();
		}
	}

}
 

开发好我们消息驱动Bean了,发布到JBoss容器中

 


控制台会输出

STARTED EJB: org.snaiteam.message.MessageDrivenBean ejbName: MessageDrivenBean
STARTED EJB: org.snaiteam.message.ReceiveBean ejbName: ReceiveBean

 发布成功。

 

开发我们的客户端,

为了能找到JBossRMI接口

我们需要定义一个jndi.properties文件,src目录下

java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory
java.naming.provider.url=localhost:1099

 

 

新建一个类 QueueSender.java

 

	public static void main(String[] args) {
		try {
			//读取jndi.properties文件中的参数
			InitialContext ctx = new InitialContext();
			
			//连接JBoss连接工厂
			QueueConnectionFactory factory = (QueueConnectionFactory)ctx.lookup("ConnectionFactory");
			QueueConnection conn = factory.createQueueConnection();
			
			//false不需要事务
			QueueSession session = conn.createQueueSession(false,QueueSession.AUTO_ACKNOWLEDGE);
			
			//查找queue/snailteamQueue消息管道
			Destination destination = (Destination)ctx.lookup("queue/snailteamQueue");
			MessageProducer producer = session.createProducer(destination);
			
			//向管道发送消息
			producer.send(session.createTextMessage("中国小樊"));	
			//关闭连接会话
			session.close();
			//关闭连接
			conn.close();
		} catch (NamingException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (JMSException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

 

新建一个类 TopicSender.java

public static void main(String[] args) {
		// TODO Auto-generated method stub
		try {
			//读取jndi.properties文件中的参数
			InitialContext ctx = new InitialContext();
			
			//连接JBoss连接工厂
			TopicConnectionFactory factory = (TopicConnectionFactory)ctx.lookup("ConnectionFactory");
			TopicConnection conn = factory.createTopicConnection();
			
			//false不需要事务
			TopicSession session = conn.createTopicSession(false,TopicSession.AUTO_ACKNOWLEDGE);//false不需要事务
			
			//查找topic/snailteamTopic消息管道
			Destination destination = (Destination)ctx.lookup("topic/snailteamTopic");
			MessageProducer producer = session.createProducer(destination);
			
			//向管道发送消息
			producer.send(session.createTextMessage("中国小樊"));
			session.close();
			conn.close();
			System.out.println("ok");
		} catch (NamingException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (JMSException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

 

运行,观察我们的控制台,JBoss是否会输出我们发送的消息

我们可以多写几个消息Bean,用来监听JBoss容器的消息管道。

 

  • 大小: 32.2 KB
  • 大小: 55.8 KB
  • 大小: 18.8 KB
  • 大小: 53 KB
分享到:
评论
1 楼 javafw 2012-01-11  
找到了想要的,谢谢。

相关推荐

    ejb2.0消息驱动bean的开发(JBOSS4.0.4.GA 环境)

    NULL 博文链接:https://8366.iteye.com/blog/502114

    Jboss下开发ejb应用之一消息驱动bean的应用

    NULL 博文链接:https://fruitking.iteye.com/blog/564183

    JBOSS使用指南

    文档目录: 一.JBOSS入门 1.下载和安装JBoss ...3.消息驱动Bean (Message Driven Bean) 3.1 Queue消息的发送与接收(PTP消息传递模型) 3.2 Topic消息的发送与接收(Pub/sub 消息传递模型) 4.实体Bean(Entity Bean)

    经典JAVA.EE企业应用实战.基于WEBLOGIC_JBOSS的JSF_EJB3_JPA整合开发.pdf

    8.7 在Session Bean中使用事务 327 8.7.1 容器管理事务 327 8.7.2 Bean管理事务 330 8.8 拦截器 332 8.9 依赖注入 335 8.9.1 EJB注入 336 8.9.2 资源注入 339 8.10 配置EJB引用 340 8.11 使用计时器进行任务调度 342...

    传智播客 EJB3.0PPT 完整版 黎明活

    本资源为PPT,配套视频为: ... 11_开发消息驱动bea 12_开发EJB容器模型的WEB服务 附录01_EJB3基本概念及发展前景 附录02_EJB3.0推荐教程 附录03_EJB3的运行环境 如果需要配套视频,请给本人私信。

    JBoss Seam 工作原理、seam和hibernate的范例、RESTFul的seam、seam-gen起步、seam组件、配置组件、jsf,jboss、标签、PDF、注解等等

    1.3. Seam 中的可点击列表:消息示例............................................................................................................................. 27 1.3.1. 理解代码.........................

    EJB3.0 实例教程 -- 切片2

    第五章消息驱动 BEAN (MESSAGE DRIVEN BEAN) .....33 第六章 实体 BEAN(ENTITY BEAN) .36 6.1 实体 BEAN的组成文件PERSISTENCE.XML配置.36 6.2 JBOSS数据源的配置......36 6.2.1 MySql数据源的配置...........37 ...

    EJB3.0 实例教程 -- 切片1

    第五章消息驱动 BEAN (MESSAGE DRIVEN BEAN) .....33 第六章 实体 BEAN(ENTITY BEAN) .36 6.1 实体 BEAN的组成文件PERSISTENCE.XML配置.36 6.2 JBOSS数据源的配置......36 6.2.1 MySql数据源的配置...........37 ...

    JSF1.2+EJB3.0实现的一个项目实例

    |--persistence.xml EJB3的持久化配置文件 &lt;br&gt; |--DBScript |--employee.sql 数据库脚本及测试数据 |--mysql-connector-java-5.1.5-bin.jar MySql的驱动程序包 |--mysql-ds.xml 在JBoss中配置...

    《MyEclipse 6 Java 开发中文教程》前10章

    Tomcat JSP Web 开发中的乱码问题小结 164 第九章 开发Struts 1.x应用 166 9.1 介绍 166 9.2 创建Struts项目 168 9.2.1 创建Web项目 169 9.2.2 加入 Struts开发功能 169 9.3 使用Struts工具 171 9.3.1 Struts配置...

    超级有影响力霸气的Java面试题大全文档

    当客户机第一次调用一个Stateful Session Bean 时,容器必须立即在服务器中创建一个新的Bean实例,并关联到客户机上,以后此客户机调用Stateful Session Bean 的方法时容器会把调用分派到与此客户机相关联的Bean实例...

    java 面试题 总结

    assertion(断言)在软件开发中是一种常用的调试方式,很多开发语言中都支持这种机制。在实现中,assertion就是在程序中的一条语句,它对一个boolean表达式进行检查,一个正确程序必须保证这个boolean表达式的值为...

    JSF2.0快速入门的基本教程.ppt

    页面操作会被自动映射到对应的java bean中,后台逻辑只需要同java bean发生交互。整个过程是通过“依赖注入(DI)”来实现的,看来这是目前解偶合的最佳途径啊,spring的影响真是深远。不过正式因为jsf采用了这样的...

    ssh(structs,spring,hibernate)框架中的上传下载

     在配置完LobHandler后, 还需要将其注入到sessionFactory的Bean中,下面是调用后的sessionFactory Bean的配置:  代码 6 将lobHandler注入到sessionFactory中的配置 1. 2. … 3. <bean id="sessionFactory" 4. ...

    JAVA上百实例源码以及开源项目

    在有状态SessionBean中,用累加器,以对话状态存储起来,创建EJB对象,并将当前的计数器初始化,调用每一个EJB对象的count()方法,保证Bean正常被激活和钝化,EJB对象是用完毕,从内存中清除…… Java Socket 聊天...

    JAVA上百实例源码以及开源项目源代码

    消息驱动Bean必须实现两个接口MessageDrivenBean和MessageListener 在对象创建的过程中将被容器调用,onMessage函数方法接收消息参数,将其强制转型为合适的消息类型,同时打印出消息的内容。同时一个mail note将被...

Global site tag (gtag.js) - Google Analytics