Spring 对 JMS的支持
来源:互联网 发布:淘宝新品流量扶持多久 编辑:程序博客网 时间:2024/05/18 16:40
Spring对JMS的支持
Srping在org.springframework.jsm包中提供了一个用于简化JMS API的使用的抽象框架,并对用户屏蔽了JMS1.1与JMS1.02之间的差别
Spring JMS API
org.springframework.jms.core JMS模板类 执行公共操作 使用接口回调 发送接收消息
org.springframework.jms 为JMS提供的运行期异常体系
org.springframework.jms.support 提供异常转化器,将JMS检查异常映射到该异常体系
org.springframework.jsm.support.conver 消息转化器,以便将POJO转化为JMS消息,提供MDP的功能
org.springframework.jms.listener 消息监听器容器,提供了异步消息接收的支持
org.springframework.jsm.support.destination 提供地址解析的功能,允许用户使用字符串的形式指定消息发送或接收地址,地址解析器负责地址的解析
org.springframework.jms.connection 提供一个ConnectionFactory的实现,还为JMS提供了一个Spring的PlatformTransactionManager 的实现,JmsTaransactionManager ,这样JMS作为一个事务资源无缝集成到Spring的事务管理机制中
JMS模板类
JMSTemplate 的使用情况对于两种消息域类型是一致的
JMSTemplate102
JMSTemplate102通过指定pubSubDomain 属性指定消息类型true Pub/Sub
<bean id=”jsmTempalte” class=”org.springframewrok.jms.core.JmsTempalte”>
<property name=”pubSubDomain”value=”true”/>
</bean>
JmsTemplate102的ConnectionFactory类型必须JMSTemplate的消息类型一致
如果JmsTempalte的消息类型为 pubSubDomain=true,则ConnectionFactory必须是
javax.jms.TopicConnectionFactory,如果是false,就使用javax.jms.QueueConnectionFactory
因为PooledConnectionFactory只实现的ConnectionFactory接口,所以最好的办法是使用
ActiveMQConnectionFactory,因为它同时实现了ConnectionFactory,TopicConnectionFactory,
QueueConnectionFactory 接口,或者使用JNDI中的ConnectionFactory ,开发中尽量使用后者
JmsTemplate 的支持类 org.springframework.jms.core.JmsGatewaySupport,只要向该类注入一个
ConnectionFactory ,它会自动创建JmsTempalte 实例
JMS的异常映射
JMS检查型异常转为运行时异常
Org.srpingframework.jms包中的异常为javax.jms异常提供了类型转转换的镜像实现,Spring中的JMS异常都继承于JmsException
除此之外,Spring还提供了一些特定的JMS异常
DestinationResolutionException 在DestinationResolver解析消息地址是发生错误抛出的异常
SynchedLocalTransactionFailedExcetion 在同步本地事务发生异常抛出的异常,事务结束再次同步就会有这样的异常抛出
UncategorizedJmsException 所有归类的异常
JMS声明事务时可以在事务控制策略中使用这些异常
使用回调接口发送/接收消息
MessageSender.java
packagecn.com.snt.spring_jms;
importjavax.jms.JMSException;
import javax.jms.Message;
import javax.jms.Session;
importorg.springframework.jms.core.MessageCreator;
importorg.springframework.jms.core.support.JmsGatewaySupport;
public class MessageSenderextends JmsGatewaySupport {
public voidsendTextMsg(final String textMsg){
getJmsTemplate().send(newMessageCreator(){
public MessagecreateMessage(Session session) throws JMSException {
returnsession.createTextMessage(textMsg);
}
});
}
}
applicationContext-sender.xml
<?xml version="1.0" ?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:amq="http://activemq.org/config/1.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsd
http://activemq.org/config/1.0http://people.apache.org/repository/org.apache.activemq/xsds/activemq-core-4.1-incubator-SNAPSHOT.xsd">
<bean id="connectionFactory"class="org.apache.activemq.pool.PooledConnectionFactory">
<property name="connectionFactory">
<bean class="org.apache.activemq.ActiveMQConnectionFactory">
<property name="brokerURL" value="tcp://localhost:61616"/>
</bean>
</property>
</bean>
<bean id="dest" class="org.apache.activemq.command.ActiveMQQueue">
<constructor-arg value="myDest"/>
</bean>
<bean id="jmsTemplate"class="org.springframework.jms.core.JmsTemplate">
<property name="connectionFactory" ref="connectionFactory"/>
<property name="defaultDestination" ref="dest"/>
</bean>
<bean id="messageSender"class="cn.com.snt.spring_jms.MessageSender">
<property name="jmsTemplate" ref="jmsTemplate"/>
</bean>
</beans>
MessageReceiver.java
packagecn.com.snt.spring_jms;
importjavax.jms.JMSException;
importjavax.jms.TextMessage;
importorg.springframework.jms.core.support.JmsGatewaySupport;
public classMessageReceiver extends JmsGatewaySupport {
public voidreceiveTextMsg(){
TextMessagetextMsg=(TextMessage)getJmsTemplate().receive();
try{
System.out.println("msgid:"+textMsg.getJMSMessageID());
System.out.println("msg:"+textMsg.getText());
}catch(JMSExceptione){
e.printStackTrace();
}
}
}
applicationContext-receiver.xml
<?xml version="1.0" ?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:amq="http://activemq.org/config/1.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsd
http://activemq.org/config/1.0http://people.apache.org/repository/org.apache.activemq/xsds/activemq-core-4.1-incubator-SNAPSHOT.xsd">
<bean id="connectionFactory"
class="org.apache.activemq.pool.PooledConnectionFactory">
<property name="connectionFactory">
<bean
class="org.apache.activemq.ActiveMQConnectionFactory">
<property name="brokerURL"
value="tcp://localhost:61616"/>
</bean>
</property>
</bean>
<bean id="dest" class="org.apache.activemq.command.ActiveMQQueue">
<constructor-arg value="myDest" />
</bean>
<bean id="jmsTemplate"
class="org.springframework.jms.core.JmsTemplate">
<property name="connectionFactory" ref="connectionFactory" />
<property name="defaultDestination" ref="dest" />
</bean>
<bean id="messageReceiver" class="cn.com.snt.spring_jms.MessageReceiver">
<property name="jmsTemplate" ref="jmsTemplate"/>
</bean>
</beans>
JmsTemplate send 方法有三种重载
send(MessageCreator messageCreator) 使用该方法一定要通过defaultDestination或
defaultDestinationName指定默认地址,否则会报异常
send(Destination dest,MessageCreatormessageCreator) 发送消息到指定目的地址
send(String destinationName,StringmessageSelector ) 将消息发送到 DestinationResolver 解析destinationName得到的真实地址,默认采用DynamicDestinationResolver 解析地址
DestinationResoler 接口只有一个方法
DestinationresolveDestinationName(Session session,String destintaionName,booleanpubSubDomain)
pubSubDomain=true 解析为 Topic ,否则解析为Queue
- Spring 对 JMS的支持
- Spring 对JMS的支持
- Spring 对JMS的支持
- Spring 对JMS的支持
- Spring对JMS的支持
- Spring对JMS的支持
- spring 对JMS-RPC的支持
- spring对jboss与weblogic的jms的支持不一样
- 不明觉厉的spring(7)---spring对远程服务的支持(对rmi和jms支持)
- spring对Junit的支持、spring对Aop的支持
- Spring对Hibernate的支持
- spring对DAO的支持
- Spring对JDBC的支持
- spring对AOP的支持
- Spring对EJB的支持
- Spring对国际化的支持
- Spring对AOP的支持
- Spring对JDBC的支持
- dlmalloc解析连载一
- dlmalloc解析连载二
- dlmalloc解析连载三
- 在eclipse下,package,source folder,folde区别
- dlmalloc解析连载四
- Spring 对 JMS的支持
- 各种操作的计时
- Servlet&JSP 笔记
- delphi游戏开发网址大全
- MFC中如何修改属性表的背景色
- 从计算机到强大的游戏程序员必备书单
- 语录:101条伟大的计算机编程名言
- 珍惜和企业的第一次亲密接触
- Chained Exploits: Advanced Hacking Attacks from Start to Finish