- 浏览: 125241 次
- 性别:
- 来自: 广州
文章分类
最新评论
-
愿景十月天:
两个表之间咋地关联呢?
hibernate 中HQL语句查询学习 -
xurichusheng:
LZ应该列出使用的jar包co.transport.jms.J ...
Spring的JMSTemplate的使用 -
lin_zy:
错误是显示在前台了,但问题还是美解决
Ajax4jsf 和 <h:message> 一起使用时候的问题 -
greemranqq:
<value>jdbc:mysql://local ...
Spring+JPA+MySQL的配置文件 -
successfulroof:
wyyacyy 写道可以详细介绍一下,a4j:commandL ...
动态自增表格rich:dataTable
1:在web.xml文件中配置一个spring用的上下文:
<context-param> <param-name>contextConfigLocation</param-name> <param-value> /WEB-INF/jmsconfig.xml </param-value> </context-param>
jmsconfig.xml用来装配jms,内容如下:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE beans PUBLIC "-//SPRING/DTD BEAN/EN" "http://www.springframework.org/dtd/spring-beans.dtd"> <beans> <bean id="jmsConnectionFactory" class="org.springframework.jndi.JndiObjectFactoryBean"> <property name="jndiName"> <value>jms/Ntelagent/RequestQCF</value> </property> </bean> <bean id="destination" class="org.springframework.jndi.JndiObjectFactoryBean"> <property name="jndiName"> <value>jms/Ntelagent/RequestQ</value> </property> </bean> <bean id="jmsConnectionFactoryForReceive" class="org.springframework.jndi.JndiObjectFactoryBean"> <property name="jndiName"> <value>jms/Ntelagent/ResponseQCF</value> </property> </bean> <bean id="destinationForReceive" class="org.springframework.jndi.JndiObjectFactoryBean"> <property name="jndiName"> <value>jms/Ntelagent/ResponseQ</value> </property> </bean> <bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate102"> <property name="connectionFactory"> <ref bean="jmsConnectionFactory"/> </property> <property name="defaultDestination"> <ref bean="destination"/> </property> <property name="messageConverter"> <ref bean="jmsTrxConverter"/> </property> <property name="receiveTimeout"> <value>1</value> </property> </bean> <bean id="jmsTemplateForReceive" class="org.springframework.jms.core.JmsTemplate102"> <property name="connectionFactory"> <ref bean="jmsConnectionFactoryForReceive"/> </property> <property name="defaultDestination"> <ref bean="destinationForReceive"/> </property> <property name="messageConverter"> <ref bean="jmsTrxConverter"/> </property> <property name="receiveTimeout"> <value>1</value> </property> </bean> <bean id="jmsTrxConverter" class="co.transport.jms.JmsTransactionConverter"> <property name="rspQueue"> <ref bean="destinationForReceive"/> </property> </bean> <bean id="jmsRequestTransport" class="co.transport.jms.JmsRequestTransport"> <property name="jmsTemplate"> <ref bean="jmsTemplate"/> </property> <property name="jmsTemplateForReceive"> <ref bean="jmsTemplateForReceive"/> </property> </bean> </beans>
其中:
jmsConnectionFactory为jms连接工厂,属性jndiName的value为server服务配置的jndi名称.
destination为消息队列,属性jndiName为消息队列的jndi名称.
jmsTemplate为配置spring消息模版:采用JmsTemplate102(如果你的JMS实现符合JMS规范1.1版,则应该使用JmsTemplate),其中的messageConverter属性配置了一个消息转换器,因为通常消息在发送前和接收后都需要进行一个前置和后置处理,转换器便进行这个工作。
由于我的sendQueue很receiveRueue是不同的queue,所以我配置了两个jmsTemplate:
jmsTemplateForReceive负责接收消息,jmsTemplate负责发发送消息.
发送消息的代码很简单:
jmsTemplate.convertAndSend(request);
接收消息也很简单:
Object obj = jmsTemplate.receiveAndConvert();
如果需要用一个过滤器接收特定的消息,则:
Object obj = this.jmsTemplateForReceive.receiveSelectedAndConvert(this.messageSelector);
发送和接收消息的class如下:
public class JmsRequestTransport implements RequestTransport { private JmsTemplate jmsTemplate; private JmsTemplate jmsTemplateForReceive; private String messageSelector; private String destinationName; public void setJmsTemplate(JmsTemplate template){ this.jmsTemplate = template; } public void request(Object request) { jmsTemplate.convertAndSend(request); } public Object receive() { System.out.println("in JmsRequestTransport: destinationName = " + this.jmsTemplateForReceive.getDefaultDestinationName()); System.out.println("in JmsRequestTransport: messageSelector = " + messageSelector); Object obj = this.jmsTemplateForReceive.receiveSelectedAndConvert(this.messageSelector); return obj; } public String getMessageSelector() { return messageSelector; } public void setMessageSelector(String string) { messageSelector = string; } public String getDestinationName() { return destinationName; } public void setDestinationName(String string) { destinationName = string; } public JmsTemplate getJmsTemplateForReceive() { return jmsTemplateForReceive; } public void setJmsTemplateForReceive(JmsTemplate template) { jmsTemplateForReceive = template; } }
要实现一个消息转换器,只需要实现MessageConverter接口,MessageConverter很简单,它只有两个方法需要实现:
public Object fromMessage(Message msg){}
public Message toMessage(Object obj, Session session) throws JMSException{}
fromMessage为接收消息后,对消息进行的转换(通常是把一个message转化为一个Object对象)
toMessage为发送消息前需要的转化(通常为把一个Object转化为一个message对象)
我的JmsTransactionConverter转换器如下:
public class JmsTransactionConverter implements MessageConverter { private Queue rspQueue; public JmsTransactionConverter(){} public Object fromMessage(Message msg){ MessageBean msgBean = new MessageBean(); TextMessage massage = (TextMessage)msg; try { String str = massage.getText(); msgBean.setHead("HeadTest"); msgBean.setOutput(str); msgBean.setStatus("success"); } catch (JMSException e) { // TODO Auto-generated catch block msgBean = null; e.printStackTrace(); } finally { return msgBean; } } public Message toMessage(Object obj, Session session) throws JMSException{ String s = (String)obj; TextMessage message = session.createTextMessage(s); message.setStringProperty("mytype","java"); return message; } public Queue getRspQueue() { return rspQueue; } public void setRspQueue(Queue queue) { rspQueue = queue; } } 其中:MessageBean是一个简单javabean: public class MessageBean { private String head; private String output; private String status; public String getHead() { return head; } public String getOutput() { return output; } public String getStatus() { return status; } public void setHead(String string) { head = string; } public void setOutput(String string) { output = string; } public void setStatus(String string) { status = string; } } 然后就可以用两个servlet来测试发送和接收消息: 发送消息: public class JMSTestServlet extends HttpServlet { /** * @see javax.servlet.http.HttpServlet#void (javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse) */ public void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doGet(req, resp); } public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException{ ServletOutputStream out = resp.getOutputStream(); try { ServletContext servletContext = this.getServletContext(); WebApplicationContext wac = WebApplicationContextUtils.getRequiredWebApplicationContext(servletContext); JmsRequestTransport transport = (JmsRequestTransport)wac.getBean("jmsRequestTransport"); System.out.println("in JMSTestServlet.doGet:begin send message"); String messageToSend = req.getParameter("message"); if(messageToSend == null) { messageToSend = "Default Message"; } transport.request(messageToSend); String s = "in JMSTestServlet.doGet:after send message and message is: " + messageToSend; out.println("<HTML><BODY>"); out.println(s); out.println("<br><input type=button name=back value=back onclick=history.back()>"); out.println("<br><a href=receiveServlet>receive</a>"); out.println("</HTML></BODY>"); } catch(Exception e) { out.println("<HTML><BODY>"); out.println(e.toString()); out.println("</HTML></BODY>"); } } 接收消息: public class receiveServlet extends HttpServlet { /** * @see javax.servlet.http.HttpServlet#void (javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse) */ public void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doGet(req, resp); } public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { ServletOutputStream out = resp.getOutputStream(); String selector = req.getParameter("selector"); String distination = req.getParameter("distination"); try { String s = "nothing"; ServletContext servletContext = this.getServletContext(); WebApplicationContext wac = WebApplicationContextUtils.getRequiredWebApplicationContext(servletContext); JmsRequestTransport transport = (JmsRequestTransport)wac.getBean("jmsRequestTransport"); System.out.println("selector = " + selector); System.out.println("distination = " + distination); transport.setDestinationName(distination); transport.setMessageSelector(selector); Object obj = transport.receive(); if(obj != null) { MessageBean msgBean = (MessageBean)obj; //System.out.println("in receiveServlet:"); s = "receive the message is: " + msgBean.getHead() + "," + msgBean.getOutput() + ", " + msgBean.getStatus(); } else { s = "there is no message where " + selector; } out.println("<HTML><BODY>"); out.println(s); out.println("<br>selector is :" + selector); out.println("<br>distination is :" + distination); out.println("<br><a href=jsp/sendMessage.jsp>sendMessage</a>"); out.println("</HTML></BODY>"); } catch(Exception e) { out.println("<HTML><BODY>"); out.println("<br>selector is :" + selector); out.println("<br>distination is :" + distination); out.println("<br>" + e.toString()); out.println("</HTML></BODY>"); } } }
评论
co.transport.jms.JmsTransactionConverter
co.transport.jms.JmsRequestTransport
找不到这2个类的jar包
发表评论
-
使用spring查找hibernate映射文件
2008-09-12 14:02 1500LocalSessionFactoryBean有好几个属性用来 ... -
JdbcTemplate - 查询
2008-09-11 15:29 3452使用JdbcTemplate进行查询时,可以使用queryFo ... -
spring执行定时任务
2008-09-08 14:57 1311package timerTask; import java ... -
Spring+JPA+MySQL的配置文件
2008-06-25 10:17 3041一直在整合spring+hibernate,今天整合一下JPA ... -
Spring 事务管理
2008-06-25 09:20 1409通常建议采用声明式事务管理。声明式事务管理的优势非常明显:代码 ... -
spring和quartz进行定时邮件发送
2008-06-22 18:45 1157一 发送邮件的基类: public abstract cla ... -
Acegi + Spring + Hibernate + Struts 2搭建基于角色的权限控制系统
2008-06-14 16:15 2490安全永远是WEB应用系统 ... -
利用 Spring IoC 配置 EHCache
2008-05-29 12:01 1235利用 Spring IoC 配置 EHCache 在 Spri ... -
Quartz与Spring结合时如何动态更新Job的启动时间
2008-05-28 12:14 1302动态更新的Java类如下: import org.quartz ...
相关推荐
标题 "Spring JMSTemplate 与 JMS 原生API比较" 涉及到的是Java消息服务(Java Message Service,JMS)在Spring框架中的使用,特别是Spring提供的JMSTemplate与JMS原生API之间的差异。JMS是一种标准接口,用于在...
JmsTemplate是Spring框架为简化JMS操作提供的一个工具类,它封装了发送和接收消息的复杂性,使得开发者能够更方便地使用JMS。使用JmsTemplate,我们可以直接调用其send()方法向队列发送消息。以下是一个简单的示例:...
简单使用 public class Main { public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext("classpath*:applicationContext.xml"); JmsTemplate jmsTemplate =...
JMS与Spring之一(用JmsTemplate同步收发消息) JMS(Java Message Service)是一种Java API,用于在两个应用程序之间异步地发送消息。Spring框架提供了对JMS的支持,允许开发者使用JMS template或message listener...
本文将深入探讨如何在Spring环境中使用ActiveMQ来实现消息的发送与接收,以提高系统的可扩展性和解耦性。 首先,我们需要了解Spring对ActiveMQ的支持。Spring提供了`spring-jms`模块,它包含了一组丰富的API和配置...
Spring使用模板方法模式,如`JmsTemplate`,提供了发送和接收消息的简便方式。此外,Spring还支持基于注解的消息监听器,只需在方法上添加`@JmsListener`,即可自动监听特定的队列或主题。 在将ActiveMQ与Spring...
4. **创建消息生产者和消费者**:在Spring中,你可以通过实现MessageListener接口创建消息消费者,或者使用JmsTemplate发送消息。例如,创建一个简单的消息监听器: ```java @Component public class ...
Spring JMS框架是Spring项目的一部分,其主要目标是简化Java Message Service (JMS) API的使用,使得开发人员能够更容易地与消息中间件进行交互。通过Spring JMS,开发者可以更加专注于业务逻辑而非底层的消息传递...
4. 使用Spring JmsTemplate发送消息: Spring的JmsTemplate提供了一个简单的方法来发送JMS消息。只需调用它的send()方法,传入目的地(Oracle AQ队列的名称)和消息体即可。 5. 异常处理和事务管理: 由于Spring ...
JMS(使用消息中介:ActiveMQ) ...JmsTemplate是Spring消除冗长和重复JMS代码的解决方案。JmsTemplate可以创建连接,获取会话,以及发送和接收消息。http://blog.csdn.net/facepp/archive/2008/11/26/3374151.aspx
6.8.1. 在Spring中使用AspectJ来为domain object进行依赖注入 6.8.1.1. @Configurable object的单元测试 6.8.1.2. 多application context情况下的处理 6.8.2. Spring中其他的AspectJ切面 6.8.3. 使用Spring IoC来...
1) 本工程主要演示在SPRING BOOT工程中怎样使用JMS集成IBM-MQ及TLQ两种消息中间件产品 2) 使用SPRING BOOT Conditional机制实现了两种产品按需加载,工程会根据配置文件开关动态加载 3) 实现了普通队列消息发送与...
`WebSocketMessageBrokerConfigurer`帮助我们配置WebSocket消息代理,而`JmsTemplate`则简化了JMS消息的发送和接收。 总的来说,Spring 4.3版本不仅保持了其在依赖注入、面向切面编程和容器管理方面的强大功能,还...
5. **模版**:Spring提供了诸如JdbcTemplate、JmsTemplate等模板类,简化了数据库和消息队列的操作。 6. **Spring Boot**:近年来,Spring Boot成为了快速开发Spring应用的首选,它通过默认配置、自动配置和起步...
在Spring中,我们可以使用`JmsTemplate`类来简化JMS的使用。`JmsTemplate`提供了发送消息的方法,如`convertAndSend()`和`send()`,以及接收消息的方法,如`receive()`和`receiveAndConvert()`。这些方法使得在...
本文将深入探讨ActiveMQ 5.5.1版本与Spring框架的集成,以及如何利用Spring的模板模式简化ActiveMQ的使用。 一、ActiveMQ基础介绍 ActiveMQ是Apache软件基金会下的一个项目,遵循JMS(Java消息服务)规范,支持多种...
文件"基于Spring的JMS编程-1"可能包含了关于如何在Spring环境中配置和使用JMS的详细步骤,包括XML配置、代码示例以及可能的实战项目案例。进一步学习这些内容,你将能够熟练掌握Spring框架下的JMS编程技巧,从而在...
Spring Boot提供了自动配置,简化了Spring-JMS的使用。 总的来说,Spring-JMS为开发者提供了一个强大且灵活的工具,用于构建基于JMS的应用。通过理解和熟练使用Spring-JMS,你可以构建出高效、可靠、可扩展的企业级...