【IT168技术文档】
在JAXWS2.0发布以前,用JAVA发布一个WebService是一件相当复杂的工作,令很多开发高手都望而却步;但随着JAXWS2.0、2.1版本的发布,通过大量使用JAVA annotation特性,以及运用JAXB20规范来统一数据展示,从而大大简化和规范了开发过程,一些新的开源框架也随之诞生。Apache CXF就是其中的佼佼者。它实现了JCP与Web Service2.1中一些重要标准。CXF简化了构造,集成,面向服务架构(SOA)业务组件与技术的灵活复用。在CXF中,Service使用WSDL标准定义并能够使用各种不同的消息格式(或binding)和网络协议(transports)包括SOAP、XML(通过HTTP或JMS)进行访问。
而OSGI技术更是JAVA社区近来的热点,它将面向contract,插件化,组件化的设计思想上升到一个理论的高度,推出了一系列的规范和参考实现;Spring DM更是在OSGI基础上将Spring的DI能力扩充到OSGI层面,并对OSGI规范中缺少的部分加以补充和完善,使之成为更具有实践应用价值的框架。
这篇文件将介绍如何运用这两个开源项目来实现WebService的组件化发布。
环境:
Eclipse3.4
JDK1.605
CXF2.1.1
Spring DM1.0.3
第一步:在Eclipse下创建新的工作区;
第二步:导入Spring DM的Bundle,主要导入以下几个Bundle:
(1)org.springframework.bundle.osgi.core
(2)org.springframework.bundle.osgi.extender
(3)org.springframework.bundle.osgi.io
(4)org.springframework.bundle.spring.aop
(5)org.springframework.bundle.spring.beans
(6)org.springframework.bundle.spring.context
(7)org.springframework.bundle.spring.core
(8)org.springframework.osgi.aopalliance.osgi
第三步:导入其他Eclipse下的Bundle
(1)org.apache.commons.logging
(2)org.eclipse.equinox.http.jetty
(3)org.eclipse.equinox.http.servlet
(4)org.eclipse.osgi.services
(5)org.mortbay.jetty
设计的原则:
(1) CXF将被独立封装成一个Bundle;
(2) CXF Bundle对外提供OSGI服务,其他Bundle可以利用这个服务来发布Web Service;
(3) CXF内部缺省使用了Spring的库,而Spring DM环境也带了Spring 的库,所以在实现CXF Bundle的时候要使CXF运行于None Spring模式;
(4) 充分考虑系统的封装型和可扩展能力;
(5) Web Service必须是动态发布;