悬疑灵异

扩展机制之二呢

本节继续对Tuscany SCA扩展机制进行探讨,详细说明了Binding扩展机制方式及示例。

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的接口及实现,在其中可以定义用户自己的一些属性,接口必须要实现nding,此接口中定义了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(在odelLoade文件中注册ModuleActivator)

示例

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

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

<composite xmlns=\"\"

targetNamespace=\"

xmlns:se=\"

xmlns:e=\"

name=\"EchoBinding\">

<service name=\"EchoService\" promote=\"EchoComponent\">

<va interface=\"ho\"/>

<e:ho uri=\"\" />

</service>

<component name=\"EchoComponent\">

<va class=\"hoComponentImpl\"/>

</component>

<reference name=\"EchoReference\" promote=\"EchoComponent/echoReference\">

<va interface=\"ho\"/>

<e:ho uri=\"\" />

</reference>

</composite>

其schema如下:

<element name=“ho\" type=\"sca:EchoBinding\" substitutionGroup=\"sca:binding\" />

<complexType name=“EchoBinding\">

<complexContent>

<extension base=\"sca:Binding“/>

</complexContent>

</complexType>

b.定义EchoBinding接口,扩展了nding

/**

*AmodelforthesampleEchobinding.

*/

publicinterface EchoBinding extends Binding {

}

c.定义EchoBindingFactory接口,通过此工厂可以生成EchoBinding实例

publicinterface EchoBindingFactory {

/**

*CreatesanewEchobinding.

*

*@returnanewEchobinding

*/

EchoBinding createEchoBinding();

}

d.定义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) {

= name;

}

publicvoid setURI(String uri) {

i = uri;

}

public List<PolicySet> getPolicySets() {

// The sample binding does not support policies

return ptyList();

}

public List<Intent> getRequiredIntents() {

// The sample binding does not support policies

return ptyList();

}

public List<Object> getExtensions() {

// The sample binding does not support extensions

return ptyList();

}

publicboolean isUnresolved() {

// The sample binding is always resolved

returnfalse;

}

publicvoid setUnresolved(boolean unresolved) {

// The sample binding is always resolved

}

}

e.定义EchoBindingFactory 的实现DefaultEchoBindingFactory

publicclass DefaultEchoBindingFactory implements EchoBindingFactory {

public EchoBinding createEchoBinding() {

returnnew EchoBindingImpl();

}

}

f.定义节点的解析器EchoBindingProcessor,负责解析ho,并生成对象EchoBinding实例,采用XMLStreamReader进行解析。

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

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

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

h. 实现ModuleActivator,对解析器及调用ProviderFactory进行注册。并在duleActivator文件中对ModuleActivator进行注册到系统运行环境中。

查看本文来源

忻州哪家医院白癜风好
兰州好医院男科
长治白癜风医院收费高吗
友情链接