快速开始
因为Fuse的核心组成部分是ServiceMix,
所以“用Fuse开发WebService”也就是“用ServiceMix开发WebService”。
[ServiceMix提供了大量的开发工具(http://search.maven.org/#search%7Cga%7C1%7Corg.apache.servicemix.tooling),
其中servicemix-cxf-code-first-osgi-bundle是用于开发“代码优先”的Web Service的一个maven archetype。可以快速创建一个demo:
1 | mvn archetype:generate \ |
会创建如下结构的一个工程:
从pom.xml
来看,这是一个使用maven-bundle-plugin构建的OSGi bundle工程。
Apache CXF与Spring
上面的工程中包含了`META-INF/spring/beans.xml’文件:
1 | <?xml version="1.0" encoding="UTF-8"?> |
说明这个bundle依赖ServiceMix中集成的Spring DM插件
可见,该工程中使用了Spring DM。
之所以在ServiceMix中既有Apache Areis Blueprint,又有Spring DM,是因为有很多遗留系统是基于Srping的。比如,Apache CXF就专门提供了使用Sping集成和发布WebService的机制。
上面beans.xml
中的<jaxws:endpoint>
标签,就是由CXF提供的专门用于spring的schema中定义。
在ServiceMix中,CXF通过OSGi bundle: cxf-bundle-compatible
被容器管理。
部署到ServiceMix
执行mvn package
后,得到webservice-demo-1.0.0-SNAPSHOT.jar
,这是一个OSGi bundle。可以将jar文件部署到
$SERVICEMIX_HOME/deploy/
目录中。正常情况下,bundle的依赖关系被满足,该bundle会被自动启动。
此时访问http://localhost:8181/cxf,应该能够在Apache CXF服务清单中看到beans.xml
中定义的web service。
从ServiceMix到Fuse
上述的过程也适用于JBoss Fuse。
但是Fuse对ServiceMix进行了再次封装,需要使用Fuse对应的版本。比如,servicemix-cxf-code-first-osgi-bundle
的版本可能要使用2012.01.0.redhat-60024
这样的“Fuse版本号”,否则在部署到Fuse是可能会发生版本不匹配的问题。
Fuse提供了一个maven仓库,专门提供这种定制版本的组件,需要在maven中配置:
1 | <repository> |