技术开发 频道

SCA软件架构设计理念分析

    复杂工厂的介绍

    如图所示,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的延迟加载封装类,同样是采用代理模式来实现延迟加载功能的,在这儿不再赘述。

0
相关文章