服务组件体系结构 C++ API 简介

来源:互联网 发布:梦幻西游账号买卖淘宝 编辑:程序博客网 时间:2024/06/05 03:58
熟悉将用于 Apache Tuscany SCA for C++ 的 API。您将通过本文了解该 API 的主要组成部分,以便快速入门。

  构建并连接简单的 C++ 服务组件

  关于 Tuscany

  Apache Tuscany 是正处于孵化期的 Apache Software Foundation 项目。此项目的目标之一是获得实现以下服务组件体系结构(Service Component Architecture,SCA)规范的 C++ 运行时:

  •   SCA 组装模型 (SCA Assembly Model)
  •   SCA C++ 客户机和实现 (SCA C++ Client and Implementation)
  •   在本文中,我们将详细说明采用 C++ 针对 Apache Tuscany C++ 运行时开发和部署服务组件的步骤。

  介绍

  Tuscany C++ 服务组件体系结构 (SCA) 运行时允许使用标准 C++ 代码构建 SCA 组件,并将其部署到 SCA 运行时可以查找和加载的位置。为了实现此组件动态加载功能,运行时需要一系列描述文件,这些构件以及您自己的头文件一起用于生成代理和包装,以允许从其他组件或客户机代码采用与处理本地 C++ 对象类似的方式调用您的组件。

  我们将首先创建一个简单的 SCA 组件,然后创建第二个组件,并将二者连接到一起。

  我们使用 Microsoft Visual Studio 作为开发环境,但也可以使用命令行编译器和文本编辑器。您将了解如何设置 Studio 项目和开发应用程序。

  注意:Tuscany SCA 依赖于 Tuscany SDO 项目和 Apache Axis2/C 项目。在开始工作前,必须确保在您的 PATH 环境变量中设置了 Tuscany SCA/SDO 库和 Apache Axis 库。有关更多信息,请参见项目下载说明。

  Tuscany SCA C++ 运行时将需要知道模块和组件所部署到的位置。部署根目录使用环境变量 TUSCANY_SCACPP_SYSTEM_ROOT 进行标识。我们将马上设置此变量,以便能够从 Visual Studio 内运行我们的测试程序。如果您使用的是命令行,则在运行前都不需要设置这些内容。

  TUSCANY_SCACPP_SYSTEM_ROOT 指定运行时将用于寻找已部署模块和子系统的路径,我们将在稍后对此予以说明。根目录必须具有两个子目录,分别名为“modules”和“subsystems”。

  使用控制面板设置:TUSCANY_SCACPP_SYSTEM_ROOT=c:/mybasicsample。

  转到“控制面板”、“系统”,然后选择“高级”选项卡,然后单击“环境变量”按钮。单击“新建”按钮,并将“变量名”设置为 TUSCANY_SCACPP_SYSTEM_ROOT,将“变量值”设置为 c:/mybasicsample。然后单击“确定”,以设置此环境变量。

  创建名为 mybasicsample 的目录,其中包含两个子目录,分别名为 modules 和 subsystems。

  现在已经准备好,可以进行部署了。我们可能应该编写一些能够部署的东西。

 简单回顾一下 SCA 规范(您已经读过了此规范——对吗?),就会记得 SCA 系统包含一个或多个子系统。每个子系统包含模块组件的列表。每个模块组件实际上是由模块实现的。在 C++ 中,存在一组描述性 XML 文件,用于在编译时生成服务代理和包装以及在运行时查找提供的服务。在开始进行开发前,有必要对这些文件进行一下了解。描述子系统的文件必须命名为 sca.subsystem,且必须保存在自己的子目录中,其位于根目录中的 subsystems 目录下。sca.subsystem 文件描述子系统中涉及哪些模块组件。模块组件可以视为子系统的简单部件,模块组件具有名称,且同时指示实现模块组件行为的模块:

  清单 1. 模块组件

<subsystem xmlns="http://www.osoa.org/xmlns/sca/0.9" name="MyServiceSubsystem">
        <moduleComponent name="MyModuleComponent" module="FloatConverter" />
</subsystem>

  清单 1 告知 SCA 运行时,模块组件“MyModuleComponent”是由名为“FloatConverter”的模块实现的,因此我们必须构建此模块。

  sca.subsystem 文件实际上是运行时构件,编译时没有用处。其他文件(组件类型文件和 sca.module 文件)对“FloatConverter”模块进行描述,以便能在运行时找到它。这些文件还帮助代码生成器为服务构建包装和代理。我们将在下面的开发过程中更为详细地讨论这些文件。

  现在让我们回到这一过程的开头。我们希望将 C++ 类作为服务部署,并将服务放入名为“FloatConverter”的模块中。以下步骤将说明如何完成此任务。

  首先,尽管可能有存在冗余的风险(很多人肯定之前已经进行过此工作了),我们将创建一个示例 C++ 应用程序。

  注意:在开始开发过程前,您必须下载 SCA/SDO 代码并对其进行构建,或下载二进制版本,以便稍后告知项目在何处查找 SCA 运行时。设置两个环境变量,分别名为 TUSCANY_SCACPP 和 TUSCANY_SDOCPP,指向 SCA 和 SDO 项目的部署目录,在这两个目录下存在相应的 bin、lib 和 include 目录。

  首先,我要创建一个抽象基类,用于表示我们要公开的服务。这与定义 Java 接口等价。我们在此处创建的头文件将由客户机应用程序用于解释可用的服务接口。

  以下就是这个类,位于名为“Example.h”的头文件中:

……

查看原文

原创粉丝点击