文档章节

Spring和Apache CXF,ActiveMQ整合记录

精神病的羽毛球
 精神病的羽毛球
发布于 2014/04/12 16:56
字数 802
阅读 435
收藏 5

Spring 3.2.8

Apache CXF 1.6

ActiveMQ 5.9.0

Tomcat 8.0.3

MyEclipse 2013

1. Spring需要的jar包:

    spring-aopaop支持)

    spring-beans(配置spring bean必须的包)

    spring-context(应用上下文支持,必须)

    spring-corespring核心的包,包括io操作,cglib等)

    spring-experssion(可能是xml解析相关的包,不要的话XmlWebApplicationContext无法启动)

    spring-jmsjms支持)

    spring-web(在web容器中启动)

    spring-tx(事务支持)


    其中,spring-tx,spring-aop不是必选,根据需要。

2. CXF需要的jar包:

    cxf-api

    cxf-rt-bindings-soap

    cxf-rt-bindings-xml

    cxf-rt-core

    cxf-rt-databinding-jaxb

    cxf-rt-frontend-jaxws

    cxf-rt-frontend-simple

    cxf-rt-transports-http

    org-apache-servicemix-bundles-wsdl4j

    org-apache.servicemix-specs-jaxws-api

    stax2-api

    woodstox-core-asl

    xml-schema-core

    asm(貌似需要到第三方下载)

    cxf最坑爹。要么把所有jar包都加进去,肯定不出错,要么根据运行时的错误一个一个添加。

3. ActiveMQ

    activemq-all

    activemq-jms-pool

    activemq-pool

    commons-logging

    commons-pool



    其它的jar包也是根据需求添加。

1. Spring整合ActiveMQ

    Spring有个JmsTemplate专门用于支持JMSJmsTemplate虽然简化了JMS操作,但这个坑爹货每次发送消息时,默认都会建立新的connectionsessionproducer,并且发送完成后关闭。,这样的效率很低

    如果不是使用的JCA容器来管理JMS连接,可以使用AMQpoolingJMS连接。

    首先,配置连接工厂:

<bean id="jmsFactory" class="org.apache.activemq.pool.PooledConnectionFactory" destroy-method="stop">

    <property name="connectionFactory">

        <bean class="org.apache.activemq.ActiveMQConnectionFactory">

            <property name="brokerURL">

                <value>tcp://192.168.1.156:61616</value>

            </property>

        </bean>

    </property>

</bean>

    根据连接工厂配置jmsTemplate

<!-- Spring JMS Template 线程安全,所以只需要配置一个实例-->

    <bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">

        <property name="connectionFactory">

            <ref local="jmsFactory"/>

        </property>

    <!-- 启用QOS -->

    <property name="explicitQosEnabled"><value>1</value></property>

    <!-- 设置消息在broker中保存的最长时间-->

    <property name="timeToLive"><value>5000</value></property>

    <!-- 设置为NONPERSISTENT -->

    <property name="deliveryMode"><value>1</value></property>

    <!-- 接收数据的超时时间 -->

    <property name="receiveTimeout"><value>5000</value></property>

</bean>


    其中QOS参数timeToLive表示发送的消息在broker保存的最长时间delievryMode是发送模式(persistentnonpersistent,要设置QOS参数必须得启用explicitQosEnabled

    调用jmsTemplatereceive时默认是阻塞,可以设置receiveTimeout表示接收数据的超时时间。

    如果采用消息监听接收消息,需要配置MessageListener。首先是实现自己的消息监听类,再配置jmsContainer

    <!-- this is the Message Driven POJO (MDP) -->

    <bean id="messageListener" class="com.swiee.controller.ElecMessageListener" />

    <!-- and this is the message listener container -->    

    <bean id="jmsContainer"             class="org.springframework.jms.listener.DefaultMessageListenerContainer">

            <property name="connectionFactory">

                <ref local="jmsFactory"/>

              </property>

            <property name="destination" ref="consumerDest"/>

            <property name="messageListener" ref="messageListener" />

            <property name="sessionTransacted" value="true"/>

        </bean>



2. Spring整合CXF


        这个比我想象中简单很多。

        在spring的配置文件,或者单独的xml文件中,beans的命名空间加上

        xmlns:jaxws="http://cxf.apache.org/jaxws"

        xsi:schemaLocation="

        http://cxf.apache.org/jaxws

       http://cxf.apache.org/schemas/jaxws.xsd"

        然后就可以在配置文件中添加自己的ws相关的bean

        <bean id="hello" class="com.swiee.webservice.impl.HelloWorldImpl" />

        <jaxws:endpoint id="helloWorld" implementor="#hello" address="/HelloWorld" />


        其中hello这个bean就是具体的web service实现;jaxwsendpoint中,idbean的名字,implementor是具体的实现,address就是web service的访问地址。


3. web.xml文件到配置


    如果通过web容器发布服务,在web.xml文件中的配置包括springcxf

    spring设定监听器或servlet(兼容早期版本风格)启动spring应用上下文:

    <context-param>

        <param-name>contextConfigLocation</param-name>

        <param-value>classpath:applicationContext.xml</param-value>

        </context-param>

    <listener>

        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>

    </listener>


CXF使用servlet暴露web service

    <servlet>

        <description>Apache CXF Endpoint</description>

        <servlet-name>cxf</servlet-name>

        <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>

        <load-on-startup>1</load-on-startup>

    </servlet>

    <servlet-mapping>

        <servlet-name>cxf</servlet-name>

        <url-pattern>/*</url-pattern>

    </servlet-mapping>







© 著作权归作者所有

精神病的羽毛球
粉丝 2
博文 27
码字总数 20242
作品 0
成都
程序员
私信 提问
Apache Camel 2.6.0 发布

Apache Camel 是一个非常强大的基于规则的路由以及媒介引擎,该引擎提供了一个基于POJO的 企业应用模式(Enterprise Integration Patterns)的实现,你可以采用其异常强大且十分易用的API (可以...

红薯
2011/01/31
687
1
【求助】Maven 项目启动异常,求助!急!!!

[ERROR] Failed to execute goal on project jintai: Could not resolve dependencies for project com.transh:jintai:war:1.0.0: Failed to collect dependencies for [org.rxtx:rxtx:jar:2......

Lukerr
2015/04/16
10.1K
2
Apache Camel 2.13.2/2.12.4 发布

Apache Camel 2.13.2 发布,此版本包括 41 个 bug 修复,现已提供下载。 Apache Camel 2.12.4 发布,此版本现已提供下载,包括了 140 个 bug 修复。 Apache Camel 是一个非常强大的基于规则的...

chaun
2014/08/05
298
0
Apache Camel 2.11.3 发布,开源规则引擎

Apache Camel 2.11.3 发布,此版本包括了大量的系统改进,bug 修复和一些新特性。现已提供下载,更多更新信息请查阅 发行说明。 相关资料: [1] http://camel.apache.org/ [2] http://camel....

oschina
2014/01/17
1K
3
Apache Camel 2.11.4 发布

Camel 社区发布了新的补丁版本 camel-2.11.4,2月16日发布了 2.12.3 版本。此版本更新内容如下: Bug [CAMEL-6922] - XmlConverter cannot convert from ElementNSImpl to Document [CAMEL-6...

oschina
2014/02/26
1K
3

没有更多内容

加载失败,请刷新页面

加载更多

未初始化指针问题

《C和指针》书上说 int *a ... *a = 12 这样写声明一个变量,但未对指针初始化 如果指针是函数的形参,比如 void func(int *a) { (* a) = 12;//这样操作有无问题? } ======================...

天王盖地虎626
28分钟前
7
0
Python的一些细节 II

1. isinstance() 与 type() 区别 class type(name, bases, dict) name -- 类的名称。 bases -- 基类的元组。 dict -- 字典,类内定义的命名空间变量。 返回值:一个参数,返回对象的类型;三...

Eappo_Geng
39分钟前
4
0
笔试题-武汉珞珈德毅笔试题

1.写出Java语言的基本数据类型。 2.简述cookie和session区别。 1、cookie数据存放在客户的浏览器上,session数据放在服务器上。 2、cookie不是很安全,别人可以分析存放在本地的COOKIE并进行...

QuasimodoALei
50分钟前
7
0
IDEA Maven project: 'xxx/pom.xml' already exists in VFS

Failed to create a Maven project: ‘xxx/pom.xml‘ already exists in VFS idea创建项目后,发现项目有问题,删除后重新创建,提示错误如下。 解决办法 1.通过idea打开任意一个项目 2.File...

国产大熊猫
今天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部