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

相关文章

Java调用C++动态库超详细步骤讲解(附源码)

《Java调用C++动态库超详细步骤讲解(附源码)》C语言因其高效和接近硬件的特性,时常会被用在性能要求较高或者需要直接操作硬件的场合,:本文主要介绍Java调用C++动态库的相关资料,文中通过代... 目录一、直接调用C++库第一步:动态库生成(vs2017+qt5.12.10)第二步:Java调用C++

CSS will-change 属性示例详解

《CSSwill-change属性示例详解》will-change是一个CSS属性,用于告诉浏览器某个元素在未来可能会发生哪些变化,本文给大家介绍CSSwill-change属性详解,感... will-change 是一个 css 属性,用于告诉浏览器某个元素在未来可能会发生哪些变化。这可以帮助浏览器优化

Python基础文件操作方法超详细讲解(详解版)

《Python基础文件操作方法超详细讲解(详解版)》文件就是操作系统为用户或应用程序提供的一个读写硬盘的虚拟单位,文件的核心操作就是读和写,:本文主要介绍Python基础文件操作方法超详细讲解的相... 目录一、文件操作1. 文件打开与关闭1.1 打开文件1.2 关闭文件2. 访问模式及说明二、文件读写1.

C++中std::distance使用方法示例

《C++中std::distance使用方法示例》std::distance是C++标准库中的一个函数,用于计算两个迭代器之间的距离,本文主要介绍了C++中std::distance使用方法示例,具... 目录语法使用方式解释示例输出:其他说明:总结std::distance&n编程bsp;是 C++ 标准

前端高级CSS用法示例详解

《前端高级CSS用法示例详解》在前端开发中,CSS(层叠样式表)不仅是用来控制网页的外观和布局,更是实现复杂交互和动态效果的关键技术之一,随着前端技术的不断发展,CSS的用法也日益丰富和高级,本文将深... 前端高级css用法在前端开发中,CSS(层叠样式表)不仅是用来控制网页的外观和布局,更是实现复杂交

springboot循环依赖问题案例代码及解决办法

《springboot循环依赖问题案例代码及解决办法》在SpringBoot中,如果两个或多个Bean之间存在循环依赖(即BeanA依赖BeanB,而BeanB又依赖BeanA),会导致Spring的... 目录1. 什么是循环依赖?2. 循环依赖的场景案例3. 解决循环依赖的常见方法方法 1:使用 @La

使用C#代码在PDF文档中添加、删除和替换图片

《使用C#代码在PDF文档中添加、删除和替换图片》在当今数字化文档处理场景中,动态操作PDF文档中的图像已成为企业级应用开发的核心需求之一,本文将介绍如何在.NET平台使用C#代码在PDF文档中添加、... 目录引言用C#添加图片到PDF文档用C#删除PDF文档中的图片用C#替换PDF文档中的图片引言在当

C#使用SQLite进行大数据量高效处理的代码示例

《C#使用SQLite进行大数据量高效处理的代码示例》在软件开发中,高效处理大数据量是一个常见且具有挑战性的任务,SQLite因其零配置、嵌入式、跨平台的特性,成为许多开发者的首选数据库,本文将深入探... 目录前言准备工作数据实体核心技术批量插入:从乌龟到猎豹的蜕变分页查询:加载百万数据异步处理:拒绝界面

用js控制视频播放进度基本示例代码

《用js控制视频播放进度基本示例代码》写前端的时候,很多的时候是需要支持要网页视频播放的功能,下面这篇文章主要给大家介绍了关于用js控制视频播放进度的相关资料,文中通过代码介绍的非常详细,需要的朋友可... 目录前言html部分:JavaScript部分:注意:总结前言在javascript中控制视频播放

C# WinForms存储过程操作数据库的实例讲解

《C#WinForms存储过程操作数据库的实例讲解》:本文主要介绍C#WinForms存储过程操作数据库的实例,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、存储过程基础二、C# 调用流程1. 数据库连接配置2. 执行存储过程(增删改)3. 查询数据三、事务处