从头到尾讲解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

相关文章

详解SpringBoot+Ehcache使用示例

《详解SpringBoot+Ehcache使用示例》本文介绍了SpringBoot中配置Ehcache、自定义get/set方式,并实际使用缓存的过程,文中通过示例代码介绍的非常详细,对大家的学习或者... 目录摘要概念内存与磁盘持久化存储:配置灵活性:编码示例引入依赖:配置ehcache.XML文件:配置

Java高效实现PowerPoint转PDF的示例详解

《Java高效实现PowerPoint转PDF的示例详解》在日常开发或办公场景中,经常需要将PowerPoint演示文稿(PPT/PPTX)转换为PDF,本文将介绍从基础转换到高级设置的多种用法,大家... 目录为什么要将 PowerPoint 转换为 PDF安装 Spire.Presentation fo

Java集合之Iterator迭代器实现代码解析

《Java集合之Iterator迭代器实现代码解析》迭代器Iterator是Java集合框架中的一个核心接口,位于java.util包下,它定义了一种标准的元素访问机制,为各种集合类型提供了一种统一的... 目录一、什么是Iterator二、Iterator的核心方法三、基本使用示例四、Iterator的工

Java 线程池+分布式实现代码

《Java线程池+分布式实现代码》在Java开发中,池通过预先创建并管理一定数量的资源,避免频繁创建和销毁资源带来的性能开销,从而提高系统效率,:本文主要介绍Java线程池+分布式实现代码,需要... 目录1. 线程池1.1 自定义线程池实现1.1.1 线程池核心1.1.2 代码示例1.2 总结流程2. J

Python中isinstance()函数原理解释及详细用法示例

《Python中isinstance()函数原理解释及详细用法示例》isinstance()是Python内置的一个非常有用的函数,用于检查一个对象是否属于指定的类型或类型元组中的某一个类型,它是Py... 目录python中isinstance()函数原理解释及详细用法指南一、isinstance()函数

python中的高阶函数示例详解

《python中的高阶函数示例详解》在Python中,高阶函数是指接受函数作为参数或返回函数作为结果的函数,下面:本文主要介绍python中高阶函数的相关资料,文中通过代码介绍的非常详细,需要的朋... 目录1.定义2.map函数3.filter函数4.reduce函数5.sorted函数6.自定义高阶函数

JS纯前端实现浏览器语音播报、朗读功能的完整代码

《JS纯前端实现浏览器语音播报、朗读功能的完整代码》在现代互联网的发展中,语音技术正逐渐成为改变用户体验的重要一环,下面:本文主要介绍JS纯前端实现浏览器语音播报、朗读功能的相关资料,文中通过代码... 目录一、朗读单条文本:① 语音自选参数,按钮控制语音:② 效果图:二、朗读多条文本:① 语音有默认值:②

Vue实现路由守卫的示例代码

《Vue实现路由守卫的示例代码》Vue路由守卫是控制页面导航的钩子函数,主要用于鉴权、数据预加载等场景,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着... 目录一、概念二、类型三、实战一、概念路由守卫(Navigation Guards)本质上就是 在路

uni-app小程序项目中实现前端图片压缩实现方式(附详细代码)

《uni-app小程序项目中实现前端图片压缩实现方式(附详细代码)》在uni-app开发中,文件上传和图片处理是很常见的需求,但也经常会遇到各种问题,下面:本文主要介绍uni-app小程序项目中实... 目录方式一:使用<canvas>实现图片压缩(推荐,兼容性好)示例代码(小程序平台):方式二:使用uni

JAVA实现Token自动续期机制的示例代码

《JAVA实现Token自动续期机制的示例代码》本文主要介绍了JAVA实现Token自动续期机制的示例代码,通过动态调整会话生命周期平衡安全性与用户体验,解决固定有效期Token带来的风险与不便,感兴... 目录1. 固定有效期Token的内在局限性2. 自动续期机制:兼顾安全与体验的解决方案3. 总结PS