科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道SCA软件架构设计理念分析

SCA软件架构设计理念分析

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

SCA (Service Component Architecture) 是一个开发SOA(Service-Oriented Architecture)面向服务应用的简单模型规范,它描述用于使用SOA构建应用程序和系统的模型。本文仅仅涉及插件式设计模式及工厂模式的深化和发展。

作者:李俊杰 来源:Csdn博客 2007年12月26日

关键字:

  • 评论
  • 分享微博
  • 分享邮件

在本页阅读全文(共6页)

(3)更复杂的工厂模式

在Tuscany SCA软件中有Artifact Professor的创建是更为复杂的工厂模式,Artifact Professor是描述如何处理Artifact的接口(在SCA中,最基本的部件是Artifact,即包含外部的artifact,也包括内部的artifact,Artifact是Contribute的原子,我们部署我们的应用到SCA上,那么每个应用就叫一个Contribute)。下面是类图:

这儿你可以看到美学在软件架构设计中的应用,呵呵!

图8

代理模式的使用

如图所示,ExtensibleURLArtifactProcessor 和 ExtensibleStAXArtifactProcessor分别是接口URLArtifactProcessor和 StAXArtifactProcessor的实现类,它们都包含相应的ArtifactProcessorExtensionProcessor接口,即包含相应的工厂,外部的调用是首先调用这个代理类,从而获取这个工厂并创建出相应的ArtifactProcessor。从而实现了代理模式。

public Object read(XMLStreamReader source) throws ContributionReadException {
// Delegate to the processor associated with the element qname
QName name = source.getName();
StAXArtifactProcessor<?> processor =

(StAXArtifactProcessor<?>)processors.getProcessor(name);
if (processor == null) {
return null;
}

try {
return processor.read(source);
} catch (XMLStreamException e) {
throw new ContributionReadException(e);
}
}

复杂工厂的介绍

如图所示,ArtifactProcessorExtensionPoint接口表明这是是个插件板,它有两个子插件板,分别为URLArtifactProcessorExtensionPoint 和StAXArtifactExtensionPoint,另外还有两个缺省实现类DefaultURLArtifactProcessorExtensionPoint 和 DefaultStAXArtifactExtensionPoint,从上面工厂类模式的扩展类似(为了简化,没有画文件包及处理文件的类ServiceConfigUtil),在META-INF/services/下面有两个文件:

org.apache.tuscany.sca.contribution.processor.URLArtifactProcessorExtensionPoint

org.apache.tuscany.sca.contribution.processor.DefaultURLArtifactProcessorExtensionPoint

org.apache.tuscany.sca.contribution.processor.StAXArtifactProcessorExtensionPoint

org.apache.tuscany.sca.contribution.processor.DefaultStAXArtifactProcessorExtensionPoint

分别标明是两个子插件板的实现插件板。它们都继承了DefaultArtifactProcessorExtensionPoint,也就是说提供类型(ArtifactProcessor)相似的插孔。更具体地说是继承类型(ArtifactProcessor的两个子类型URLArtifactProcessor和StAXArtifactProcessor),这儿可以很清楚地看出JDK1.5后的泛型的应用是多么大的威力。

同样在在META-INF/services/下面有两个相对应的文件,分别表示两种类似的插件:

org.apache.tuscany.sca.contribution.processor.URLArtifactProcessor

org.apache.tuscany.sca.interfacedef.wsdl.xml.WSDLDocumentProcessor;

type=.wsdl,model=org.apache.tuscany.sca.interfacedef.wsdl.WSDLDefinition
org.apache.tuscany.sca.interfacedef.wsdl.xml.XSDDocumentProcessor;

type=.xsd,model=org.apache.tuscany.sca.interfacedef.wsdl.XSDefinition

org.apache.tuscany.sca.contribution.processor.StAXArtifactProcessor

org.apache.tuscany.sca.implementation.spring.SpringArtifactProcessor;

qname=http://tuscany.apache.org/xmlns/sca/1.0#implementation.spring,

model=org.apache.tuscany.sca.implementation.spring.SpringImplementation

org.apache.tuscany.sca.assembly.xml.DefaultBeanModelProcessor;

qname=http://tuscany.apache.org/xmlns/sca/1.0#binding.http,

model=org.apache.tuscany.sca.binding.http.HTTPResourceBinding,

factory=org.apache.tuscany.sca.binding.http.HTTPResourceBindingFactory

org.apache.tuscany.sca.interfacedef.wsdl.xml.WSDLInterfaceProcessor;

qname=http://www.osoa.org/xmlns/sca/1.0#interface.wsdl,

model=org.apache.tuscany.sca.interfacedef.wsdl.WSDLInterfaceContract

org.apache.tuscany.sca.databinding.sdo.ImportSDOProcessor;

qname=http://tuscany.apache.org/xmlns/sca/databinding/sdo/1.0#import.sdo,

model=org.apache.tuscany.sca.databinding.sdo.ImportSDO

org.apache.tuscany.sca.contribution.java.impl.JavaImportProcessor;

qname=http://www.osoa.org/xmlns/sca/1.0#import.java,

model=org.apache.tuscany.sca.contribution.java.JavaImport

org.apache.tuscany.sca.contribution.java.impl.JavaExportProcessor;

qname=http://www.osoa.org/xmlns/sca/1.0#export.java,

model=org.apache.tuscany.sca.contribution.java.JavaExport

org.apache.tuscany.sca.contribution.namespace.impl.NamespaceImportProcessor;

qname=http://www.osoa.org/xmlns/sca/1.0#import,

model=org.apache.tuscany.sca.contribution.namespace.NamespaceImport

org.apache.tuscany.sca.contribution.namespace.impl.NamespaceExportProcessor;

qname=http://www.osoa.org/xmlns/sca/1.0#export,

model=org.apache.tuscany.sca.contribution.namespace.NamespaceExport

org.apache.tuscany.sca.implementation.java.xml.JavaImplementationProcessor;

qname=http://www.osoa.org/xmlns/sca/1.0#implementation.java,

model=org.apache.tuscany.sca.implementation.java.JavaImplementation

org.apache.tuscany.sca.binding.sca.xml.SCABindingProcessor;

qname=http://www.osoa.org/xmlns/sca/1.0#binding.sca,

model=org.apache.tuscany.sca.binding.sca.impl.SCABindingImpl

org.apache.tuscany.sca.implementation.resource.impl.ResourceImplementationProcessor;

qname=http://tuscany.apache.org/xmlns/sca/1.0#implementation.resource,

model=org.apache.tuscany.sca.implementation.resource.ResourceImplementation,

factory=org.apache.tuscany.sca.implementation.resource.ResourceImplementationFactory

org.apache.tuscany.sca.implementation.osgi.xml.OSGiImplementationProcessor;

qname=http://tuscany.apache.org/xmlns/sca/1.0#implementation.osgi,

model=org.apache.tuscany.sca.implementation.osgi.OSGiImplementationInterface

org.apache.tuscany.sca.assembly.xml.DefaultBeanModelProcessor;

qname=http://tuscany.apache.org/xmlns/sca/1.0#binding.atom,

model=org.apache.tuscany.sca.binding.feed.AtomBinding,

factory=org.apache.tuscany.sca.binding.feed.AtomBindingFactory

org.apache.tuscany.sca.assembly.xml.DefaultBeanModelProcessor;

qname=http://tuscany.apache.org/xmlns/sca/1.0#binding.rss,

model=org.apache.tuscany.sca.binding.feed.RSSBinding,

factory=org.apache.tuscany.sca.binding.feed.RSSBindingFactory

org.apache.tuscany.sca.binding.ws.xml.WebServiceBindingProcessor;

qname=http://www.osoa.org/xmlns/sca/1.0#binding.ws,

model=org.apache.tuscany.sca.binding.ws.WebServiceBinding

类似上面所说明的,在Hash Map中依然是保存着ArtifactProcessor的延迟加载封装类,同样是采用代理模式来实现延迟加载功能的,在这儿不再赘述。

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章