CXF的HTTP transport原本是基于Jetty5的,但是Jetty6提供了很多新的功能,例如NIO以及通过Comet和Continuations支持异步的Servlet操作。前段时间我的一项工作就是要让CXF 的HTTP module支持Jetty6。
现在这一工作告一段落,写下这篇文章和大家分享一下我的体会。
有关Jetty5到Jetty6的迁移可以参考这篇文章
由HTTP module是一个CXF的一个基础模块,据说SVN的Branch功能支持有限(ClearCase功能的确强大。谁叫SVN是免费呢,咱还是忍了。),为了不影响 main line 的代码,我采取了以下方式来进行开发。
1。 拷贝 HTTP module 到 HTTP2 module
2。 在 HTTP2 module上面做修改
3。 等修改差不多完成了,咱再把HTTP module 替换成 HTTP2 module
也许你会问这么做,创建了HTTP2之后HTTP上面的修改如何反映到HTTP2上呢?
开始我想这活大概一个月就完事了,由于HTTP比较稳定这一段时间的修改我可以手工完成。但是在具体操作过程中还是出了一些问题。
先是 HTTP2小改完,我出了一趟半个礼拜的差,等回来跑测试突然发现JettySSLSelectChannelConnector还是一个PreAlpha的状态,我后面又有其他的活,于是HTTP2就此搁置起来了。
这一搁置就是快两个月,期间HTTP module经历过十几次的改动。在这些改动中,有些同志顺道也改了一下HTTP2,但是有大概六七次的改动没有同步到HTTP2中。(别看我记的这么清楚,这些改动我都是一个一个从commit mail中找出来的,这也算是一个教训啊。)
更大的问题是,我没有意识到这么多HTTP的改动没有同步到HTTP2中,以至于前两天做3步操作的时直接将HTTP2的文件拷贝到HTTP中,而不得周末花了快20个小时手工完成了HTTP与HTTP2的合并工作。
XP ,提倡的拥抱变化,其精神就是要将修改变小,而且每次修改都是可以通过测试验证的,这样才能保证我的修改成本不高,可以在不做详细设计的情况下编码,并能够持续的进行集成。
我做这次合并的最大体会是,我没有仔细阅读commit mail来发现HTTP2已经和HTTP有很大不同的,同时由于测试覆盖面的问题,没有发现HTTP2丢失了那些改动,造成了我的3步迁移变成了代价很高的举动。
为了避免悲剧的再次重演,我得好好研究一下SVN Branch的功能,还有就是多写测试,写好测试。
分享到:
相关推荐
5. **集成Jetty** 引入Jetty依赖,并在Java代码或配置文件中启动Jetty服务器,将CXF的Servlet注册到Jetty上。这样,Jetty将负责处理HTTP请求,并将它们转发给CXF处理Web服务。 6. **发布服务** 启动Jetty服务器,...
5. 如果需要,查看CXF和Jetty的源码,理解其内部工作原理,以找出可能的根源问题。 6. 在社区论坛如ITEYE(链接给出的博客平台)或其他专业论坛上寻找类似问题的解决方案或寻求其他开发者的意见。 总之,解决"Cxf +...
标题 "cxf-rt-transports-http-jetty-3.0.2.zip" 指的是Apache CXF项目的一个特定版本的HTTP-Jetty传输模块。Apache CXF是一个流行的开源框架,用于构建和开发服务导向架构(SOA)和RESTful Web服务。这个版本,...
5. **配置Jetty**:在CXF的配置中,启用内置的Jetty服务器,并指定服务监听的端口。 6. **启动服务**:通过Spring的ApplicationContext加载配置,CXF会自动将服务注册到Jetty服务器,然后启动Jetty,服务即可对外...
标题 "CXF2.6.4+Spring3.1.1+Jetty7.5.4" 提到的是一个基于开源技术栈构建的Web服务解决方案。这个组合涉及到三个关键组件:Apache CXF 2.6.4、Spring Framework 3.1.1 和 Jetty 7.5.4。接下来,我们将深入探讨这三...
5. **嵌入式模式**:Jetty可以被轻松地嵌入到其他Java应用中,使得CXF服务的集成变得更加简单。 6. **模块化设计**:Jetty的模块化结构允许用户根据需要选择加载特定的功能,这样可以保持部署的精简和高效。 至于...
6. **插件体系**:CXF的插件体系允许开发者自定义和扩展其功能,比如添加新的数据绑定机制、处理特定的协议或格式。 7. **测试工具**:CXF提供了诸如CXF TestSuite这样的工具,便于开发者测试Web服务的正确性和性能...
5. **MTOM和SwA支持**:CXF实现了Message Transmission Optimization Mechanism (MTOM) 和 Soap with Attachments (SwA),这两者都提高了处理大型二进制数据的效率。 6. **Spring集成**:CXF与Spring框架深度集成,...
5. **容器集成**:虽然在这个压缩包中提到可以不依赖Tomcat,但CXF可以与各种应用服务器集成,包括Tomcat、Jetty、JBoss等。这里的"**用jetty**"意味着我们可以直接使用Jetty作为服务的运行环境,它比Tomcat更轻量级...
6. **多种绑定支持**:CXF支持多种传输协议,如HTTP、HTTPS、JMS等,并且能够与多种消息格式(如XML、JSON)配合使用。 7. **集成性**:CXF可以很好地与Spring框架集成,允许开发者利用Spring的依赖注入和管理功能...
5. `cxf-rt-transports-http-jetty.jar`:用于使用Jetty服务器的HTTP传输模块。 6. `cxf-rt-wsdl.jar`:处理WSDL的模块。 7. `cxf-rt-bindings-soap.jar`:SOAP绑定模块。 8. `cxf-rt-bindings-xml.jar`:XML绑定...
- Jetty是一个轻量级、快速且可嵌入式的HTTP服务器,常被用作CXF的默认服务器。 - 配置CXF与Jetty的集成,可以快速启动和运行Web服务,而无需完整安装Web服务器。 5. **CXF与Tomcat服务器** - Tomcat是Apache...
4. `jetty-server-9.2.15.v20160210.jar` 和 `jetty-util-9.2.15.v20160210.jar`:Jetty是一个轻量级的HTTP服务器和Servlet容器,CXF可以利用它来处理HTTP通信。这两个库是Jetty的组成部分,分别提供了服务器和通用...
`cxf-rt-transports-http-jetty.jar`包含了Jetty服务器的集成,可以用于快速搭建和测试CXF服务的本地环境。 5. **WS-Security支持**: 对于需要安全性的Web服务,如WS-Security,CXF提供了相应的jar包,如`cxf-rt...
- 在服务器环境中,可以使用CXF的Servlet或Jetty容器来部署Web服务,通过修改`etc/cxf.xml`等配置文件进行定制。 - 客户端可以使用CXF的动态客户端API或者生成的Java客户端代码来调用服务。 6. **标签解析** ...
Apache CXF可以利用Jetty来托管Web服务,提供HTTP和HTTPS的支持,以及安全性配置。 3. `xmlschema-core-2.0.3.jar`:XML Schema是一个用于定义XML文档结构的语言,这个库提供了对XML Schema的处理和验证功能,对于...
和`cxf-rt-transports-http-jetty.jar`,它们分别提供了基础HTTP和Jetty服务器的支持。 3. **数据绑定**: CXF支持多种数据绑定技术,如JAXB(Java Architecture for XML Binding)和XMLBeans。相关的jar包如`cxf-...
5. **CXF的部署**:CXF支持多种部署方式,包括独立运行(使用CXF的Servlet容器)、嵌入式在其他应用服务器中(如Tomcat、Jetty),或者作为OSGi服务。在部署时,你需要将CXF的依赖库加入到项目的类路径中,并配置...
6. **部署方式**:CXF服务可以部署在各种容器中,例如Tomcat、Jetty等,或者作为独立的Java应用运行。 7. **调试工具**:CXF提供了强大的调试工具,如CXF的WS-Security Debugger,可以帮助开发者调试WS-Security...
5. **协议转换**:CXF可以将Web服务绑定到各种传输协议,如HTTP、HTTPS、JMS等,使得服务可以在不同的网络环境中工作。 6. **客户端API**:CXF提供了一个强大的客户端API,使得调用Web服务如同调用本地方法一样简单...