使用Spring开发SCA组件

[复制链接]
查看11 | 回复9 | 2014-2-19 11:55:14 | 显示全部楼层 |阅读模式
本文将探讨 Apache Tuscany 运行时支持的一些高级特性。了解如何将多种应用程序上下文综合起来用作 SCA 组件的一个实现。SCA 注释可用来在 Spring bean 类内显式声明 SCA 服务、引用和属性。下载 计算器示例的源代码。
本文中的示例使用了 Apache Tuscany SCA Java? 技术运行时 V1.5.1。要运行这个示例应用程序,需要下载 Apache Tuscany SCA Java 实现 的二进制发行版。
回复

使用道具 举报

千问 | 2014-2-19 11:55:14 | 显示全部楼层
为 SCA 组件使用多种应用程序上下文
在 使用 Spring Framework 设计和开发 SCA 组件,第 1 部分:三剑客:Spring、SCA 和 Apache Tuscany,您了解了一个 Spring 应用程序可被定义为 SCA 复合集(即 SCDL)内的一个 SCA 组件,其格式如清单 1 所示。
清单 1. 具有一个 Spring 组件的 SCA 复合集








回复

使用道具 举报

千问 | 2014-2-19 11:55:14 | 显示全部楼层
元素的 location 属性可将目标 URI 指定为指向一个归档文件(JAR)、一个目录或直接指向一个 Spring 应用程序上下文文件。在任何情况下,在使用 组件的 location 属性时,Apache Tuscany 只允许一个应用程序上下文作为目标应用程序上下文,用作 SCA 组件的实现。
Apache Tuscany 允许使用多种应用程序上下文来实现 SCA 组件,方法是在这个目标应用程序上下文(由此 SCA 复合集文件内的 元素的 location 属性标识)中定义一个 ClassPathXmlApplicationContext(如 清单 3 所示)bean。清单 2 给出了一个示例。
回复

使用道具 举报

千问 | 2014-2-19 11:55:14 | 显示全部楼层
清单 2. 具有一个 Spring 组件的 SCA 复合集








回复

使用道具 举报

千问 | 2014-2-19 11:55:14 | 显示全部楼层
清单 3. beanRefContext.xml









context1.xml

context2.xml

context3.xml





回复

使用道具 举报

千问 | 2014-2-19 11:55:14 | 显示全部楼层
这个 Apache Tuscany 运行时的意图是将具有一个 bean 定义(以 ClassPathXmlApplicationContext 作为 bean 类)的所有目标应用程序上下文视为一个具有多种应用程序上下文的场景。这个 Tuscany 运行时之后将会为由 ClassPathXmlApplicationContextbean 的 constructor 参数标识的这列应用程序上下文文件创建一个组合的应用程序上下文实例。
在 清单 2 的例子中,被作为 CalculatorServiceComponent 的一个实现定义的目标应用程序上下文是 beanRefContext.xml。在一个典型的场景中(在单个应用程序上下文场景)中,Tuscany 运行时将会为 beanRefContext.xml 创建一个应用程序上下文实例并将其用作 CalculatorServiceComponent 的一个实现实例。
在 清单 3 内,beanRefContext.xml 只定义了一个 bean 定义(以 ClassPathXmlApplicationContext 作为 bean 类)。这个场景被 Tuscany 运行时视为是一个包含多种应用程序上下文的场景。由 ClassPathXmlApplicationContext bean 定义的 constructor 参数标识的这列应用程序上下文文件(context1.xml、context2.xml 和 context3.xml)被综合起来创建一个应用程序上下文实例,以用作 CalculatorServiceComponent 的一个实现实例。图 1 展示了一个例子。
对于一个包含多个上下文的场景,由 ClassPathXmlApplicationContext bean 定义的 constructor 参数标识的每个应用程序上下文文件都可具备其自己的 SCA 服务、引用和属性(以显式或隐式的方式声明)。
回复

使用道具 举报

千问 | 2014-2-19 11:55:14 | 显示全部楼层
对于一个单应用程序上下文的场景,正如在 使用 Spring Framework 设计和开发 SCA 组件,第 1 部分:三剑客:Spring、SCA 和 Apache Tuscany 中所讨论的,Tuscany 运行时会尝试:
* 内省这个目标应用程序上下文定义文件以决定所声明的 SCA 服务、引用和属性。
* 使用适当的 Spring beans 为在这个目标应用程序上下文内声明的所有 SCA 引用和属性创建一个 SCAParentApplicationContext。
之后,将 SCAParentApplicationContext 声明为父上下文,使用 org.springframework.context.support.GenericApplicationContext 创建这个目标应用程序上下文的实例。
在一个含多种应用程序上下文的场景中,如 图 1 所示,Tuscany 运行时会尝试:
* 内省由 ClassPathXmlApplicationContext bean(在目标应用程序上下文中定义)的 constructor 参数标识的这列应用程序上下文文件(context1.xml、context2.xml 和 context3.xml)来决定所声明的 SCA 服务、引用和属性。
* 用适当的 Spring bean 为已标识的这列应用程序上下文文件内声明的所有 SCA 引用和属性创建一个 SCAParentApplicationContext。
之后,通过将 SCAParentApplicationContext 声明为其父上下文,为这列应用程序上下文文件创建一个 org.springframework.context.support.ClassPathXmlApplicationContext 实例。
在目标应用程序上下文上使用 ClassPathXmlApplicationContext bean 定义来提供对含多种应用程序上下文的场景的支持,这个内容超出了 SCA Spring 组件实现规范 V1.0 的建议。
不同于目标应用程序上下文内的 ClassPathXmlApplicationContext bean 定义,在应用程序上下文的层次结构内标识的任何一个 ClassPathXmlApplicationContext bean 定义都将被 Spring 运行时视为一个常规的 ClassPathXmlApplicationContext bean 并被相应处理。
回复

使用道具 举报

千问 | 2014-2-19 11:55:14 | 显示全部楼层
Spring beans 的 SCA 注释
Apache Tuscany 对 Spring beans 内的 SCA 注释的支持超出了由 OSOA 定义的 SCA Spring 组件实现规范 V1.0 的建议。
在 使用 Spring Framework 设计和开发 SCA 组件,第 1 部分:三剑客:Spring、SCA 和 Apache Tuscany 中,您了解到可以使用自定义 SCA 名称空间元素,比如 、 和 ,在 Spring 应用程序上下文文件内显式声明 SCA 服务、引用和属性。同样地,Apache Tuscany SCA 运行时允许您使用 SCA 注释在 Spring bean 类内显式地声明 SCA 服务、引用和属性。
下面介绍了用于在 Spring bean 类内显式地声明 SCA 服务、引用和属性的 SCA 注释。
回复

使用道具 举报

千问 | 2014-2-19 11:55:14 | 显示全部楼层
org.osoa.sca.annotations.Service
用来控制哪些 Spring bean 可被公开为 SCA 服务。@Service 注释一般用在 Java 类上,用来指定由该实现提供的服务的接口。
org.osoa.sca.annotations.Reference
用来在由此复合集内可用的其他 SCA 组件提供的服务上声明一个 Spring bean 的依赖项。通过定义一个字段、一个 setter 方法参数或一个 constructor 参数(由此服务接口键入并由一个 @Reference 注释),可以使用引用注入访问服务。
org.osoa.sca.annotations.Property
用来在由 SCA 组件实现提供的可设置属性上声明一个 Spring 应用程序上下文的依赖项。@Property 注释被用来定义一个 SCA 属性。
如下这个示例展示了如何在 Spring bean 类中使用 SCA 注释。仍然使用在 使用 Spring Framework 设计和开发 SCA 组件,第 1 部分:三剑客:Spring、SCA 和 Apache Tuscany 内讨论的 CalculatorComponent 示例展示 SCA 注释的用法。
calculator.composite,如清单 4 所示,定义了 CalculatorComponent,它依赖于其他四个服务:AddComponent、SubtractComponent、MultiplyComponent 和 DivideComponent。
回复

使用道具 举报

千问 | 2014-2-19 11:55:14 | 显示全部楼层
清单 4. calculator.composite













HelloWorld








回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行