跑步

Tuscany SCA扩展机制研究(Binding)

2019-09-13 19:20:39来源:励志吧0次阅读

2、 扩展Binding

SCA规范中对Binding的定义有两种,一种为Service Binding,一种为Reference Binding。Service Binding定义了外部客户用来访问Service的入口,Reference Binding描述了引用外部服务的方式,换句简单的话说就是,Reference Binding为引进(与贸易名词‘进口’对应),Service Binding为导出(与贸易名词‘出口’对应)。

目前已实现的binding方式有:rmi,ejb,jms,sca,webservice,其中有些binding实现还不支持service binding,仅支持reference binding。

Binding的装配时运行图如下:

下面详细说明一下在Tuscany中实现一种扩展Binding的方式。

a. 定义Reference,Service Binding上的扩展模型

b. 定义模型Binding的接口及实现,在其中可以定义用户自己的一些属性,接口必须要实现org.apache.tuscany.sca.assembly.Binding,此接口中定义了Binding中的一些基本属性如URI等。

c. 定义binding的解析器,实现接口StAXArtifactProcessor,其中包含了read,write,resolve方法,分别负责读自定义的节点,Binding实例保存,扩展解析生成的Binding对象。

d. 定义Binding提供者的工工厂类,实现接口BindingProviderFactory,在其中要实现ReferenceBindingProvider,ServiceBindingProvider的创建,分别负责Reference Binding,Service Binding的具体动作。

e. 实现ModuleActivator,在其start方法中注册binding解析器和BindingProviderFactory

f. 在系统注册Binding(在com.primeton.sca.runtime.IModelLoade文件中注册ModuleActivator)

示例

扩展Binding示例,实现echo的功能,reference binding引用service binding提供的服务。

a. 在composite定义文件中binding的使用方式如下

<composite xmlns="http://www.osoa.org/xmlns/sca/1.0" targetNamespace="http://sample/echo" xmlns:se="http://sample/echo" xmlns:e="http://echo" name="EchoBinding"> <service name="EchoService" promote="EchoComponent"> <interface.java interface="echo.Echo"/> <e:binding.echo uri="http://tempuri.org" /> </service> <component name="EchoComponent"> <implementation.java class="echo.EchoComponentImpl"/> </component> <reference name="EchoReference" promote="EchoComponent/echoReference"> <interface.java interface="echo.Echo"/> <e:binding.echo uri="http://tempuri.org" /> </reference> </composite> 其schema如下:

<element name=“binding.echo" type="sca:EchoBinding" substitutionGroup="sca:binding" /> <complexType name=“EchoBinding"> <complexContent> <extension base="sca:Binding“/> </complexContent> </complexType> b.定义EchoBinding接口,扩展了org.apache.tuscany.sca.assembly.Binding

/** *AmodelforthesampleEchobinding. */ publicinterface EchoBinding extends Binding { } c.定义EchoBindingFactory接口,通过此工厂可以生成EchoBinding实例 publicinterface EchoBindingFactory { /** *CreatesanewEchobinding. * *@returnanewEchobinding */ EchoBinding createEchoBinding(); } c.定义EchoBinding 的实现EchoBindingImpl

/** *ImplementationoftheEchobindingmodel. */ publicclass EchoBindingImpl implements EchoBinding { private String name; private String uri; public String getName() { returnname; } public String getURI() { returnuri; } publicvoid setName(String name) { this.name = name; } publicvoid setURI(String uri) { this.uri = uri; } public List<PolicySet> getPolicySets() { // The sample binding does not support policies return Collections.emptyList(); } public List<Intent> getRequiredIntents() { // The sample binding does not support policies return Collections.emptyList(); } public List<Object> getExtensions() { // The sample binding does not support extensions return Collections.emptyList(); } publicboolean isUnresolved() { // The sample binding is always resolved returnfalse; } publicvoid setUnresolved(boolean unresolved) { // The sample binding is always resolved } } d.定义EchoBindingFactory 的实现DefaultEchoBindingFactory

publicclass DefaultEchoBindingFactory implements EchoBindingFactory { public EchoBinding createEchoBinding() { returnnew EchoBindingImpl(); } } e.定义节点的解析器EchoBindingProcessor,负责解析binding.echo,并生成对象EchoBinding实例,采用XMLStreamReader进行解析。

f.定义binding的具体动作,在接口ReferenceBindingProvider和ServiceBindingProvider实现。

ServiceBindingProvider在其start方法中进行对外服务的提供,提供监听外部的调用。Stop方法中销毁对外的监听。

ReferenceBindingProvider在其createInvoker方法中实现引用外部服务的具体实现.在本例中只是把输入的值直接返回。

g. 实现ModuleActivator,对解析器及调用ProviderFactory进行注册。并在org.apache.tuscany.sca.core.ModuleActivator文件中对ModuleActivator进行注册到系统运行环境中。

治疗脑梗塞的药
9个月宝宝消化不良怎么办
小孩脾虚吃什么
糖尿病胃轻瘫便秘能吃啥药
分享到: