`

Spring整合Blazeds实现ActiveMQ JMS消息服务

    博客分类:
  • JMS
阅读更多

转载:http://yunzhongxia.iteye.com/blog/789698

 

 

  上一篇中简单实现了Blazeds的JMS消息服务功能,但是JMS相关的配置信息都在messaging-config.xml文件中配置的,项目部署人员需要同时维护messaging-config.xml和Spring的jms配置信息,如果能把两者整合在那是一件很美妙的事情。经过我的一番努力终于统一了blazeds和spring的jms消息服务。

      先来说下我的大概思路:JMSAdapter是jms的消息适配器,它会加载messaging-config.xml里面jms的配置信息,JMSProxy是JMS服务的代理,它会根据配置信息连接ConnectionFactory、创建Destination。知道了,JMS的工作流程那就开始改造代码:

      修改JMSAdapter.java

     

Java代码 复制代码
  1.     protected void validate()   
  2.     {           
  3.         if (isValid())   
  4.             return;   
  5.            
  6.         super.validate();   
  7.            
  8. //        if (settings.getConnectionFactory() == null)   
  9. //        {   
  10. //            // JMS connection factory of message destinations with JMS Adapters must be specified.               
  11. //            ConfigurationException ce = new ConfigurationException();   
  12. //            ce.setMessage(MISSING_CONNECTION_FACTORY);   
  13. //            throw ce;   
  14. //        }   
  15. //           
  16. //        if (settings.getDestinationJNDIName() == null)   
  17. //        {   
  18. //            // JNDI names for message destinations with JMS Adapters must be specified.   
  19. //            ConfigurationException ce = new ConfigurationException();   
  20. //            ce.setMessage(JMSConfigConstants.MISSING_DESTINATION_JNDI_NAME);   
  21. //            throw ce;               
  22. //        }   
  23.   
  24. //        if (settings.getMessageType() == null)   
  25. //        {   
  26. //            // Unsupported JMS Message Type ''{0}''. Valid values are javax.jms.TextMessage and javax.jms.ObjectMessage.    
  27. //            ConfigurationException ce = new ConfigurationException();   
  28. //            ce.setMessage(INVALID_JMS_MESSAGE_TYPE, new Object[] {null});   
  29. //            throw ce;               
  30. //        }           
  31.     }  
    protected void validate()
    {        
        if (isValid())
            return;
        
        super.validate();
        
//        if (settings.getConnectionFactory() == null)
//        {
//            // JMS connection factory of message destinations with JMS Adapters must be specified.            
//            ConfigurationException ce = new ConfigurationException();
//            ce.setMessage(MISSING_CONNECTION_FACTORY);
//            throw ce;
//        }
//        
//        if (settings.getDestinationJNDIName() == null)
//        {
//            // JNDI names for message destinations with JMS Adapters must be specified.
//            ConfigurationException ce = new ConfigurationException();
//            ce.setMessage(JMSConfigConstants.MISSING_DESTINATION_JNDI_NAME);
//            throw ce;            
//        }

//        if (settings.getMessageType() == null)
//        {
//            // Unsupported JMS Message Type ''{0}''. Valid values are javax.jms.TextMessage and javax.jms.ObjectMessage. 
//            ConfigurationException ce = new ConfigurationException();
//            ce.setMessage(INVALID_JMS_MESSAGE_TYPE, new Object[] {null});
//            throw ce;            
//        }        
    }

 

注释掉的代码是因为在messaging-config.xml中没有了JMS相关的配置信息。

 

   修改JMSProxy.java文件

  

Java代码 复制代码
  1. public void start() throws NamingException, JMSException   
  2.  {   
  3.     this.connectionFactory=(ConnectionFactory) SpringContext.getBean("JmsConnectionFactory");   
  4.              this.destination=(Destination) SpringContext.getBean("JmsDestination");   
  5.     //validate();   
  6.              //initializeJndiContext();   
  7.              //initializeConnectionFactory();   
  8.              //initializeDestination();   
  9.  }  
   public void start() throws NamingException, JMSException
    {
    	this.connectionFactory=(ConnectionFactory) SpringContext.getBean("JmsConnectionFactory");
                this.destination=(Destination) SpringContext.getBean("JmsDestination");
    	//validate();
                //initializeJndiContext();
                //initializeConnectionFactory();
                //initializeDestination();
    }

 

SpringContext的getBean方法的作用是根据spring配置的beanID实例化相关的bean信息。附件中给我了SpringContext的源代码。JmsConnectionFactory为jms的连接工厂,JmsDestination是jms的消息主题Topic

 

下面是spring的jms相关bean的配置

 

Xml代码 复制代码
  1. <!-- JMS连接工厂 brokerURL方式 例如ActiveMQ-->  
  2. <bean id="JmsConnectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">  
  3.     <property name="brokerURL" value="${jms.activemq_url}"></property>  
  4. </bean>  
  5.        
  6. <!--JMS Topic目的地 例如 ActiveMQ-->  
  7. <bean id="JmsDestination" class="org.apache.activemq.command.ActiveMQTopic">  
  8.     <constructor-arg index="0" value="${jms.activemq_topic}"></constructor-arg>  
  9. </bean>  
  10.   
  11. <!-- JMS模板 -->  
  12. <bean id="JmsTemplate" class="org.springframework.jms.core.JmsTemplate">  
  13.     <property name="connectionFactory" ref="JmsConnectionFactory"/>  
  14.     <property name="defaultDestination" ref="JmsDestination"/>  
  15. </bean>  
	<!-- JMS连接工厂 brokerURL方式 例如ActiveMQ-->
	<bean id="JmsConnectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">
		<property name="brokerURL" value="${jms.activemq_url}"></property>
	</bean>
		
	<!--JMS Topic目的地 例如 ActiveMQ-->
	<bean id="JmsDestination" class="org.apache.activemq.command.ActiveMQTopic">
		<constructor-arg index="0" value="${jms.activemq_topic}"></constructor-arg>
	</bean>
	
	<!-- JMS模板 -->
	<bean id="JmsTemplate" class="org.springframework.jms.core.JmsTemplate">
		<property name="connectionFactory" ref="JmsConnectionFactory"/>
		<property name="defaultDestination" ref="JmsDestination"/>
	</bean>

 

 下面是messaging-config.xml文件中JMS的配置信息。

Java代码 复制代码
  1. <!-- JMS消息目标的配置 -->   
  2. <destination id="scanfile">   
  3.            <adapter ref="jms" />   
  4.            <channels>   
  5.                      <channel ref="my-polling-amf" />   
  6.                      <channel ref="my-streaming-amf" />   
  7.             </channels>   
  8. </destination>  
<!-- JMS消息目标的配置 -->
<destination id="scanfile">
           <adapter ref="jms" />
           <channels>
                     <channel ref="my-polling-amf" />
                     <channel ref="my-streaming-amf" />
            </channels>
</destination>

 

 Ok,到此为止,已经整合完毕,整合后context.xml文件就不需要了。

附件给我了我修改后的flex-messaging-core.jar和SpringContext的源码。到目前为止Blazeds的配置已经很简单了,但是还有一种更好的方案就是org.springframework.flex,该组件主要作用是Blazeds和Spring的整合,在以后的文章中我会继续向大家介绍这个组件的使用方法。

 

    本片介绍了activemq的实现方法,如果是weblogic服务器则可以使用weblogic自带的jms服务,spring配置weblogic信息,可以参考我的下一篇文章,Spring整合Blazeds实现Weblogic JMS消息服务

分享到:
评论

相关推荐

    Spring BlazeDS Integration Spring集成BlazeDS

    综上所述,Spring BlazeDS Integration 提供了一个高效且灵活的途径,让Spring后端服务与Flex前端应用无缝对接,从而在企业级应用开发中实现强大的交互性和用户体验。通过文档"Flex与Java通讯文档三",读者可以深入...

    spring blazeds 整合实例(源码)

    综上所述,这个压缩包提供了一套完整的Spring与BlazeDS整合的实例,包括源代码和可能的教程,对于学习和掌握两者之间的集成技术非常有帮助。通过深入研究这些文件,开发者可以更好地理解和应用Spring框架与BlazeDS在...

    flex+spring+blazeds消息推送

    而“bbs”可能是项目中的一个模块或示例,比如一个论坛系统,展示了如何使用Flex和Spring实现消息推送功能。 总的来说,这个项目展示了如何在Eclipse环境下集成Flex、Spring和BlazeDS来创建一个具备实时消息推送...

    spring+blazeDS+flex4 例子

    《Spring、BlazeDS与Flex4的整合应用详解》 在现代Web开发中,构建交互性强、用户体验良好的富互联网应用程序(Rich Internet Applications, RIA)是开发者追求的目标。Spring、BlazeDS和Flex4的结合,正是实现这一...

    spring3+ActiveMQ+blazeds+flex consumer

    本项目“spring3+ActiveMQ+blazeds+flex consumer”旨在整合一系列技术,以实现这样的功能。下面将详细阐述这些技术及其整合过程。 首先,Spring框架(Spring3)是Java领域最流行的轻量级应用框架之一,它提供了...

    Flex Spring JAVA BLAZEDS整合

    【Flex Spring JAVA BLAZEDS整合】是一种技术实践,它将Adobe Flex的前端展示层与Spring框架的后端业务逻辑层紧密结合,利用BlazeDS作为中间件进行数据传输。Flex作为一个强大的RIA(富互联网应用程序)开发平台,常...

    Flex_Spring_BlazeDS完整整合包

    Flex Spring BlazeDS整个web工程,其中FlexServer是整合后的myeclipse web project工程,FlexText是Flex测试工程。在tomcat中运行测试无误。

    BlazeDS+Spring+activeMQ outofmemory

    标题 "BlazeDS+Spring+activeMQ outofmemory" 指的是在使用BlazeDS、Spring和ActiveMQ集成的环境中遇到了内存溢出问题。BlazeDS是一个开放源码的服务器端技术,它允许双向通信,使Flex或AJAX客户端能够与Java后端...

    flex-spring-blazeds demo

    《Flex-Spring-BlazeDS整合应用探索》 在当今的Web开发领域,富互联网应用程序(Rich Internet Applications,简称RIA)已经成为提升用户体验的重要手段。Flex作为Adobe提供的RIA开发框架,以其强大的图形用户界面...

    Spring BlazeDS Integration 1.0.0

    5. **使用场景**:Spring BlazeDS Integration适用于需要构建富前端展示并与后端Java服务深度集成的应用,比如金融交易系统、实时数据分析平台或者复杂的企业级管理界面。 6. **配置与实践**:集成Spring BlazeDS...

    Flex、Spring整合:Spring BlazeDS Integration

    标题中的“Flex、Spring整合:Spring BlazeDS Integration”指的是在Java后端使用Spring框架与前端Flex应用程序进行集成的一种技术方案。BlazeDS是Adobe提供的一个开源项目,它为富互联网应用(RIA)提供了数据推送...

    spring-blazeds结合项目源码

    Spring通过Spring BlazeDS Integration项目实现了与BlazDS的无缝对接。该项目提供了一组Spring Bean定义,使得在Spring应用上下文中配置BlazDS服务变得更加简单。通过Spring,你可以声明式地定义...

    flex4+spring+blazeds整合技术

    《Flex4+Spring+BlazeDS整合技术详解》 在当今的Web开发中,富互联网应用程序(Rich Internet Applications,简称RIA)已经成为一种趋势,而Flex作为Adobe提供的RIA开发框架,结合Spring的优秀企业级服务管理和...

    Spring整合flex-Spring BlazeDS Integration-带项目demo

    Spring BlazeDS Integration是Spring框架的一个组件,它提供了与Adobe Flex的无缝集成,允许后端Java服务与前端Flex客户端进行通信。这个项目demo提供了实际操作的例子,帮助开发者理解和实现Spring与Flex的结合。 ...

    Spring MVC+BlazeDS+Flex框架实践

    4. 集成Spring:在Spring配置文件中声明后端服务,并启用BlazeDS支持。 5. 建立连接:在Flex客户端,使用RemoteObject或HTTPService组件连接到BlazeDS服务。 6. 测试与调试:运行Flex应用,确保前端和后端的通信正常...

    flex 结合spring activemq 做的一个简易聊天室

    3. ActiveMQ:Apache ActiveMQ是流行的开源消息代理和消息中间件,实现了多种消息协议,如JMS(Java消息服务)。它允许应用程序之间通过消息传递进行异步通信,非常适合构建聊天室这样的实时应用。 4. JMS(Java...

    整合blazeds和spring需要的jar包

    - `spring-jms.jar`: 用于JMS(Java Message Service)集成,这在Blazeds与Spring集成时可能会用到。 - `spring-tx.jar`: 提供事务管理支持。 3. **其他可能需要的jar包**: - `commons-logging.jar`: 用于日志...

    flex+Spring+Hibernate+Cairngorm+BlazeDS+Spring BlazeDS Integration整合框架

    使用flex 4.5 + Spring 3.0 + Hibernate 3.3 + Cairngorm 2.2.1 + BlazeDS 3.3.0 + Spring BlazeDS Integration 1.0.3整合出的一个登录的小demo·

    最简单的BlazeDS实现flex与java通信.rtf

    最简单的BlazeDS实现flex与java通信..无积分下载...最简单的BlazeDS实现flex与java通信..无积分下载...最简单的BlazeDS实现flex与java通信..无积分下载...最简单的BlazeDS实现flex与java通信..无积分下载...最简单的...

Global site tag (gtag.js) - Google Analytics