- 浏览: 565700 次
- 性别:
- 来自: 北京
-
最新评论
-
anqinghaozi:
请问 你这weblogic jms 如何部署到tomcat上去 ...
Spring+weblogic接收JMS消息 -
cjliang:
1456746014@qq.com 我也要
jqGrid学习 ----------------- 第一个实例 -
Moy_Yeung:
Moy_Yeung 写道 您好 我最近在学习使用这个插件 能麻 ...
jqGrid学习 ----------------- 第一个实例 -
Moy_Yeung:
您好 我最近在学习使用这个插件 能麻烦博主发份demo吗 谢 ...
jqGrid学习 ----------------- 第一个实例 -
十叶木竹:
最近在自学这个插件,麻烦博主,发一份源码,以供学习,谢谢博主啦 ...
jqGrid学习 ----------------- 第一个实例
Spring提供了一个用于简化JMS API使用的抽象框架,并且对用户屏蔽了JMS API中1.0.2和1.1版本的差异。
JMS的功能大致上分为两块,叫做消息制造和消息消耗。JmsTemplate用于制造消息和同步消息接收。和Java EE的事件驱动bean风格类似,对于异步接收消息,Spring提供了一些消息侦听容器来创建消息驱动的POJO(MDP)。
消息域的统一
JMS规范有两个主要的版本,1.0.2和1.1。
JMS1.0.2定义了两种消息域,点对点(队列)和发布/订阅(主题)。JMS 1.0.2的API为每个消息域提供了一个平行的类层次结构。导致客户端应用只能使用特定消息域的JMS API。JMS 1.1引进了统一消息域的概念使这两种消息域之间功能和客户端API的差别尽可能小。举个已消除的功能差异的例子,如果你使用的是JMS 1.1的消息供应者,你可以使用同一个Session事务性地在一个域消耗了一个消息后并且在另一个域中产生一个消息。
JMS 1.1的规范发布于2002年4月,并且在2003年11月成为J2EE 1.4的一个组成部分,结果,现在大多数使用的应用服务器只支持JMS 1.0.2的规范.
org.springframework.jms.core包提供使用JMS的核心功能。 就象为JDBC提供的JdbcTemplate一样,它提供了JMS模板类来处理资源的创建和释放以简化JMS的使用。Spring模板类的公共设计原则就是通过提供助手方法去执行公共的操作,并将实际的处理任务委派到用户实现的回调接口上,从而完成更复杂的操作。 JMS模板也遵循这样的设计原则。这些类提供众多便利的方法来发送消息、同步接收消息、使用户可以接触到JMS session和消息产生者。
org.springframework.jms.support包提供JMSException的转换功能。它将受控的 JMSException异常层次转换到一个对应的非受控异常层次。任何受控javax.jms.JMSException异常的子类都被包装在非受控UncategorizedJmsException异常里。
org.springframework.jms.support.converter 包提供一个MessageConverter用来抽象Java对象和JMS消息之间的转换操作。
包org.springframework.jms.support.destination为管理JMS目的地提供多种策略,例如为存储在JNDI中的目的地提供一个服务定位器。
最后,org.springframework.jms.connection包提供一个适合在独立应用中使用的 ConnectionFactory的实现。它还为JMS提供了一个Spring的PlatformTransactionManager的实现(现在叫做JmsTransactionManager)。这样可以把JMS作为一个事务资源无缝地集成到Spring的事务管理机制中去。
--------上面这段话摘自 spring的文档,我们可以看到spring的强大。
在spring中发送JMS消息要有必要的几个配置:JmsTemplate,jmsConnectionFactory以及jmsDestination。
配置文件-applictionContext-jms.xml:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
<!-- define the jms queue's connectionFactory jndi -->
<bean id="jmsConnectionFactory" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName">
<value>ATOMCONFAT</value>
</property>
<property name="jndiTemplate">
<ref bean="jmsJndiTemplate"></ref>
</property>
</bean>
<!-- define jms queue jndi -->
<bean id="jmsDestination" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName">
<value>ATOM-QUEUE</value>
</property>
<property name="jndiTemplate">
<ref bean="jmsJndiTemplate"></ref>
</property>
</bean>
<!-- define jms queue url -->
<bean id="jmsJndiTemplate" class="org.springframework.jndi.JndiTemplate">
<property name="environment">
<props>
<!-- com.sun.enterprise.naming.SerialInitContextFactory -->
<prop key="java.naming.factory.initial">weblogic.jndi.WLInitialContextFactory</prop>
<prop key="java.naming.provider.url">t3://10.5.24.17:41009</prop>
</props>
</property>
</bean>
<!-- JMS Queue Send Template -->
<bean id="jmsSendQueueTemplate" class="org.springframework.jms.core.JmsTemplate">
<property name="connectionFactory">
<ref local="jmsConnectionFactory" />
</property>
<property name="defaultDestination">
<ref local="jmsDestination" />
</property>
</bean>
</beans>
这是一个完整的jms配置。
web.xml的配置:
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
classpath:/applicationContext-jms.xml
</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
发送消息的java类 JmsQueueSender.java
package com.test.jms;
import java.util.Enumeration;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.Queue;
import javax.jms.QueueBrowser;
import javax.jms.Session;
import org.springframework.jms.core.BrowserCallback;
import org.springframework.jms.core.JmsTemplate;
import org.springframework.jms.core.SessionCallback;
public class JmsQueueSender
{
public JmsQueueSender(){}
private JmsTemplate jmsTemplate;
private Destination destination;
private JMSMessageCreator jmsCreator;
public void sendMesage()
{
try
{
for (int i = 0; i < 5; ++i)
{
System.out.println("destination="+destination);
jmsTemplate.send(destination,new MessageCreator()
{
public Message createMessage(Session session) throws JMSException
{
return session.createTextMessage("Hello World! "
+ System.currentTimeMillis());
}
});
System.out.println("Message Num. "+i +" sent to Queue\n");
}
} catch (Exception e)
{
e.printStackTrace();
}
}
public void browserQueue()
{
jmsTemplate.browse(new BrowserCallback(){
public Object doInJms(Session arg0, QueueBrowser browser)
throws JMSException
{
Enumeration messages = browser.getEnumeration();
while (messages.hasMoreElements())
{
Object obj = messages.nextElement();
System.out.println("\nMessage is:"+obj);
}
return null;
}});
/* Integer count = (Integer) this.jmsTemplate.execute(new SessionCallback()
{
public Object doInJms(Session session) throws JMSException
{
int count = 0;
QueueBrowser browser = session.createBrowser((Queue) jmsTemplate.getDefaultDestination());
Enumeration messages = browser.getEnumeration();
while (messages.hasMoreElements())
{
count++;
Object obj = messages.nextElement();
System.out.println("-----obj===="+obj);
}
return new Integer(count);
}
});*/
}
public JmsTemplate getJmsTemplate()
{
return jmsTemplate;
}
public void setJmsTemplate(JmsTemplate jmsTemplate)
{
this.jmsTemplate = jmsTemplate;
}
public Destination getDestination()
{
return destination;
}
public void setDestination(Destination destination)
{
this.destination = destination;
}
}
测试代码
WebApplicationContext wac;
ServletContext application = getServletContext();
wac = WebApplicationContextUtils.getWebApplicationContext(application);//获取spring的context
JmsQueueSender jmsSender = (JmsQueueSender) wac.getBean("jmsSender");
jmsSender.sendMesage();
jmsSender.browserQueue();
JMS的功能大致上分为两块,叫做消息制造和消息消耗。JmsTemplate用于制造消息和同步消息接收。和Java EE的事件驱动bean风格类似,对于异步接收消息,Spring提供了一些消息侦听容器来创建消息驱动的POJO(MDP)。
消息域的统一
JMS规范有两个主要的版本,1.0.2和1.1。
JMS1.0.2定义了两种消息域,点对点(队列)和发布/订阅(主题)。JMS 1.0.2的API为每个消息域提供了一个平行的类层次结构。导致客户端应用只能使用特定消息域的JMS API。JMS 1.1引进了统一消息域的概念使这两种消息域之间功能和客户端API的差别尽可能小。举个已消除的功能差异的例子,如果你使用的是JMS 1.1的消息供应者,你可以使用同一个Session事务性地在一个域消耗了一个消息后并且在另一个域中产生一个消息。
JMS 1.1的规范发布于2002年4月,并且在2003年11月成为J2EE 1.4的一个组成部分,结果,现在大多数使用的应用服务器只支持JMS 1.0.2的规范.
org.springframework.jms.core包提供使用JMS的核心功能。 就象为JDBC提供的JdbcTemplate一样,它提供了JMS模板类来处理资源的创建和释放以简化JMS的使用。Spring模板类的公共设计原则就是通过提供助手方法去执行公共的操作,并将实际的处理任务委派到用户实现的回调接口上,从而完成更复杂的操作。 JMS模板也遵循这样的设计原则。这些类提供众多便利的方法来发送消息、同步接收消息、使用户可以接触到JMS session和消息产生者。
org.springframework.jms.support包提供JMSException的转换功能。它将受控的 JMSException异常层次转换到一个对应的非受控异常层次。任何受控javax.jms.JMSException异常的子类都被包装在非受控UncategorizedJmsException异常里。
org.springframework.jms.support.converter 包提供一个MessageConverter用来抽象Java对象和JMS消息之间的转换操作。
包org.springframework.jms.support.destination为管理JMS目的地提供多种策略,例如为存储在JNDI中的目的地提供一个服务定位器。
最后,org.springframework.jms.connection包提供一个适合在独立应用中使用的 ConnectionFactory的实现。它还为JMS提供了一个Spring的PlatformTransactionManager的实现(现在叫做JmsTransactionManager)。这样可以把JMS作为一个事务资源无缝地集成到Spring的事务管理机制中去。
--------上面这段话摘自 spring的文档,我们可以看到spring的强大。
在spring中发送JMS消息要有必要的几个配置:JmsTemplate,jmsConnectionFactory以及jmsDestination。
配置文件-applictionContext-jms.xml:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
<!-- define the jms queue's connectionFactory jndi -->
<bean id="jmsConnectionFactory" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName">
<value>ATOMCONFAT</value>
</property>
<property name="jndiTemplate">
<ref bean="jmsJndiTemplate"></ref>
</property>
</bean>
<!-- define jms queue jndi -->
<bean id="jmsDestination" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName">
<value>ATOM-QUEUE</value>
</property>
<property name="jndiTemplate">
<ref bean="jmsJndiTemplate"></ref>
</property>
</bean>
<!-- define jms queue url -->
<bean id="jmsJndiTemplate" class="org.springframework.jndi.JndiTemplate">
<property name="environment">
<props>
<!-- com.sun.enterprise.naming.SerialInitContextFactory -->
<prop key="java.naming.factory.initial">weblogic.jndi.WLInitialContextFactory</prop>
<prop key="java.naming.provider.url">t3://10.5.24.17:41009</prop>
</props>
</property>
</bean>
<!-- JMS Queue Send Template -->
<bean id="jmsSendQueueTemplate" class="org.springframework.jms.core.JmsTemplate">
<property name="connectionFactory">
<ref local="jmsConnectionFactory" />
</property>
<property name="defaultDestination">
<ref local="jmsDestination" />
</property>
</bean>
</beans>
这是一个完整的jms配置。
web.xml的配置:
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
classpath:/applicationContext-jms.xml
</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
发送消息的java类 JmsQueueSender.java
package com.test.jms;
import java.util.Enumeration;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.Queue;
import javax.jms.QueueBrowser;
import javax.jms.Session;
import org.springframework.jms.core.BrowserCallback;
import org.springframework.jms.core.JmsTemplate;
import org.springframework.jms.core.SessionCallback;
public class JmsQueueSender
{
public JmsQueueSender(){}
private JmsTemplate jmsTemplate;
private Destination destination;
private JMSMessageCreator jmsCreator;
public void sendMesage()
{
try
{
for (int i = 0; i < 5; ++i)
{
System.out.println("destination="+destination);
jmsTemplate.send(destination,new MessageCreator()
{
public Message createMessage(Session session) throws JMSException
{
return session.createTextMessage("Hello World! "
+ System.currentTimeMillis());
}
});
System.out.println("Message Num. "+i +" sent to Queue\n");
}
} catch (Exception e)
{
e.printStackTrace();
}
}
public void browserQueue()
{
jmsTemplate.browse(new BrowserCallback(){
public Object doInJms(Session arg0, QueueBrowser browser)
throws JMSException
{
Enumeration messages = browser.getEnumeration();
while (messages.hasMoreElements())
{
Object obj = messages.nextElement();
System.out.println("\nMessage is:"+obj);
}
return null;
}});
/* Integer count = (Integer) this.jmsTemplate.execute(new SessionCallback()
{
public Object doInJms(Session session) throws JMSException
{
int count = 0;
QueueBrowser browser = session.createBrowser((Queue) jmsTemplate.getDefaultDestination());
Enumeration messages = browser.getEnumeration();
while (messages.hasMoreElements())
{
count++;
Object obj = messages.nextElement();
System.out.println("-----obj===="+obj);
}
return new Integer(count);
}
});*/
}
public JmsTemplate getJmsTemplate()
{
return jmsTemplate;
}
public void setJmsTemplate(JmsTemplate jmsTemplate)
{
this.jmsTemplate = jmsTemplate;
}
public Destination getDestination()
{
return destination;
}
public void setDestination(Destination destination)
{
this.destination = destination;
}
}
测试代码
WebApplicationContext wac;
ServletContext application = getServletContext();
wac = WebApplicationContextUtils.getWebApplicationContext(application);//获取spring的context
JmsQueueSender jmsSender = (JmsQueueSender) wac.getBean("jmsSender");
jmsSender.sendMesage();
jmsSender.browserQueue();
发表评论
-
python学习摘要
2011-04-18 15:27 1438学习一门脚本语言是很 ... -
tmux快捷键
2011-04-16 07:39 1591摘要 http://rainbird.blog.51cto.c ... -
eclipse subclipse javahl 库加载错误
2011-04-13 17:31 2411网上搜集 http://islandlinux.org/how ... -
使用Msmtp mutt shell发邮件 (转)
2010-11-26 09:32 2875原文地址:http://fdsazi.blog.51cto.c ... -
Ubuntu10.0.4 Maven环境变量设置
2010-08-15 14:02 34981. 下载并解压缩apache-maven-2.2.1-bin ... -
Ubuntu10.0.4 Java环境变量设置
2010-08-15 14:00 4096Ubuntu10.0.4 下手工安装jdk及其环境变量设置 ... -
Managing Hierarchical Data in MySQL(转)
2010-07-09 10:01 1209http://dev.mysql.com/tech-resou ... -
JS的encode跟decode
2010-05-21 16:03 10680网上看到的,感觉能用得到,收藏下吧 /** * * URL ... -
Apache ActiveMQ
2009-12-25 15:46 3455一、特点 支持各种语言和协议的客户端。如:Java、C、C++ ... -
mysql数据的备份恢复命令
2009-12-14 15:37 1342记录下命令,害怕忘记! 导出整个数据库命令: D:\mys ... -
Struts2.18 的 interceptor
2009-12-08 08:20 3057首先定义我们自己的Interceptor package ... -
修改非安装版本mysql字符集
2009-12-08 08:08 1953如果我们的msyql是免安装版本,在windows系统下,my ... -
jqGrid学习 --------------自定义搜索
2009-12-06 15:45 15339定义自己的查询 <div id="myse ... -
jqGrid学习 -------------- 搜索工具栏
2009-12-06 15:13 13127搜索工具栏只是在列标题下面构造一个输入框。且使用表格的url进 ... -
jqGrid学习 -------------- 搜索
2009-12-06 13:32 9444表格中所有的列都可以作为搜索条件。 所用到的语言包文件 $ ... -
jqGrid学习 -------------- 自定义格式化类型
2009-12-06 13:04 8703<script> jQuery(" ... -
jqGrid学习 -------------- 格式化
2009-12-06 11:29 12494jqGrid的格式化是定义在 ... -
jqGrid学习 -------------- 自定义按钮
2009-12-06 11:14 16117用法: <script> ... jQue ... -
jqGrid学习 -------------- 翻页(2)
2009-12-06 10:32 8077jqGrid的翻页导航是一个方法,你可以事先定义一些其他操作, ... -
jqGrid学习 -------------- 翻页
2009-12-05 21:45 5402jqGrid的翻页要定义在html里,通常是在grid的下面, ...
相关推荐
"Myeclipse5.5 + Weblogic9.2 configure"这个主题涵盖了两个关键知识点:MyEclipse 5.5 和 WebLogic Server 9.2 的安装与配置。 首先,我们来详细了解MyEclipse 5.5。MyEclipse是一款基于Eclipse平台的商业Java集成...
2.4.3. 异步的JMS 2.4.4. JDBC 2.5. Web层 2.5.1. Spring MVC的表单标签库 2.5.2. Spring MVC合理的默认值 2.5.3. Portlet 框架 2.6. 其他特性 2.6.1. 动态语言支持 2.6.2. JMX 2.6 .3. 任务规划 2.6.4. 对Java 5...
2.4.4. 异步的JMS 2.4.5. JDBC 2.5. Web层 2.5.1. Spring MVC合理的默认值 2.5.2. Portlet 框架 2.5.3. 基于Annotation的控制器 2.5.4. Spring MVC的表单标签库 2.5.5. 对Tiles 2 支持 2.5.6. 对JSF 1.2支持...
Spring Framework 开发参考手册 Rod Johnson Juergen Hoeller Alef Arendsen Colin Sampaleanu Rob Harrop Thomas Risberg Darren Davison Dmitriy Kopylenko Mark Pollack ...19.2. 使用Spring JMS ...
2.4.4. 异步的JMS 2.4.5. JDBC 2.5. Web层 2.5.1. Spring MVC合理的默认值 2.5.2. Portlet 框架 2.5.3. 基于Annotation的控制器 2.5.4. Spring MVC的表单标签库 2.5.5. 对Tiles 2 支持 2.5.6. 对JSF 1.2支持...
19.3. 发送一条消息 19.3.1. 使用消息转换器 19.3.2. SessionCallback 和ProducerCallback 19.4. 接收消息 19.4.1. 同步接收 19.4.2. 异步接收 - 消息驱动的POJOs 19.4.3. SessionAwareMessageListener 接口 ...