JAIN SLEE 服务创建过程 (创建一个服务)
根据 JAIN SLEE 1.1 规范,创建服务遵循特定步骤,包括定义、定制、打包和部署服务。以下是关键部分的解释以及 XML 节点的注释说明。
1. 服务定义
定义服务时,需要确定服务的组成部分,例如服务构建块(Service Building Blocks, SBB)以及它与外部资源的交互。
- 服务部署描述符:
- 部署描述符是一个 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 实例来处理相应的事件。
-
触发 SBB 实例:
如果在FooAddressProfileTable
中配置了某个地址,那么每当与该地址相关的事件发生时,系统会为FooSBB
创建一个实例来处理该事件。 -
处理事件:
根 SBB (FooSBB
) 会根据事件的类型和内容执行相应的逻辑,可能会调用子 SBB 来处理特定的任务。
总结
JAIN SLEE 服务的创建过程主要分为四个步骤:
- 定义服务的各个组成部分;
- 定制服务,确保与外部资源的交互正常;
- 将服务及其组件打包为可部署单元;
- 部署服务,开始处理实际事件。
通过这些步骤,服务能够根据事件的发生动态创建 SBB 实例,并根据业务逻辑进行事件处理。