级别: 中级 Ben Briden (benbriden@uk.ibm.com), IT 专家, IBM
2007 年 12 月 22 日 学习如何为 WebSphere® Service Registry and Repository 创建和部署插件。您将了解不同类型的插件,并使用示例代码和配置创建控制验证器插件。
引言
在 WebSphere Service Registry and Repository(以下称为 Service Registry)中使用插件可以在服务生命周期的关键点执行自定义代码。此自定义代码可以根据客户实现的需求执行数据或流程的其他验证。
您可以使用 Service Registry 创建四种类型的插件:验证、通知、控制验证和控制通知。验证插件是在创建、更新或删除 Service Registry 对象之前调用的。通知插件是在创建、更新或删除 Service Registry 对象之后调用的。控制验证插件是将 Service Registry 对象从一种生命周期状态转换为另一种生命周期状态之前或显式地请求验证控制对象时调用的。控制通知插件是将 Service Registry 对象从一种生命周期状态转换为另一种生命周期状态之后调用的。
在本文中,您将学习如何在 Service Registry 中实现控制验证插件。您可以将同一原则应用到所有类型的插件中。本文提供了示例代码。
本文将各种来源(如 WebSphere Service Registry and Repository 信息中心和 WebSphere Service Registry and Repository 手册)的信息组合在一起,并应用到示例场景中。
示例场景
本文中的场景围绕 JK 企业(以下称为 JKE)进行介绍,该公司是许多 IBM 演示和文章中使用的一个虚拟电子公司。构建此控制插件的思想是,JKE 面向服务的体系结构 (SOA) 中的实体转换需要强制执行特定的 IT 规则,才能确保遵守适当的业务规则。此外,这些规则需要足够灵活,以便在无需修改实际插件代码的情况下可以容易地对它们进行修改。
JKE 为控制模型定义了以下状态和转换:
JKE 需要对实体转换强制执行以下规则:
| 转换 | 实体类型 | 授权角色 | 必填字段 | 所需值 | 缺省值 |
|---|
|
ValidateServiceOwnership
|
WSDLDocument
|
cn=admins,ou=core,o=ibm,c=gb
|
businessOwner
|
非空
|
不允许
| |
ValidateExecutiveSponsor
|
Port
|
wasadmin
|
responseTime
|
允许为空
|
不允许
| |
ValidateExecutiveSponsor
|
Port
|
wasadmin
|
executionCost
|
非空
|
不允许
| |
AssembleServices
|
WSDLDocument
|
cn=developers,ou=core,o=ibm,c=gb
|
port
|
非空
|
2809
|
解决方案
为了实现此控制框架,我们将定义一个 XML 文档和一个关联的模式来详细说明该规则。我们将此文档存储在 Service Registry 中。调用时,插件将从 Service Registry 下载此规则文档。插件随后解析 XML 文档,以提取每个规则,然后对每个规则进行比较以确定它是否适用于要执行的转换。如果适用于当前的转换和实体,则插件将执行必需的验证,并在所需的地方添加元数据。
在 Service Registry V6.0.0.X 中,控制验证插件必须实现 ServiceRegistryGovernanceValidator 接口。Service Registry V6.0.2 可提供另外一个类 ServiceRegistryGovernanceValidator2,该类将进一步扩展 ServiceRegistryGovernanceValidator 以提供 makeGovernable 和 removeGovernance 方法。本文中的场景使用的是 ServiceRegistryGovernanceValidator,因此,可以实现以下五个方法:
| 方法名称 | 描述 |
|---|
transition
| 在用户尝试将 Service Registry 对象从一个生命周期状态转换到另一个生命周期状态时调用。 |
validate
| 在对控制对象进行显式控制验证请求时调用。 |
create
| 在注册表中创建实体时调用。 |
update
| 在修改 Service Registry 中的实体时调用。 |
delete
| 在从 Service Registry 删除实体时调用。 |
流程概述
为了实现插件,我们需要完成以下步骤:
- 步骤 1:创建定义 IT 规则文档的 XSD 模式文档。
- 步骤 2:创建封装所需 IT 规则的 XML 文档。
- 步骤 3:将 XML 和 XSD 文档发布到 Service Registry。
- 步骤 4:创建插件应用程序。
- 步骤 5:导出验证器。
- 步骤 6:使用插件 jar 配置 Service Registry。
- 步骤 6a:使用共享库配置应用服务器。
- 步骤 6b:使用包含插件的新共享库配置 Service Registry。
- 步骤 7:将 Service Registry 配置为调用新控制插件。
- 步骤 8:使用JKE 生命周期配置 Service Registry。
- 从 Service Registry 检索 IT 规则。
- 解析 IT 规则。
- 检查请求的转换,查看它是否与任何定义的规则匹配。
- 进行任何必需的元数据验证。
- 根据需要,返回成功或失败信息。
本文的其余内容将指导您完成以下每个步骤。
步骤 1:创建定义 IT 规则的 XSD 模式
IT 规则模式可定义 IT 规则 XML 文档的格式。在开发模式时,尽可能确保模式不仅封装当前规则所需的格式,而且还要为描述未来规则提供灵活性,以实现更大的灵活性,而无需以后更改代码。
要创建 XSD 模式,请执行以下操作步骤:
- 启动 WebSphere Integration Developer。
- 创建新的应用程序客户机项目,如下所示:
- 输入项目名称,并单击 Finish,如下所示:
- 右键单击您刚才创建的项目,并选择 New => Other。
- 在 New 窗口中,展开 XML,选择 XML Schema,并单击 Next,如下所示。您可能需要选中 Show All Wizards,以便找到所需的选项。
- 确保选择新项目 Sample Governance Validator,然后为新的模式文档输入名称,并单击 Finish,如下所示:
- 右键单击新的 XSD 文档,并选择 Open With => XML Schema Editor。
您可以在下载包中找到模式定义的详细信息。
步骤 2:创建 IT 规则 XML 文档
IT 规则文档使用您在上一步骤中开发的模式来定义应该由控制验证器强制执行的规则。要创建 XML 文档,请执行以下操作步骤:
- 右键单击该项目,并选择 New => Other。
- 在 New 窗口中,展开 XML,选择 XML,并单击 Next。
- 选择 Create XML file from scratch,然后单击 Next,如下所示:
- 指定
GovernanceTransitionPolicyDocument.xml 作为 File name,并单击 Finish,如下所示:
您可以在下载包中找到 XML 定义的详细信息。
步骤 3:将文档发布到 Service Registry
现在,您需要将文档发布到 Service Registry,使它们可用于插件。有多个方法完成此项工作,可以使用 Service Registry 管理 Web 控制台,也可以使用 WebSphere Integration Developer 中的插件。在本文中,我们将使用插件方法。
要发布模式文档,请执行以下操作:
- 右键单击创建的模式文档,并选择 Service Registry => Publish Document。
- 提供如下所示的请求信息,并单击 Finish。
文档将会上传到 Service Registry,您会看到确认消息。
要发布 IT 规则文档,请执行以下操作:
- 右键单击 xml 文件,并选择 Service Registry => Publish Document。
- 提供如下所示的请求信息,并单击 Finish:
文档将会上传到 Service Registry,您会看到确认消息。
步骤 4:创建插件实现
为了实现所需的插件方法,您需要创建新的 Java™ 类来实现前面描述的方法。为此,请完成以下操作步骤:
- 右键单击该项目,选择 Java => Class,并单击 Next。
- 输入必需的信息,自定义实现环境的值,并单击 Finish,如下所示:
正如前面所述,为实现控制验证器插件,创建的类必须实现 ServiceRegistryGovernanceValidator 接口,尤其是 validate 和 transition 方法。此外,因为控制验证器接口可扩展基础 Service Registry 验证器接口,所以它还必须实现创建、更新和删除方法。您可以选择实现 ServiceRegistryGovernanceValidator2 类,在这种情况下,除上述方法外,您还需要实现 makeGovernable 和 removeGovernance 方法。有关用于 JKE 场景的详细实现代码,请参见本文提供的插件代码。
- 为了解决所有必需的导入问题,您需要修改项目属性。选择 Project => Properties。
- 选择 Java Build Path,然后单击 Add External JARs,如下所示:
- 从 Service Registry 的安装目录中选择 ServiceRegistryClient.jar,如下所示:
- 单击 OK。这应该解决任何与 Service Registry 接口实现关联的导入错误。
步骤 5:导出验证器
开发了必需的插件代码后,您需要将其导出到 jar 文件,以便 Service Registry 调用它:
- 右键单击该项目,并选择 Export。
- 选择 App Client JAR file 作为导出目的地,并单击 Next,如下所示:
- 浏览至您需要将插件 jar 导出到的目的地,然后单击 Finish,如下所示:请记住该位置,因为稍后将需要它。
步骤 6:使用插件 jar 配置 Service Registry
如果要在 Service Registry V6.0.2 或更高版本上实现此插件,您需要在 Service Registry 中将 SampleValidator 配置为插件 jar,然后才能将 Service Registry 配置为调用该插件。为此,请完成以下操作步骤。如果要在 Service Registry V6.0.0.X 上实现该插件,请跳到步骤 6a。
- 打开命令提示符,转到 <WSRR Installation root>\admin\scripts,并在单行上输入以下命令:
wsadmin -wsadmin_classpath "C:\Program Files\IBM\WebSphereServiceRegistry\
ServiceRegistryClient.jar" -f loadConfiguration.jacl
<path to exported jar> <exported jar filename>
<a name you wish to give this jar> PLUGIN_JAR true
例如:
wsadmin -wsadmin_classpath "C:\Program Files\IBM\WebSphereServiceRegistry\
ServiceRegistryClient.jar" -f loadConfiguration.jacl
"C:/Documents and Settings/Administrator/My Documents/SampleValidator"
SampleGovernanceValidator.jar SampleGovernanceJar PLUGIN_JAR true
- 现在,请跳到步骤 7。
步骤 6a:使用共享库配置应用服务器
如果要在 Service Registry V6.0.0.X 上实现插件,您需要在应用服务器中将 SampleValidator 配置为共享库,才能将 Service Registry 配置为使用该插件。为此,请完成以下操作步骤:
- 在应用服务器管理控制台中,选择 Environment => Shared Libraries。
- 对于 Scope,确保选中 Server,然后单击 New,如下所示:
- 为共享库输入名称和描述信息,并将 jar 文件添加到类路径。确保 jar 的路径不是由于类加载器的行为而被排除的路径。然后单击 OK,如下所示:
- 您应看到以下消息,单击 Save:
- 单击 Save,如下所示:
- 请继续步骤 6b。
步骤 6b:使用包含插件的新共享库配置 Service Registry
现在,您需要使用先前配置的共享库配置 Service Registry,如下所示:
- 从导航菜单选择 Applications => Enterprise Applications,如下所示:
- 从安装的应用程序列表中选择 ServiceRegistry:
- 在 Additional Properties 下选择 Libraries:
- 单击 Add:
- 从列表中选择 SampleValidator,并单击 OK:
- 您应看到以下消息。单击 Save:
- 单击 Save:
您需要重新启动应用服务器才能使这些更改生效。不过,如果您要继续进行以下各部分描述的其余配置,则不需要执行此操作。
步骤 7:将 Service Registry 配置为调用新的控制插件
要为插件配置 Service Registry,请完成以下操作步骤:
-
您首先需要从 Service Registry 检索当前的插件配置。如果您使用的是 Service Registry V6.0.0.X,则请使用下载部分提供的 retrieveConfiguration.jacl 脚本。将此脚本复制到 C:\Program Files\IBM\WebSphereServiceRegistry\admin\scripts。如果您使用的是 V6.0.2,则此脚本已作为产品的一部分提供。
- 打开命令提示符,转到 <Service Registry install root>\admin\scripts,并在单行上输入以下命令:
wsadmin -wsadmin_classpath
"<Service Registry install root<\ServiceRegistryClient.jar" -f
retrieveConfiguration.jacl ValidationProperties
PLUGIN_PROPERTIES true C:\\validation.properties
例如:
wsadmin -wsadmin_classpath
"C:\Program Files\IBM\WebSphereServiceRegistry\ServiceRegistryClient.jar" -f retrieveConfiguration.jacl ValidationProperties PLUGIN_PROPERTIES
true C:\\validation.properties
- 此命令将创建输出文件 C:\validation.properties。在编辑器中打开此文件,并将:
governanceValidators=com.ibm.sr.governance.api.SRGovernanceValidator
更改为(一行):
governanceValidators=com.ibm.sr.governance.api.SRGovernanceValidator,
com.ibm.serviceregistry.samples.SampleValidator
- 保存更改。
- 打开命令提示符,转到 <Service Registry install root>\admin\scripts,并在单行上输入以下命令:
wsadmin -wsadmin_classpath
"<Service Registry install root>\ServiceRegistryClient.jar" -f
updateConfiguration.jacl C:\\ validation.properties
ValidationProperties PLUGIN_PROPERTIES true
例如:
wsadmin -wsadmin_classpath
"C:\Program Files\IBM\WebSphereServiceRegistry
\ServiceRegistryClient.jar" -f updateConfiguration.jacl
C:\\ validation.properties ValidationProperties PLUGIN_PROPERTIES true
您需要重新启动应用服务器才能使此更改生效。不过,如果您要继续以下各部分描述的其他配置,则不需要执行此操作。
步骤 8:使用生命周期配置 Service Registry
要配置生命周期,请完成以下操作步骤:
- 将 JKEnterpriseLifecycleDefinition.sacl 和 JKEnterpriseLifecycleDefinition.wsdl 复制到 C:\。
- 打开命令提示符,转到 C:\Program Files\IBM\WebSphereServiceRegistry\admin\scripts,并在单行上输入以下命令:
wsadmin –wsadmin_classpath "C:\Program Files\IBM\WebSphereServiceRegistry
\ServiceRegistryClient.jar" –f updateLifecycleDefinition.jacl
C:\\ JKEnterpriseLifecycleDefinition.sacl JKEnterpriseLifecycleDefinition.owl
这会在 Service Registry 中配置新的生命周期。
- 重新启动应用服务器,使以前的所有更改生效。
总结
本文向您介绍了 Service Registry 插件的不同类型,如何实现和部署这些插件,以及如何实现控制验证器插件。完成本文中的练习之后,您现在可以开发一个插件,将其部署到 Service Registry 中,并利用提供的示例开发其他类型的插件。
下载 | 名字 | 大小 | 下载方法 |
|---|
| plugin_code.zip | 18KB | HTTP |
参考资料
关于作者  | 
|  | Ben Briden 是 IBM 软件部的 IT 专家。他从事 BetaWorks 方面的工作,为 WebSphere Service Registry and Repository 和 WebSphere Enterprise Service Bus 提供技术支持。您可以通过 benbriden@uk.ibm.com 与 Ben 联系。 |
对本文的评价
|