Tuscany SCA扩展机制之二

开发者在线 Builder.com.cn 更新时间:2007-11-17作者:佚名 来源:论坛整理

本文关键词: Tuscany SCA 扩展机制

 本节继续对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的接口及实现,在其中可以定义用户自己的一些属性,接口必须要实现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();
}

  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) {
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
}

}

  e.定义EchoBindingFactory 的实现DefaultEchoBindingFactory

publicclass DefaultEchoBindingFactory implements EchoBindingFactory {

public EchoBinding createEchoBinding() {
returnnew EchoBindingImpl();
}

}

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

  g.定义binding的具体动作,在接口ReferenceBindingProvider和ServiceBindingProvider实现。
ServiceBindingProvider在其start方法中进行对外服务的提供,提供监听外部的调用。Stop方法中销毁对外的监听。

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

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

查看本文来源

用户评论

  • 用户名
  • 评论内容