转载: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
- protected void validate()
- {
-
if (isValid())
-
return;
-
-
super.validate();
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- }
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文件
- public void start() throws NamingException, JMSException
- {
-
this.connectionFactory=(ConnectionFactory) SpringContext.getBean("JmsConnectionFactory");
-
this.destination=(Destination) SpringContext.getBean("JmsDestination");
-
-
-
-
- }
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的配置
-
-
<bean id="JmsConnectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">
-
<property name="brokerURL" value="${jms.activemq_url}"></property>
-
</bean>
-
-
-
<bean id="JmsDestination" class="org.apache.activemq.command.ActiveMQTopic">
-
<constructor-arg index="0" value="${jms.activemq_topic}"></constructor-arg>
-
</bean>
-
-
-
<bean id="JmsTemplate" class="org.springframework.jms.core.JmsTemplate">
-
<property name="connectionFactory" ref="JmsConnectionFactory"/>
-
<property name="defaultDestination" ref="JmsDestination"/>
-
</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的配置信息。
- <!-- JMS消息目标的配置 -->
-
<destination id="scanfile">
-
<adapter ref="jms" />
- <channels>
-
<channel ref="my-polling-amf" />
-
<channel ref="my-streaming-amf" />
- </channels>
- </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消息服务
分享到:
相关推荐
整合spring3 blazeds activeMQ(jms) 通过flex consumer来订阅消息。时时更新消息内容
Spring BlazeDS Integration,Flex通过remoteObject与java通讯,附带例子 文档
spring+blazeDS+flex4整合的例子,项目可以直接运行,jar包都齐全 模拟数据库返回的list 在页面上 输出
elipse下配置的spring+flex+blazeds,进行消息推送,还加入了了quarz定时策略。希望对大家有帮助。
Flex Spring BlazeDS整个web工程,其中FlexServer是整合后的myeclipse web project工程,FlexText是Flex测试工程。在tomcat中运行测试无误。
Flex技术本身和Java就有很强的关联性,它提供了一个基于Eclipse的IDE和BlazeDS.BlazeDS是个基于服务端的Java远程调用和Web消息的一个开源的技术。...在2008年末,Spring社区已经着手Spring BlazeDS整合的项目。
flex页面源码 博文链接:https://jhaij.iteye.com/blog/832478
使用flex 4.5 + Spring 3.0 + Hibernate 3.3 + Cairngorm 2.2.1 + BlazeDS 3.3.0 + Spring BlazeDS Integration 1.0.3整合出的一个登录的小demo·
spring flex BlazeDS 集成官方文档(英文)是springsource提供的关于如何集成spring flex文档
最简单的BlazeDS实现flex与java通信..无积分下载...最简单的BlazeDS实现flex与java通信..无积分下载...最简单的BlazeDS实现flex与java通信..无积分下载...最简单的BlazeDS实现flex与java通信..无积分下载...最简单的...
Spring BlazeDS Integration 1.0.0
blazeds4整合spring3 这是我新近研究的方法 与整合spring2.5以下的方法有不同了,(看过一些教程觉得不是很好,用起来不顺手) 最终参考了官方的sample,得到了这个不错的整合方法。 把要用blazeds公开给flex的java...
blazeds与spring的结合使用项目源码
flex-spring-blazeds demo
flex+spring+blazeds在MyEclipse下非常详细的结合配置
Spring MVC+BlazeDS+Flex框架实践
Flex blazeds-spring Flex blazeds-spring Flex blazeds-spring Flex blazeds-spring Flex blazeds-spring Flex blazeds-spring
使用BlazeDS实现flex与java 整合 使用BlazeDS实现flex与java 整合 flex+java
构建整合Hibernate,Spring和BlazeDS的Flex开发环境