声明:
有关于刚刚做了一个Servicemix代理的发布,但是在实际应用中我们往往做代理根本是不需要的。还不如直接就用应用服务器发布,那样做多此一举了,所以抽时间做了一个内部发布WebService的案例同样是用的Login案例做,上次做的不是很全面我想大家看了也不是很清楚,所以我收集了很多资料,废话少说了 奉上代码跟源码。大家在转文章的时候请注明出处,写案例也需要很多时间请尊重作者的劳动成果。
CXF-BC-LoginExample
关于servicemix部署的问题:由于servicemix是基于JBI的实现,要部署应当满足JBI的规范。
熟悉了servicemix对于JBI的规范就更加理解,对于其中大发布、热部署、消息转换、服务引擎都有了
比较深入的理解。当然由于之前没有看过JBI规范,对于servicemix 的定义以及相关信息不是很了解,所以理解起来比较困难。个人理解:服务集合包.zip文件就像Web应用的war文件
JBI原理(个人理解)
JBI环境通过基于JMX的管理工具提供部署,控制和监控特性。规格化的消息路由器(NMR)提供中间的消息基础设施。组件分成两类:Service Engine服务引擎和Binding Component组件。
JBI组件通常充当某种类型的容器,工件(artifact)可以被部署进这样的容器来增加新的服务或者提供逻辑。例如一个提供基于XSLT的转换服务的Service Engine将会需要部署有XSLT样式表,这样才能增加新的转换操作。往已安装的组件中增加这样的组件相关的工件的过程被称为部署。这样的工件被称为Service Unit,而部署工件加上一些相关元数据的集合称为Service Assembly。
JBI 打包
JBI定义了一个标准的打包用于安装新的组件,以及在这些充当容器的组件上部署工件。所有的工件在META-INIF目录中都有一个jbi.xml的JBI描述器。
有四种类型的工件,它们都被打包为zip或者jar文件:
1. components installers. 包含了运行组件所需要的库和资源。组件可以引用共享的库。
2. 共享库。可以被一些组件所共享的jar集合。
3. Service Units。是意在被部署到某个特定的组件的工件。除了有一个JBI描述器,这个service unit封装是组件相关的,可以以不同的形式出现:单个的XSLT样式表,一个BPEL流程,或者一些java类。
4. Service Assemblies。
(2) 执行 进入刚刚新建的文件夹执行,mvn install
如图(2)
服务集合包(Service Assembly Packaging)
服务集合包包含了对JBI来说不透明的部署信息,一个部署描述符,用来提供JBI部署服务如何处理部署包内容所需的信息。具体的安装过程在“部署服务”中描述。
部署包由一个部署描述符和一个或多个服务单元存档文件组成,它们都包含在一个ZIP存档文件中,其文件/目录结构如下:
- test-file-sa
/- META-INF
| |- jbi.xml (只包含符合部署描述符模型的部署描述)(1)
/- test-file-su
| /-META-INF
| | |- jbi.xml (services provides consumers)(2)
| |- xbean.xml (su的服务配置文件)(3)
(1) jbi.xml 结构事例
(1)、 (2) 、(3) 整个结构包括3个部分
(1) service-assembly集合包的根节点
(2)是对于服务集合service-assembly包的描述
(3)是对于service-assembly部署包中的服务组件service-unit的描述
<jbi xmlns="http://java.sun.com/xml/ns/jbi" version="1.0">
(1)<service-assembly> <!--service-assembly描述服务集合的部署包,它描述了服务集合所包含的服务单元以及这些服务单元将要被部署到的组件信息。
-->
(2)<identification><!--合成部署的唯一(在JBI系统中部署的所有服务集合中)标识符-->
<name>my-cxf-sa</name>
<description>Apache ServiceMix :: Service Assembly</description>
</identification>
(3)<service-unit> <!--service-unit描述service-assembly部署包中的服务组件-->
<identification> <!--service-unit的唯一(部署service-units的目标组件中唯一)名称-->
<name>my-cxf-bc-su</name>
<description>my-cxf-bc-su</description>
</identification>
<target> <!--artifacts-zip.将要部署的部署包中的存档文件名-->
<!--component-name.将要部署artifacts-zip的组件名-->
<artifacts-zip>my-cxf-bc-su-1.0-SNAPSHOT.zip</artifacts-zip>
<component-name>servicemix-cxf-bc</component-name>
</target>
</service-unit>
</service-assembly>
</jbi>
(2) services provides consumers示例(JBI规范摘要)
services声明服务单元提供和消费的静态服务。术语“static”在这里指服务单元部署后提供或消费的服务在设计时期和部署时发期是可知的。binding-component.脱机工具可使用该属性区分服务引擎和绑定组件。它对部署过程无影响。如果组件的类型(在安装描述符中声明的类型)与binding-component属性值不一致,实现会发出一个警告作为部署结果(或状态)的一部分。
Provides声明服务单元提供的服务。声明一个服务涉及到以下属性:
·interface-name.限定名表明所提供服务的类型。
· service-name和endpoint-name.这对属性声明了部署后服务单元要激活的端点名称。
Consumes声明服务单元消费的服务。定义一个这样的服务需要使用以下属性:
·interface-name.限定名表明所消费服务的类型。
·link-type.表明消费者希望通过连接做些什么。此属性的值可能为:
•standard.默认值。根据标准规格化消息路由规则路由提供的服务端点。
•hard.提供的服务端点名匹配服务提供者的服务端点名;不允许间接连接。
•soft.提供的服务端点名不匹配服务提供者的服务端点名,而是匹配一个间接的连接名
<services binding-component="false"/>
(3)su的服务配置文件xbean.xml
<cxfbc:consumer wsdl="classpath:Login.wsdl"
targetService="login:LoginService"
targetInterface="login:Login"/>
1 、新建一个文件夹 D:/LoginBc
2 、进入该文件夹
3、执行命令
(1)
mvn archetype:create -DarchetypeGroupId=org.apache.servicemix.tooling -DarchetypeArtifactId=servicemix-project-root -DgroupId=org.apache.servicemix.tutorial -DartifactId=tutorial-wsdl-cxf-service
如图 (1)
(3)进入该文件夹执行 下面代码创建bc组件
mvn archetype:create -DarchetypeGroupId=org.apache.servicemix.tooling -DarchetypeArtifactId=servicemix-cxf-bc-service-unit -DgroupId=org.apache.servicemix.examples -DartifactId=my-cxf-bc-su
修改tutorial-wsdl-cxf-service/my-cxf-bc-su/src/main/resources
文件夹下面的xbean.xml如图:
(4)进入该文件夹执行如下代码创建一个se引擎
mvn archetype:create -DarchetypeGroupId=org.apache.servicemix.tooling -DarchetypeArtifactId=servicemix-cxf-se-service-unit -DgroupId=org.apache.servicemix.examples -DartifactId=my-cxf-se-su
建好之后把项目META-INF下面的接口实现类件以及wsdl文件拷贝到
my-cxf-se-su/src/main/resources文件夹下面如图:
java文件夹下面
修改wsdl以及xbean.xml如图
wsdl
xbean.xml
再然后修改pom.xml文件,加入一段指令如图:
(5)进入该文件夹创建一个sa组件
(6)在sa中对se跟bc添加依赖如图:
到这里就准备工作就做完了,进入tutorial-wsdl-cxf-service
执行 mvn install 看到如下信息