从头到尾讲解EJB MDB(消息驱动bean)四——示例代码

2024-02-15 23:08

本文主要是介绍从头到尾讲解EJB MDB(消息驱动bean)四——示例代码,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1、Queue:

客户端:

public class MyMDBBeanClient {public static void main(String[] args) throws Exception {InitialContext ict = new InitialContext();//获取connectionFactory对象QueueConnectionFactory factory = (QueueConnectionFactory)ict.lookup("ConnectionFactory");//获取Connection对象QueueConnection connection = factory.createQueueConnection();//获取Session对象,第一个参数表示事务自动提交,第二个参数表示一旦消息被正确发送,将自动发回响应QueueSession session = connection.createQueueSession(false, QueueSession.AUTO_ACKNOWLEDGE);		//获取destination对象Queue queue = (Queue)ict.lookup("queue/myqueue");	//设置消息TextMessage msg = session.createTextMessage("hello world ");		//获取sender对象QueueSender sender = session.createSender(queue);	//发送消息sender.send(msg);session.close();System.out.println("消息已经发送!");}
}

MDB:

public class MyMDBBeanClient {public static void main(String[] args) throws Exception {InitialContext ict = new InitialContext();//获取connectionFactory对象QueueConnectionFactory factory = (QueueConnectionFactory)ict.lookup("ConnectionFactory");//获取Connection对象QueueConnection connection = factory.createQueueConnection();//获取Session对象,第一个参数表示事务自动提交,第二个参数表示一旦消息被正确发送,将自动发回响应QueueSession session = connection.createQueueSession(false, QueueSession.AUTO_ACKNOWLEDGE);		//获取destination对象Queue queue = (Queue)ict.lookup("queue/myqueue");	//设置消息TextMessage msg = session.createTextMessage("hello world ");		//获取sender对象QueueSender sender = session.createSender(queue);	//发送消息sender.send(msg);		session.close();		System.out.println("消息已经发送!");}
}

2.Topic

客户端:

public class MyTopicMDBBeanClient {public static void main(String[] args) throws Exception {InitialContext ict = new InitialContext();//获取connectionFactory对象TopicConnectionFactory factory = (TopicConnectionFactory)ict.lookup("ConnectionFactory");//获取Connection对象TopicConnection connection = factory.createTopicConnection();//获取Session对象,第一个参数表示事务自动提交,第二个参数表示一旦消息被正确发送,将自动发回响应TopicSession session = connection.createTopicSession(false, TopicSession.AUTO_ACKNOWLEDGE);		//获取destination对象Topic topic = (Topic)ict.lookup("topic/mytopic");	//设置消息TextMessage msg = session.createTextMessage("hello world ");		//获取sender对象TopicPublisher publisher = session.createPublisher(topic);		//发送消息publisher.publish(msg);		session.close();		System.out.println("消息已经发送!");}
}
MDB1:
@MessageDriven (activationConfig = {@ActivationConfigProperty(propertyName="destinationType",propertyValue="javax.jms.Topic"),@ActivationConfigProperty(propertyName="destination",propertyValue="topic/mytopic")}
)
public class MyTopicMDBBean1 implements MessageListener {public void onMessage(Message msg) {TextMessage message = (TextMessage)msg;try {System.out.println("MyTopicMDBBean1调用了:"+ message.getText());} catch (JMSException e) {e.printStackTrace();}}
}
MDB2:
@MessageDriven (activationConfig = {@ActivationConfigProperty(propertyName="destinationType",propertyValue="javax.jms.Topic"),@ActivationConfigProperty(propertyName="destination",propertyValue="topic/mytopic")}
)
public class MyTopicMDBBean2 implements MessageListener {public void onMessage(Message msg) {TextMessage message = (TextMessage)msg;try {System.out.println("MyTopicMDBBean2调用了:"+ message.getText());} catch (JMSException e) {e.printStackTrace();}}
}

3、部署运行测试

将ejb mdb(queue、toppic)部署到jboss服务器上,运行客户端。

注意:如果是部署到jboss4.0版本上,不会有问题,但直接部署到jboss5.0版本上会报错:javax.naming.NameNotFoundException:myqueue not bound

解决方法:

在JBoss根目录\server\default\deploy 下的mail-service.xml文件中加入如下:

<mbeancode="org.jboss.mq.server.jmx.Queue"name="jboss.org.destination:server=Queue,name=myqueue" >

  <attributename="JNDIName" >queue/myqueue</attribute>

  <dependsoptional-attribute-name = "DestinationManager" >jboss.mq:service=DestinationManager </depends>

</mbean>

topic找不到

 <mbean code="org.jboss.mq.server.jmx.Topic"name="jboss.org.destination:server=Topic,name=mytopic" >

    <!-- JNDI名称 -->

    <attributename="JNDIName">topic/mytopic</attribute>

    <dependsoptional-attribute-name="DestinationManager">jboss.mq:service=DestinationManager</depends>

  </mbean>

重启JBoss问题即解决。

当然,如果有其他的MDB,还需要继续加入JNDIName。


这篇关于从头到尾讲解EJB MDB(消息驱动bean)四——示例代码的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/712812

相关文章

HTML5 getUserMedia API网页录音实现指南示例小结

《HTML5getUserMediaAPI网页录音实现指南示例小结》本教程将指导你如何利用这一API,结合WebAudioAPI,实现网页录音功能,从获取音频流到处理和保存录音,整个过程将逐步... 目录1. html5 getUserMedia API简介1.1 API概念与历史1.2 功能与优势1.3

spring中的ImportSelector接口示例详解

《spring中的ImportSelector接口示例详解》Spring的ImportSelector接口用于动态选择配置类,实现条件化和模块化配置,关键方法selectImports根据注解信息返回... 目录一、核心作用二、关键方法三、扩展功能四、使用示例五、工作原理六、应用场景七、自定义实现Impor

mysql中insert into的基本用法和一些示例

《mysql中insertinto的基本用法和一些示例》INSERTINTO用于向MySQL表插入新行,支持单行/多行及部分列插入,下面给大家介绍mysql中insertinto的基本用法和一些示例... 目录基本语法插入单行数据插入多行数据插入部分列的数据插入默认值注意事项在mysql中,INSERT I

OpenCV实现实时颜色检测的示例

《OpenCV实现实时颜色检测的示例》本文主要介绍了OpenCV实现实时颜色检测的示例,通过HSV色彩空间转换和色调范围判断实现红黄绿蓝颜色检测,包含视频捕捉、区域标记、颜色分析等功能,具有一定的参考... 目录一、引言二、系统概述三、代码解析1. 导入库2. 颜色识别函数3. 主程序循环四、HSV色彩空间

Python实例题之pygame开发打飞机游戏实例代码

《Python实例题之pygame开发打飞机游戏实例代码》对于python的学习者,能够写出一个飞机大战的程序代码,是不是感觉到非常的开心,:本文主要介绍Python实例题之pygame开发打飞机... 目录题目pygame-aircraft-game使用 Pygame 开发的打飞机游戏脚本代码解释初始化部

C++ 函数 strftime 和时间格式示例详解

《C++函数strftime和时间格式示例详解》strftime是C/C++标准库中用于格式化日期和时间的函数,定义在ctime头文件中,它将tm结构体中的时间信息转换为指定格式的字符串,是处理... 目录C++ 函数 strftipythonme 详解一、函数原型二、功能描述三、格式字符串说明四、返回值五

LiteFlow轻量级工作流引擎使用示例详解

《LiteFlow轻量级工作流引擎使用示例详解》:本文主要介绍LiteFlow是一个灵活、简洁且轻量的工作流引擎,适合用于中小型项目和微服务架构中的流程编排,本文给大家介绍LiteFlow轻量级工... 目录1. LiteFlow 主要特点2. 工作流定义方式3. LiteFlow 流程示例4. LiteF

Java中Map.Entry()含义及方法使用代码

《Java中Map.Entry()含义及方法使用代码》:本文主要介绍Java中Map.Entry()含义及方法使用的相关资料,Map.Entry是Java中Map的静态内部接口,用于表示键值对,其... 目录前言 Map.Entry作用核心方法常见使用场景1. 遍历 Map 的所有键值对2. 直接修改 Ma

MyBatis ResultMap 的基本用法示例详解

《MyBatisResultMap的基本用法示例详解》在MyBatis中,resultMap用于定义数据库查询结果到Java对象属性的映射关系,本文给大家介绍MyBatisResultMap的基本... 目录MyBATis 中的 resultMap1. resultMap 的基本语法2. 简单的 resul

Mybatis Plus Join使用方法示例详解

《MybatisPlusJoin使用方法示例详解》:本文主要介绍MybatisPlusJoin使用方法示例详解,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,... 目录1、pom文件2、yaml配置文件3、分页插件4、示例代码:5、测试代码6、和PageHelper结合6