Bootstrap

JAIN SLEE 服务创建过程 (创建一个服务)

JAIN SLEE 服务创建过程 (创建一个服务)

根据 JAIN SLEE 1.1 规范,创建服务遵循特定步骤,包括定义、定制、打包和部署服务。以下是关键部分的解释以及 XML 节点的注释说明。


1. 服务定义

定义服务时,需要确定服务的组成部分,例如服务构建块(Service Building Blocks, SBB)以及它与外部资源的交互。

  1. 服务部署描述符
    • 部署描述符是一个 XML 文件,用于定义服务的各种属性。
    • 关键元素
      • service-name, service-vendor, service-version: 唯一标识服务的名称、提供商和版本信息。
      • root-sbb: 标识服务的根 SBB,这是驱动服务逻辑的核心组件。
      • default-priority: 设置根 SBB 与 SLEE 之间的事件传递优先级。
      • address-profile-table: 定义为服务触发的地址配置文件表。
<!-- 服务部署描述符:定义服务的名称、提供商和版本 -->
<service-xml>
    <service>
        <!-- 服务的描述信息 -->
        <description> FooService </description>
        
        <!-- 服务名称 -->
        <service-name> FooService </service-name>
        
        <!-- 服务提供商 -->
        <service-vendor> com.foobar </service-vendor>
        
        <!-- 服务版本 -->
        <service-version> 1.0 </service-version>
        
        <!-- 根SBB:标识服务的核心逻辑处理模块 -->
        <root-sbb>
            <description> Root SBB for FooService </description>
            <!-- SBB名称 -->
            <sbb-name> FooSBB </sbb-name>
            <!-- SBB提供商 -->
            <sbb-vendor> com.foobar </sbb-vendor>
            <!-- SBB版本 -->
            <sbb-version> 1.0 </sbb-version>
        </root-sbb>

        <!-- 事件传递的默认优先级 -->
        <default-priority> 5 </default-priority>
        
        <!-- 地址配置文件表 -->
        <address-profile-table> FooAddressProfileTable </address-profile-table>
    </service>
</service-xml>

2. 定制服务

在服务运行之前,必须根据运行环境对其进行定制,特别是在资源适配器绑定和 SBB 属性别名的冲突处理上。

  • 资源适配器: 服务部署者确保 SBB 绑定正确的资源适配器,定义服务如何与外部系统交互。
  • 活动上下文属性别名: 如果两个 SBB 之间在别名上存在冲突,部署者可以通过修改部署描述符来解决。
<!-- SBB部署描述符:定义SBB与资源适配器的绑定 -->
<sbb-jar>
    <sbb>
        <!-- SBB的名称、提供商和版本信息 -->
        <sbb-name>FooSBB</sbb-name>
        <sbb-vendor>com.foobar</sbb-vendor>
        <sbb-version>1.0</sbb-version>

        <!-- 绑定的资源适配器类型 -->
        <resource-adaptor-type-binding>
            <resource-adaptor-type-name>FooRAType</resource-adaptor-type-name>
            <resource-adaptor-type-vendor>com.foobar</resource-adaptor-type-vendor>
            <resource-adaptor-type-version>1.0</resource-adaptor-type-version>
        </resource-adaptor-type-binding>

        <!-- 绑定的资源适配器实体 -->
        <resource-adaptor-entity-binding>
            <resource-adaptor-entity-name>FooRAEntity</resource-adaptor-entity-name>
        </resource-adaptor-entity-binding>

    </sbb>
</sbb-jar>

3. 打包服务

服务定义和定制后,需要将服务及其所有组件打包为一个可部署单元(通常是一个 JAR 文件)。

  • 可部署单元结构
    • 包含服务的 XML 描述符和组成部分,如 SBB、配置文件规范、事件类型和资源适配器类型。
    • 可部署单元必须按照结构化方式打包,并包含 META-INF/deployable-unit.xml 文件,该文件描述了其内容。
<!-- 可部署单元描述符:定义服务打包时的组成部分 -->
<deployable-unit>
    <description> FooService deployment package </description>
    
    <!-- 包含的SBB JAR文件 -->
    <jar> FooSBB.jar </jar>
    
    <!-- 包含的地址配置文件规范 -->
    <jar> FooAddressProfileSpec.jar </jar>
    
    <!-- 服务部署描述符 -->
    <service-xml> FooService.xml </service-xml>
</deployable-unit>

4. 部署服务

服务打包后,需要将可部署单元安装到 SLEE 环境中,注册服务并开始处理事件。

  • 服务注册:服务根据其定义的逻辑开始处理事件,例如根据事件类型创建新的 SBB 实例。
  • 服务交互:服务的根 SBB 会处理这些事件,必要时与外部系统进行交互。

示例:服务部署过程

一旦服务部署到 SLEE 中,它就会根据配置表中的地址信息,自动创建 SBB 实例来处理相应的事件。

  1. 触发 SBB 实例
    如果在 FooAddressProfileTable 中配置了某个地址,那么每当与该地址相关的事件发生时,系统会为 FooSBB 创建一个实例来处理该事件。

  2. 处理事件
    根 SBB (FooSBB) 会根据事件的类型和内容执行相应的逻辑,可能会调用子 SBB 来处理特定的任务。


总结

JAIN SLEE 服务的创建过程主要分为四个步骤:

  • 定义服务的各个组成部分;
  • 定制服务,确保与外部资源的交互正常;
  • 将服务及其组件打包为可部署单元;
  • 部署服务,开始处理实际事件。

通过这些步骤,服务能够根据事件的发生动态创建 SBB 实例,并根据业务逻辑进行事件处理。

;