`
a3mao
  • 浏览: 565700 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Spring+weblogic9.2发送JMS消息

    博客分类:
  • Work
阅读更多
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();
1
0
分享到:
评论

相关推荐

    Myeclipse5.5 + Weblogic9.2 configure

    "Myeclipse5.5 + Weblogic9.2 configure"这个主题涵盖了两个关键知识点:MyEclipse 5.5 和 WebLogic Server 9.2 的安装与配置。 首先,我们来详细了解MyEclipse 5.5。MyEclipse是一款基于Eclipse平台的商业Java集成...

    Spring-Reference_zh_CN(Spring中文参考手册)

    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...

    Spring中文帮助文档

    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 chm文档

    Spring Framework 开发参考手册 Rod Johnson Juergen Hoeller Alef Arendsen Colin Sampaleanu Rob Harrop Thomas Risberg Darren Davison Dmitriy Kopylenko Mark Pollack ...19.2. 使用Spring JMS ...

    Spring API

    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 2.0 开发参考手册

    19.3. 发送一条消息 19.3.1. 使用消息转换器 19.3.2. SessionCallback 和ProducerCallback 19.4. 接收消息 19.4.1. 同步接收 19.4.2. 异步接收 - 消息驱动的POJOs 19.4.3. SessionAwareMessageListener 接口 ...

Global site tag (gtag.js) - Google Analytics