发表于: 2017-11-17 22:32:26

1 692


一.今日完成

学习apache tuscany和sca相关知识点.

1.SCA提供了一个编程模型,用于创建基于面向服务架构(Service-Oriented Architecture ,SOA)的应用程序和解决方案。SCA 所依托的理念是将业务功能作为一系列服务提供,从而创建能满足特定业务需求的解决方案。这些复合集可以包含为已有系统中的应用程序和业务功能创建的新服务,以及作为复合应用的一部分重用的应用程序。SCA 提供了:

一个用于服务复合以及服务组件创建的模型,包括在 SCA 复合集中重用已有应用程序。

灵活的复合、重用、技术和部署选择,这使它成为了构建异构分布式系统的理想环境。

支持多种实现语言和通信机制。

简化的组件编程模型,用于使用各种技术(比如说 Enterprise JavaBeans、Java POJOs、Spring beans、BPEL Process、COBOL、C++ 和 PHP 等)来实现业务服务。


2.Apache Tuscany

开源 Apache Tuscany 项目致力于实现 SCA 规范(和一些其他的 SCA 规范,如 Service Data Objects 和 Data Access Service)。依照 Open Service-Oriented Architecture (OSOA) 和针对全球信息社会 (OASIS SCA Java) 规范的一些标准,Apache Tuscany 为 SCA 运行时提供了一个全面的基础架构。


3.Spring Dynamic Module 就是一种基础架构的商业实现,它结合了 Spring 和 OGSi。Spring beans 可以作为服务组件架构(SCA)的组件实现使用。Apache Tuscany 的 Java 实现建立在 Apache 的 OSGi 框架 (Felix) 的基础之上。


要将 SCA 与 Spring 相结合,一种有效的方法是使用 Spring 来构建 “粗粒度” 的服务组件实现,并引入到 SCA 中以便公开服务、关联服务组件以及处理异构和分布式系统。SCA 可以在使用 Spring 实现的应用程序中添加一些有用的功能,比如说:

对远程组件以及多种协议的扩展支持

支持使用不受 JVM 支持的各种编程语言来编写组件

支持 WS-Policy 针对安全性和事务等活动指定的策略


4.SCA 与 Spring 整合

(1)将 Spring 应用程序定义为 SCA 组

在 Apache Tuscany SCA 实现中,SCA 使用 Spring 作为其组件在 SCA 复合集中的实现技术。可以将 Spring 应用程序定义为 SCA 复合集中的 SCA 组件,即 SCDL,其格式如下所示。

包含一个 Spring 组件的 SCA 复合集:

<composite xmlns="http://www.osoa.org/xmlns/sca/1.0"

      xmlns:tuscany="http://tuscany.apache.org/xmlns/sca/1.0"

      targetNamespace="http://calc"

      xmlns:c="http://calc"

      name="Calculator">

    <component name="CalculatorServiceComponent">

             <implementation.spring location="targetURI"/>

    </component>

</composite>

<implementation.spring> 元素的位置属性可以指定目标 URI 指向某个存档文件 (.jar) 或 目标,或者 直接指向 Spring 应用程序上下文。


下面给出了指定 <implementation.spring> 位置属性的目标 URI 的可能方法。

指定 Spring 应用程序上下文文件

<implementation.spring location="application-context.xml"/>


指定目录

<implementation.spring location="./spring"/>

目标 URI 将资源指定为名称为 spring 的目录,其中包含所有与 Spring 相关的文件。META-INF/MANIFEST.MF 文件必须包含在 Spring 目录中,它使用 Spring-Context ::= <path> 格式的 Spring-Context 头部指定到上下文配置的路径。其中,path 相对于 Spring 目录。如果 MANIFEST 文件中没有 MANIFEST.MF 文件或 Spring-Context 头部,则默认行为是使用 Spring 目录下的 META-INF/spring 目录中的 application-context.xml 文件建立应用程序上下文。


指定存档文件

<implementation.spring location="spring.jar"/>

目标 URI 将资源指定为 spring.jar 存档文件,其中包含与 Spring 相关的所有文件。META-INF/MANIFEST.MF 文件必须位于 spring.jar 存档文件中,它使用 Spring-Context ::= <path>. 格式的 Spring-Context 头部指定到上下文配置文件的路径。其中,path 指向 spring.jar 存档中的文件。如果 MANIFEST 文件中没有 MANIFEST.MF 文件或 Spring-Context 头部,则默认行为是使用目录 spring.jar 存档文件中 META-INF/spring 目录下的 application-context.xml 文件建立应用程序上下文。


(2)基于 Spring 的 SCA 组件

组件实现的业务功能将由其他组件作为服务 提供。实现可以依赖其他组件提供的服务;这些依赖关系被称作引用。实现可以有可设置的属性,即影响业务功能运转的数据值。

基于 Spring 的 CalculatorComponent:

 CalculatorComponent 需要依赖其他组件(AddComponent、SubtractComponent、MultiplyComponent 和 DivideComponent)来实现所需的功能。而CalculatorComponent 的业务功能是使用 Spring beans 实现的,AddComponent 是使用 JavaScript 实现的,SubtractComponent 和 MultiplyComponent 是使用简单 POJO 实现的,而 DivideComponent 是使用 Groovy 脚本实现的。

为此需要创建一个名称为 calculator.composite 的 SCA 复合集来定义组件、服务、引用、属性声明以及这些元素之间的关联描述。再创建一个名称为 calculator-context.xml 的 Spring 应用程序上下文定义文件。通过声明实现所需功能需要的 beans 以及它们的依赖关系,提供 CalculatorComponent 的业务逻辑。


(3)声明显式 SCA 服务、引用和属性

SCA Spring Component Implementation Specification 和 Apache Tuscany SCA 运行时允许使用 Spring SCA 模式中的自定义 SCA 名称空间元素在 Spring 应用程序上下文文件中声明 SCA 服务、引用和属性。可以使用自定义 SCA 名称空间元素将 Spring beans 声明为 SCA 服务,并通过 SCA 组件定义指定到所获取的 SCA 服务和属性的引用。使用 Spring 应用程序上下文文件中的 SCA 名称空间元素被称作 SCA 服务、引用和属性的显式声明。

其中,

<sca:service>

允许控制需要将哪些 Spring bean 公开为 SCA 服务。提供一种方式来控制将哪些 Spring bean 公开为 SCA 服务。SCA 运行时负责创建合适的服务器绑定,根据 SCDL 配置将需要的策略应用到这些服务上。

<sca:reference>

提供一种方式来声明 Spring 应用程序上下文对复合集中的其他 SCA 组件所提供的服务的依赖关系。该 SCA 运行时负责创建合适的引用绑定,根据 SCDL 配置将需要的策略应用到这些服务上。

<sca:property>

提供一种方式来声明 Spring 应用程序上下文对由 SCA 组件实现提供的可设置属性的依赖关系。<sca:property> 元素的 name 属性应该在复合集中拥有一个与所含组件相匹配的 SCA 属性。


(4)声明隐式的 SCA 服务、引用和属性

SCA Spring Component Implementation Specification 和 Apache Tuscany SCA 运行时支持直接在 Spring 应用程序上下文文件中声明 SCA 服务、引用和属性,无需使用在 Spring SCA 模式中定义的任何自定义 SCA 名称空间元素。在 Spring 应用程序上下文文件中直接使用 SCA 引用和属性(无需自定义 SCA 名称空间)称为 SCA 服务、引用和属性的隐式声明。

当应用程序上下文中没有显式的 <sca:service> 元素时,所有顶级的 bean 都将被公开为 SCA 服务,使用 bean 名称作为服务名称。任何内部 bean 或抽象 bean 都不会被用于隐式服务创建。当 Spring bean 实现类实现多个接口时,这些 bean 可以被公开为单个或多个服务。使用显式的 <sca:service> 元素,其中每个 <sca:service> 元素引用相同的 <bean> 元素,但 type 属性仅使用由 bean 提供的接口之一。在隐式创建服务时,bean 被公开为单一服务,方法是将 bean 类本身声明为服务的一个接口。


二.明日计划

参考师兄日报,整理Tuscany用法,完成并提交任务9.


三.遇到问题

为nginx添加第三方负载均衡模块----nginx-upstream-fair,忘记需要到nginx源文件得根目录下,进行操作,结果在安装目录里一直使用./configure &&make&&make install.后来误删安装文件,重新安装时为指定pcre,zlib和openssl路径花了不少时间,其实只要编译安装pcre,zlib和openssl后,nginx安装时候会自动扫描前三者得安装路径,无需单独指定,后来把问题解决重新做了负载均衡和反向代理.


四.收获

以上.


进度:今天提交任务9,比原计划延迟一天.







返回列表 返回列表
评论

    分享到