注意!在使用本资料及其支持的产品之前,请阅读本文档末尾处的『声明』中的信息。
2005 年 3 月 23 日
本文档的此版本适用于 WebSphere Product Center(5724-I68)V5.2 及所有后续发行版和修订版,直到在新版本中另有声明为止。
© Copyright International Business Machines Corporations 2001, 2005. All rights reserved.
US Government Users Restricted Rights
Use, duplication or disclosure restricted by GSA ADP Schedule Contract with IBM
Corp.
第 1 章 WebSphere Product Center 监视
WebSphere Product Center 服务
获取服务的短状态
获取服务的长状态
数据库监视器和管理
1. 在有必要的时候分配更多的空间
2. 应用修订包/补丁集
3. 启动和关闭数据库/数据库管理器
4. 分析数据库模式和收集统计信息
5. 重组表和索引
6. 检查已调度的备份作业的状态
7. 复原和恢复数据库
8. 调整数据库性能
第 2 章 WebSphere Product Center 性能
管理磁盘空间
临时文件
对 Web 页面进行高速缓存
硬件规范
数据库用户
数据库备份
物理备份
逻辑备份
数据库运行状况检查
设置 DB2 运行状况中心报警
数据库管理工具箱
目录
体系结构
管理表空间
删除文件
(可选)对 BLOB 执行 GZIP
整理碎片
文档库常见问题
WebSphere Product Center 备份
数据库备份
恢复
第 6 章 WebSphere Product Center 记录器
WebSphere Product Center 服务日志配置文件
运行时生成的日志
配置日志文件
更改位置
更改文件大小
更改文件备份选项
更改转换模式
转换说明符
格式修饰符
转换字符
WebSphere Product Center 日志记录设置文件
局限性
拼写检查功能
启用拼写检查程序
需求
配置用于 WinterTree Spelling Engine 的 WebSphere Product Center 运行时配置
LDAP 集成
特色概述
功能概述
假定
局限性
对迁移 5.2 以前的版本的影响
将 LDAP 与 WebSphere Product Center 集成
1. 为用户和角色配置 LDAP 模式
2. 编辑 LDAP 配置文件
3. 重新启动系统
工具
应用程序服务器问题
环境问题
常见的不正确配置文件设置
应用程序服务器不响应
数据库问题
1. 数据导出/导入期间的字符转换
2. 数据库空间分配问题
3. 在关闭正在运行的作业后,WebSphere Product Center 的运行速度减慢
4. 重做日志切换问题
5. WebSphere Product Center 中间件挂起,GUI 锁定
6. 分析模式作业挂起
监视日志文件以了解所发生的错误
连接问题
HTTP 传递错误
FTP 访存错误
测试 Java 连接
其它问题
停止和重新启动 WebSphere
Product Center
从 4.2.0.x 迁移至 5.2
导出公司
导入公司
对迁移的影响
从 4.2.1 迁移至 5.1
Web 服务定义语言(WSDL)支持
Web Service 用户界面
支持 Web Service 的脚本操作
对“文档/文字”样式的支持
调度程序与 IBM Tivoli Workload Scheduler 的集成
通过命令行界面控制调度程序
定义与首字母缩写词
集成因素
WebSphere Product Center 作为源系统或目标系统
控制系统
协议
格式
数据大小
通信类型
频率
集成线程
首字母缩写词
设计原理
可重用性
信息共享
信息处理
事件处理
更改跟踪
可重用的连接器
实现
对实现进行缩放
性能调整
验证
稳定性
可伸缩性测试
可视性
报告
文档
有关 WebSphere Product Center 集成的最重要的 10 项准则
使用明确并且公共的术语来描述集成
可重用性
可视性
最小集成
代表环境与完整环境
可伸缩的过程测试
性能
提早建立单一线程
设计规范和文档
单个所有者
EAI 平台集成
方法
其它优点
您可以使用 rootadmin 和 rmi_status 脚本或通过 GUI 来监视 WebSphere Product Center。WebSphere Product Center 未附带提供独立的监视工具。
本文档未阐述如何创建监视工具;但是可能会提到几个简单的思想:
- 在应用程序服务器上(也可能在独立的监视服务器上)创建虚拟主机。由于 rmi_status 和 rootadmin.sh 会造成系统负载,所以,使用独立的监视服务器对于许多环境来说可能更合适。
- 使用脚本语言(如 Perl)来为 rootadmin.sh(它控制和显示服务的状态)创建一个 CGI 包装器。
- 在 Web 服务器中创建一个指向 $TOP/logs 的别名以便您可以更方便地浏览日志文件。
- 创建一个实用程序,它对 $TOP/logs 中的日志进行解析以了解所发生的异常和其它错误并且可以选择检查服务状态。发生错误时,此实用程序可以向管理员发送电子邮件,也可以通过其它一些方法通知管理员。您应该不间断地运行此实用程序
要获取服务的短状态,请传递下列参数:
-cmd=check -svc=<service name>
短状态返回下列其中一种情况:
正在运行 该服务正在运行并且正在响应“脉动信号”功能。 找不到 找不到该服务。该服务可能尚未启动,或者可能已崩溃。 找到但未响应 找到该服务,并发现该服务已对 RMI 注册程序注册,但它未对“脉动信号”功能作出响应。可能必须重新启动该服务。
要获取服务的长状态,请向 rootadmin.sh 传递下列参数:
-cmd=status -svc=<service name>
它将生成一个 HTML 文件,您可以使用任何浏览器来查看该文件。在终端上,使用 Lynx(或类似工具)来对输出进行格式化。
此状态提供正在该服务中运行的不同线程的概述以及该服务当前所使用的数据库连接的状态。
示例:
要获取调度程序的状态:
rootadmin.sh -cmd=status -svc=scheduler > /tmp/sch_status.html; lynx /tmp/sch_status.html
或者
rootadmin.sh -cmd=status -svc=scheduler > /tmp/sch_status.html; lynx -dump /tmp/sch_status.html
注意:以上示例中使用的“>”将状态详细信息定向到文件输出位置。
由于关系数据库是大量产品信息内容的主要存储位置,所以提供能够防止性能下降和损耗的管理操作十分重要。
通过在 WebSphere Product Center 中设置报警,可以针对可能发生的问题提供通知,以便在这些问题失去控制前解决它们。还应该实现监视系统以便不间断地监视 WebSphere Product Center 数据库。
您应该定期执行下列任务。
- 在有必要的时候分配更多的空间
- 根据需要应用修订包/补丁集
- 在有必要的时候启动和关闭数据库管理器、数据库以及其它服务
- 在有必要的时候分析数据库模式并收集统计信息以提高性能
- 定期重组表和索引以提高性能
- 检查已调度的备份作业的状态
- 在有必要的时候复原和恢复数据库
- 调整数据库性能
1. 在有必要的时候分配更多的空间
对于大多数用户来说,空间管理是一项持续进行的任务。除非使用的是完全静态的数据库,否则,表和索引的大小将有规律地增大或缩小。您需要确保有足够的可用空间以使这种情况能够发生,而不会中断正在进行的处理。您还需要帮助确保有效地使用该空间。可以使用“DB2 控制中心”来根据需要分配空间。也可以使用命令行界面来完成这个任务。
2. 应用修订包/补丁集
数据库系统供应商通过修订包/补丁集机制来定期交付已经过全面测试和集成的产品修订。修订包/补丁集仅提供错误修订而未包括新功能,并且不要求在目标系统上进行认证。为了避免数据库系统发生任何已知的问题,在有修订包/补丁集可用时应用它们是十分重要的。请与数据库系统供应商联系以了解更多有关修订的信息。
3. 启动和关闭数据库管理器和数据库
在应用修订以及将数据库从一台服务器移至另一台服务器等过程中,需要关闭数据库管理器/数据库。需要时,将必须启动/关闭数据库。
4. 分析数据库模式和收集统计信息
分析数据库模式以收集有关数据库表和索引的最新统计信息。成本核算优化方法使用统计信息来确定每项执行规划的预计成本。请定期收集统计信息以便向优化器提供有关模式对象的最佳信息。例如,在将相当多的行装入表中之后,应该收集新的表统计信息。
要分析数据库模式,请运行 $TOP/src/db/schema/util 目录中的 shell 脚本 analyze_schema.sh。
5. 重组表和索引
建议您定期重组表和索引以提高性能。
当今,数据库的增长速度比以前快得多,一般的 DBA 必须花费相当多的时间来执行空间管理和重组才能获得最优的性能。
最优的性能意味着响应时间最短。但性能会由于诸多空间管理问题而下降。在这些问题中,大部分问题落在三个主要领域,即,与表相关的问题、索引和 I/O 平衡停滞问题以及数据分区问题。
与表相关的问题为大部分 DBA 所熟悉。这些问题包括表块中的空间未得到充分利用、行相互链接、数据近似度不佳以及表内容零乱(涵盖范围过大)。
性能需求方面的第二项主要问题是索引停滞 - 有 3/4 的索引变得很大并且填充稀疏。
这种情况会极大地降低索引范围扫描性能,并且还会浪费相当大量的磁盘空间。
性能需求方面的第三项主要问题是 I/O 平衡和数据分区。当频繁访问的对象位于同一个数据文件中时,就会产生 I/O 瓶颈。诸如 DB2 中的 reorgchk 之类的工具将提供有关需要重组哪些对象的信息。可使用许多方法和工具来重组数据库对象。请阅读特定于数据库系统供应商的有关重组表和索引的文档。
6. 检查已调度的备份作业的状态
备份是复原和恢复过程的主要组成部分。请验证所有备份作业的状态以确保它们按照时间表运行。
备份状态检查操作随备份过程定义方式以及执行备份时使用的工具的不同而不同。请阅读特定于数据库系统供应商的有关备份的文档以了解更多信息。
7. 复原和恢复数据库
发生数据库故障时,您需要确定故障的类型和范围。分析结果应该指示恢复系统时所需完成的步骤。请使用由您的 IT 支持小组定义的复原和恢复过程。
复原物理备份是指重构它并使其可供数据库服务器使用。恢复已复原的数据文件是指使用重做记录(即,在执行备份后对数据库所作的更改的记录)来更新该数据文件。
8. 调整数据库性能
DBA 的其中一项最重要职责是确保正确地调整数据库。任何 RDBMS 都可在很大程度上进行调整,并允许对数据库进行监视和调整以提高它的性能。
由于下列原因,您应该执行性能调整:
- 计算速度可能会浪费用户的宝贵时间(用户等待响应);
- 使系统能够跟上业务的运作速度;并且
优化硬件的使用以节省资金(公司在硬件上花费了数以百万计的资金)。
请参阅 DB2 产品附带提供的产品文档以了解更多有关可用来调整数据库性能的不同方法的信息。
建议将 30-50 吉字节的可用空间用于 WebSphere Product Center 中间件和临时分区。
- WebSphere Product Center 中间件分区:建议使用 30GB。中间件的大小大约是 65-70 兆字节。
- 临时分区:2-4 GB 的可用磁盘空间(此分区用来存储许多已创建的和已删除的大型临时工作文件)
在集群配置中,应用程序服务器需要共享存储器。可以使用诸如 rsync 之类的实用程序来使静态 HTML 和图像文件同步,但也建议 Web 服务器使用共享存储器。
对于应用程序服务器来说,$TOP、ftp 目录和 Web 服务器的文档根目录(静态 HTML 和图像的位置)通常位于共享设备上,而支持应用程序(如 Apache)、JDK 和应用程序服务器安装在本地存储器上。您既可以将日志存储在本地存储器上,也可以将其存储在共享存储器上。common.properties 中指定的临时目录应该位于本地。
临时文件
下列目录中存储的是运行时生成的临时文件,这些目录位于文件系统中:
注意:临时文件目录可能随所安装的 WebSphere Product Center 的版本不同而不同。
$TOP/public_html/created_files/distributor
- 用途:对于出站 ftp 分发,队列管理器将把文档从数据库下载到此目录中,然后通过 ftp 将该文件发送至它的目标位置。
- 生命周期:在所有已安排的应用程序停机时间内,系统管理员应该删除此目录中的所有文件。按日期将所有文件排序,删除所有比公司为此目录中所有文件确定的滚动周期旧的文件,建议的滚动周期是 7 天。
使用 Linux 的示例
cd $TOP/public_html/created_files/distributor
find . -type f -mtime +7 -exec ls -l {} \; <-- to view which files would be deleted
find . -type f -mtime +7 -exec rm -f {} \; <-- to delete the files.
$TOP/public_html/suppliers/company code/aggregated_files/
- 用途:将把通过 ftp 访问的已上载导入/导出文件放到此目录中。
- 生命周期:不要从文件系统中删除此目录,而是根据需要从 WebSphere Product Center GUI 中删除它。
$TOP/public_html/suppliers/company code/tmp_files:
- 用途:此目录中存储的是临时工作文件。
- 生命周期:建议将此目录中的文件保存几个星期并定期清除它们。如果您愿意的话,可以在 WebSphere Product Center 重新启动时或者根据已定义的时间表来自动清除文件(例如,清除两个星期前的文件)。
$TOP/logs
- 用途:此目录中存储的是 WebSphere Product Center 中间件日志。
- 生命周期:应该根据日志级别(错误 --> 调试)提供足够的磁盘空间。管理员对此目录的大小具有完全的控制权。如果需要使用调试方式,则建议提供 2-3 吉字节的可用磁盘空间。通常情况下,相当于一天的日志将生成大约 30-40 兆字节的日志,您可以进行设置以自动清除这些日志。
WebSphere Product Center 的缺省安装已被设置为指示代理服务器不要对页面进行高速缓存。允许对页面进行高速缓存将极大地限制使用浏览器“后退”按钮的能力,从而生成错误消息和导致页面过期。如果您希望进行高速缓存,则请使用 GUI 导航功能并避免使用“后退”按钮。
编辑文件:common.properties
参数:no_cache_directive=on/off缺省情况下,此参数设置为 off
如果设置为 on,则将设置有关响应的参数以指示代理服务器不要对页面进行高速缓存。
如果设置为 off,则浏览器的“后退”按钮能够起作用,并且不会导致发生错误。
应该凭借最佳实践和过去的经验并根据容量需求来选择硬件规范,以使 WebSphere Product Center 具有最佳的性能。
应用程序服务器
WebSphere Product Center 中的大多数数据对象存储在数据库服务器中。因此,应用程序服务器上的磁盘存储器将仅用来存储操作系统组件、WebSphere Product Center 可执行文件、第三方组件、WebSphere Product Center 临时工作文件和 WebSphere Product Center 日志。
WebSphere Product Center 中间件利用了几个 J2EE 组件,那些组件中的每一个都将使用大量的内存。WebSphere Product Center 建议使用具有 4GB 内存的应用程序服务器,通常,其中的 2.5GB 供 WebSphere Product Center 中间件实例使用。
数据库服务器
数据库服务器的规模取决于各种因素。这些因素可以包括目录项的数目、与每个项相关联的属性的数目以及目录属性的大小。
最安全的方法是为每个属性分配 8kb 的空间。例如,对于带有 500,000 个项并且每个项具有 14 个属性的目录,至少需要 56GB 的数据库存储空间(500,000 个项 x 14 个属性 x 8kb)。
此空间不包括数据库二进制文件、撤销段以及临时表空间等内容所需的空间。
建议的体系结构
如果使用 WebSphere Product Center 来处理大型批处理作业,则建议利用可选调度程序服务器来处理后台事务。
为 WebSphere Product Center 安装创建的数据库用户和密码是在 common.properities 中定义的。在不更新 common.properties 文件的情况下更改数据库用户的密码将导致 WebSphere Product Center 中间件崩溃。如果需要更改数据库用户的密码,请确保更新 common.properties 中的 db_password 属性。在 DB2 中,密码认证是在操作系统级别上进行的。
备份和恢复数据库是数据库管理员(DBA)执行的其中一项最关键的操作。因此,实现充分的备份和恢复策略极为重要。建议采用下列备份策略来保持 WebSphere Product Center 具有最佳性能。
物理备份
WebSphere Product Center 建议对数据库执行日常物理备份。您可以根据系统是否有停机时间来执行数据库脱机物理备份(映像备份)或数据库联机物理备份(热备份)。对大部分 WebSphere Product Center 数据库的访问是持续进行的(每周 7 天,每天 24 小时),即没有任何停机时间,所以可能无法执行数据库脱机备份。在 DB2 中,数据库必须以保留日志方式运行才能执行数据库联机备份。执行数据库联机备份将使您能够将数据库恢复到它在特定时间点所处的状态。要了解更多信息,请参阅 DB2 产品文档。
逻辑备份
逻辑备份存储的是有关为数据库创建的模式对象的信息。通过使用 DB2 中的 DB2MOVE 实用程序,可以有选择地导出特定对象以便对数据库备份策略的保护和灵活性加以补充。数据库导出并非用来替代物理备份,并且,它们无法提供物理备份所能够提供的所有恢复优点。有时,逻辑备份对于设置 QA 或通过生产数据来测试实例来说非常方便。WebSphere Product Center DBM 工具箱还提供了特定于 WebSphere Product Center 的有关执行 WebSphere Product Center 数据库模式逻辑备份的指示信息。
定期检查数据库系统的运行状况是保持系统具有高可用性的关键。
设置 DB2 运行状况中心报警
使用“DB2 运行状况中心”来监视数据库环境的状态并根据需要进行任何必要的更改。运行状况监视器持续不断地监视一组运行状况指示符。如果运行状况指示符的当前值超出由它的警告和警报阈值定义的可接受操作范围,运行状况监视器就会生成运行状况报警。DB2 附带了一组预定义的阈值,您可以在以后对这些阈值进行定制。
以下是可以使用“运行状况中心”执行的一些关键任务:
查看数据库环境的状态。
查看实例或数据库的报警。
查看关于报警的详细信息以及建议的操作。
为特定对象配置运行状况监视器设置以及为某种对象类型或者为实例中的所有对象配置缺省设置。
选择通过电子邮件或寻呼机消息将报警通知哪些联系人。
查看某个实例的报警历史记录。
您可以使用几个数据库管理脚本来管理 WebSphere Product Center 数据库。所有这些脚本都以工具箱形式放在一起。
DB2 工具箱使您能够执行下列任务:
- 清除 WebSphere Product Center 数据库中的数据
- 分析 WebSphere Product Center 模式和收集统计信息
- 对 WebSphere Product Center 模式执行逻辑备份
- 使用 sysinfo.sql 来收集 WebSphere Product Center 数据库的配置详细信息
文档库是 WebSphere Product Center 中的一个区域,每个进入文件和每个外发文件都存储在此区域中。这包括导入馈送、脚本、报告和规范文件。
GUI 结构提供了指向存储在数据库中的文件的超链接,这些超链接本质上是指向文件位置的指针。
目录
文档库是以文件结构方式显示的。您可以访问下列文档库目录中的文件:
archives
public_html
eventprocessor
schedule_logs
feed_files
scripts
ftp
tmp
params
users
Ftp 和 public_html 是挂装到文档库中的文件系统目录。它们是在 $TOP/etc/docstore_mount.xml 中定义的。此文件提供各种操作系统文件系统挂装点的位置。
使用的变量是“$ftp_root_dir”和“$supplier_base_dir”,它们是在 common.properties 配置文件中定义的。
体系结构
数据库对存储在文档库中的文件指定了表空间。当将一个文件存储在文档库中时,就会在数据库中创建一个新记录。数据库将该文件存储为 BLOB(二进制大对象)文件。
BLOB 文件是指需要存储在数据库中的任何随机大型位块,如图形或声音文件。BLOB 的要点是:它是在数据库本身中无法解释的对象。
数据库将 BLOB 存储在该数据库本身的表空间中。这种方法的优点是:数据库使用数据库服务器机制(如备份恢复机制和安全机制)来保护数据,那些机制对所有其它类型的表数据进行保护。
管理表空间
空间管理是一项持续进行的任务。文档库表的大小会增大或缩小。请确保有足够的空间可用来支持大型二进制文件,而不会中断正在进行的处理。并确保有效地使用该空间。
删除文件
当 WebSphere Product Center 删除 BLOB 文件和相应的引用时,数据库引擎不会释放已分配的空间,而是对新文件重用该空间。
因此,每个文件都存储在内存块中,文件被删除后,该内存块将在添加新文件时被重用。
(可选)对 BLOB 执行 GZIP
要对以 BLOB 形式存储的文档进行压缩,请执行下列操作:
要编辑的文件:common.properties
参数:gzip_blobs=true/false
- 有效值为 true 和 false。
- 如果此参数不存在,则它缺省为 false。
- 如果设置为 true,则对以 BLOB 形式存储的文档进行压缩。
整理碎片
由于在文档库中多次添加和删除文件,所以内存块会变为碎片。当频繁地使用磁盘(创建、删除和修改文件)时,就会自然而然地产生碎片。
有时,操作系统需要将文件的各部分存储在不连续的簇中。这对用户来说完全是不可视的,但是,由于磁盘驱动器必须搜索磁盘的不同部分才能将单个文件拼凑到一起,所以碎片会导致数据的访问速度减慢。
为了提高文档库性能,最好导出 DBL 表并接着使用 compress=y 重新将其导入。这将把所有文件放到一个连续的簇中,从而提高文件的导入速度。
注意:根据表空间分配方式的不同,可能不需要定期整理碎片。请定期监视磁盘速度以确定是否需要对磁盘空间整理碎片。
文档库常见问题
问题:删除 BLOB 之后,WebSphere Product Center 的速度是否继续受影响?
不受影响。删除行之后,文档库页面的速度会有所提高。
问题:空间是否仍处于已分配状态,从而导致导出/导入速度较慢?
是的。解决此问题的唯一方法是导出 DBL 表并使用 compress=y 重新将其导入。
本文档未阐述所使用的特定备份方法和软件;但在这里提供了备份概念。
WebSphere Product Center 的备份分为两部分:备份安装了 WebSphere Product Center 的文件系统目录以及备份数据库。
WebSphere Product Center 备份
要备份 WebSphere Product Center,只需备份 common.properties 中定义的 $TOP 目录。由于这些目录中的文件会更改,所以,建议您执行日常备份。建议使用由定期的完全备份和日常增量备份组成的备份安排机制。
数据库备份
本文档未阐述数据库的备份方式,最主要的原因是可用的方法多种多样:导出、热备份、冷备份以及镜像等等。无论选择哪一种方式,都只必须备份 common.properties 中定义的 WebSphere Product Center 数据库用户模式。
由于仅当数据库可用时 WebSphere Product Center 才能运行,所以建议使用日常联机备份,即“热”备份。还应该定期执行导出或脱机备份。
要了解有关数据库备份的更多信息,请参阅『数据库备份』一节。
恢复
可以将恢复分为两类:WebSphere Product Center 和支持文件的恢复以及数据库的恢复。
要恢复 WebSphere Product Center 和支持文件,只需要将缺少的文件或目录恢复到它们的原始位置并接着启动 WebSphere Product Center。
要恢复数据库,执行下列步骤:
- 关闭应用程序服务器
- 关闭 WebSphere Product Center 中间件
- 复原模式
- 启动 WebSphere Product Center 中间件
- 启动应用程序服务器
WebSphere Product Center 提供了预先配置的文件,这些文件生成日志,接着,这些日志可用来对 WebSphere Product Center 中的问题进行故障诊断。本文档提供了日志记录机制概述并说明了如何设置日志文件。
下列文件控制着整个 WebSphere Product Center 中的各个子系统。生成的日志的位置是在每个文件中定义的。
注意:所有路径都相对于 $TOP。
/etc/logs/eventprocessor.log.xml
/etc/logs/scheduler.log.xml
/etc/logs/system.log.xml
/etc/logs/appsvr.log.xml
/etc/logs/workflowengine.log.xml
可以查看运行时生成的日志以了解所发生的错误,如果问题与 WebSphere Product Center 或内部支持基础结构相关,这样做就有助于进行故障诊断。
WebSphere Product Center 生成的日志文件存储在 $TOP/logs/*.log 中。
可以根据需要来编辑 WebSphere Product Center 日志文件的属性(即,位置、最大大小和格式)。下列各节描述了一些元素,这些元素用来配置日志以及提供配置 WebSphere Product Center 日志文件时可以使用的值的列表。
更改位置
注意:仅适用于文件和滚动追加器。
要更改所生成的日志文件的位置,请更改指定的日志配置文件的参数。
例如:
<param name="File" value="${TOP}/logs/webserver_db.log " />
更改文件大小
注意:仅适用于滚动追加器。
可以将日志文件的大小设置为指定的存储大小,达到该大小后,日志文件将开始回绕并清除最前面的输出。要控制开始截断文件的时间,请更改日志文件大小参数值。
例如:
<param name="maxFileSize" value="10MB" />
更改文件备份选项
注意:仅适用于滚动追加器。
可以定义记录器以便为日志文件保留指定数目的备份。在达到最大值之后,将删除最旧的文件。
例如:
<param name="maxBackupIndex" value="2" />
更改转换模式
可以通过重新定义转换模式来更改日志的布局配置。
例如:
<param name="ConversionPattern" value=
"%d [%t] %-5p %c (%F:%L) %x- %m%n"/>转换模式与 C 语言 printf 函数的转换模式紧密相关。转换模式由文字文本和称为转换说明符的格式控制表达式组成。
注意:可以在转换模式中随意插入任何文字文本。
每个转换说明符都以百分号“%”开头并且后跟可选的格式修饰符和转换字符。
%(格式修饰符)(转换字符)
例如,
%-5p [%t]: %m%n
- 格式修饰符控制诸如字段宽度、填充、左对齐和右对齐之类的内容
- 转换字符指定数据的类型(例如,类别、优先级、日期和线程名)。
缺省情况下,相关信息是按原样输出的。但是,在格式修饰符的帮助下,可以更改最小字段宽度、最大字段宽度和对齐。
可选的格式修饰符被放到百分号与转换字符之间。在示例中,转换说明符 %-5p 表示日志记录事件的优先级应该向左对齐,并且宽度为 5 个字符。
第一个可选格式修饰符是左对齐标志,它就是减号(-)字符。后跟可选的最小字段宽度修饰符。这是一个十进制常量,它表示要输出的最小字符数。如果数据项不需要那么多字符,则在左边或右边进行填充,直到达到最小宽度为止。
缺省情况是在左边进行填充(向右对齐),但可以通过左对齐标志来指定在右边进行填充。填充字符是空格。如果数据项的长度大于最小字段宽度,则将扩充字段以容纳该数据。值不会被截断。
可以使用最大字段宽度修饰符来更改此行为,该修饰符是由句点以及后面跟着的十进制常量指定的。如果数据项的长度大于最大字段宽度,则将从数据项的开头而不是从末尾除去额外的字符。
例如,如果最大字段宽度是 8,并且数据项的长度是 10 个字符,则将删除数据项的前两个字符。
注意:此行为与 C 语言中的 printf 函数不同,在该函数中,截断是在末尾进行的。
下列页面提供用来定义转换说明符的值。
以下是类别转换说明符的各种格式修饰符示例。
格式修饰符
向左对齐
最小
宽度
最大宽度
注释
%20c
False
20
无
如果类别名的长度不足 20 个字符,则在左边填充空格。
%-20c
True
20
无
如果类别名的长度不足 20 个字符,则在右边填充空格。
%30c
不适用
无
30
如果类别名的长度超过 30 个字符,则从开头进行截断。
%20.30c
False
20
30
如果类别名的长度不足 20 个字符,则在左边填充空格。但是,如果类别名的长度超过 30 个字符,则从开头进行截断。
%-20.30c
True
20
30
如果类别名的长度不足 20 个字符,则在右边填充空格。但是,如果类别名的长度超过 30 个字符,则从开头进行截断。
以下是识别的转换字符的列表:
转换字符
作用
c
用来输出日志记录事件的类别。(可选)类别转换说明符可以后跟精度说明符,后者是括在花括号中的十进制常量。
如果给出了精度说明符,则将只打印类别名最右边的相应数目的组件。缺省情况下,将打印整个类别名。
例如,对于类别名“a.b.c”,模式 %c{2} 将输出“b.c”。
d
用来输出日志记录事件的日期。日期转换说明符可以后跟括在花括号内的日期格式说明符。
例如,%d{HH:mm:ss,SSS} 或 %d{dd MMM yyyy HH:mm:ss,SSS}。如果未给出日期格式说明符,则采用 ISO8601 格式。
日期格式说明符允许使用与 SimpleDateFormat 的时间模式字符串相同的语法。尽管是标准 JDK 的部件,但 SimpleDateFormat 的性能相当不好。
为了获得较好的结果,建议您使用 log4j 日期格式化程序。可以使用字符串“ABSOLUTE”、“DATE”和“ISO8601”(它们分别指定 AbsoluteTimeDateFormat、DateTimeDateFormat 和 ISO8601DateFormat)中的其中一个字符串来指定这些日期格式化程序。例如,%d{ISO8601} 或 %d{ABSOLUTE}。
这些指示的日期格式化程序的执行效果明显优于 SimpleDateFormat。
m
用来输出 WebSphere Product Center 提供的与日志记录事件相关联的消息。
n
输出一个或多个依赖于平台的行分隔符。
实际上,此转换字符的性能与使用不可移植行分隔字符串(如“\n”或“\r\n”)相同。因此,这是指定行分隔符的首选方法。
p
用来输出日志记录事件的优先级。
r
用来输出从启动 WebSphere Product Center 开始到创建日志记录事件为止经过的毫秒数。
t
用来输出生成了日志记录事件的线程的名称。
x
用来输出与生成了日志记录事件的线程相关联的 NDC(嵌套的诊断上下文)。
%
序列 %% 输出单个百分号。
下列示例演示 WebSphere Product Center 日志文件的定义方式。粗体条目设置 WebSphere Product Center 日志文件的配置。
<!-- basic ASYNC appender -->
<appender name="ASYNC" class="org.apache.log4j.AsyncAppender">
<appender-ref ref="DEFAULT"/>
</appender>
<!-- basic CONSOLE appender. This is the same as doing system.out-->
<appender name="STDOUT" class="org.apache.log4j.ConsoleAppender">
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="[%t] %-5p %c (%F:%L) %x- %m%n"/>
</layout>
</appender>
<!-- simple FILE appender. The file will be opened and if append is true -->
<!-- it will not be truncated -->
<appender name="DEFAULT" class="org.apache.log4j.FileAppender">
<param name="File" value="${TOP}/logs/tomcat_default.log " />
<param name="Append" value="true" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d [%t] %-5p %c (%F:%L) %x- %m%n"/>
</layout>
</appender>
<!-- Rolling FILE appender. The file will be opened and if append is true -->
<!-- it will not be truncated -->
<!-- maxFileSize: How big before you rotate -->
<!-- maxBackupIndex: How many backups do you keep? -->
<appender name="DB" class="org.apache.log4j.RollingFileAppender">
<param name="File" value="${TOP}/logs/tomcat_db.log " />
<param name="Append" value="true" />
<param name="maxFileSize" value="10MB" />
<param name="maxBackupIndex" value="2" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d [%t] %-5p %c (%F:%L) %x- %m%n"/>
</layout>
</appender>
<!-- For the austin.db category, you want to have only a few logs kept hence -->
<!-- the rollingappender -->
<category name="austin.db" additivity=" false">
<priority value="INFO" />
<appender-ref ref="DB" />
</category>
<!-- ROOT CATEGORY -->
<!-- MUST ALWAYS BE LAST ENTRY AND HAVE AN APPENDER-->
<!-- If a logging event is not caught by any other logger it will be handled by this-->
<!-- rule. -->
<root>
<priority value="error"/>
<appender-ref ref="DEFAULT"/>
</root>
</log4j:configuration>
WebSphere Product Center 中的拼写检查功能是使用 WinterTree 提供的第三方产品“Sentry Spell Checking Engine”的框架提供的。因此,WebSphere Product Center 未与任何拼写检查程序功能捆绑在一起,要启用拼写检查功能,您需要购买 WinterTree Software 的 Spelling Service Engine V5.10。
注意:要使用 WebSphere Product Center 中的拼写检查程序功能部件,需要 Wintertree Sentry Spelling Checker Engine Java SDK 5.10。
在此发行版中启用拼写检查程序功能之后,用户只能在“项详细信息”和“单一编辑内容编辑”屏幕中执行拼写检查。将来的发行版将在“多重编辑”屏幕或“成批编辑”屏幕中提供对拼写检查程序功能的支持。
本文档描述了要让 WebSphere Product Center 在运行时使用 WinterTree Software 的 Spelling Service Engine V5.10 所需进行的配置设置。
要配置用于 WinterTree Spelling Engine 的 WebSphere Product Center 运行时配置,需要更改 3 个属性文件:
注意:在更改所有属性文件之后,请重新启动 WebSphere Product Center 以使“Spelling Engine 运行时配置”参数生效。
common.properties
位置:<WPC5.2_INSTALL_DIR>/etc/default/common.properties 文件
值:编辑 common.properties 文件以包括下列属性值:
spell_check=true(这将启用 Spelling Engine)
spell_check_vendor=wintertree(这将拼写引擎供应商设置为 WinterTree SSCE)
spell_check_vendor_class=common.plugins.wintertree.WinterTreePlugin(这将为 Wintertree SSCE 设置插件)
spell_license=<license_key>(在 <license_key> 属性中键入向 WinterTree 购买的 Spelling Engine V5.10 软件的许可证密码)
spellservice.properties
位置:<WPC5.2_INSTALL_DIR>/etc/default/plugins/wintertree/spellservice.properties 文件
值:将每个出现的 MainLexicon<n> 属性的 <WINTERTREE_INSTALL_DIR> 替换为系统上 WinterTree Spelling Engine 软件的安装位置。这将配置 Spelling Engine 的词典/字典和运行时属性。
ccd.rc
位置:<WPC5.2_INSTALL_DIR>/setup/ccd.rc 文件
创建从 <WPC_INSTALL_DIR>/jars/ssce.jar 到 <WINTERTREE_INSTALL_DIR>/runtime/lib 中安装的 WinterTree jar 文件 ssce.jar 的符号链接。这可以通过对此文件添加一个未注释的行来实现,如以下示例所示。
例如:
- AddJar $JARDIR/ssce.jar
LDAP(轻量级目录访问协议)集成通过在 WebSphere Product Center 中引入三项功能来改进 WebSphere Product Center 的安全性基础结构:
LDAP 集成提供了使用第三方 LDAP 系统来进行认证的能力。由于使用第三方 LDAP 功能来进行授权是非常复杂的,所以,使用 WebSphere Product Center 5.2 中现有的授权基础结构来对 LDAP 用户进行授权,但是认证将在 LDAP 的域中进行。LDAP 用户和角色在 WPC 中的授权既是运行时行为又基于用户/系统调用的脚本操作。WebSphere Product Center 中的 LDAP 用户是使用 LDAP 标志进行区分的。
LDAP 与 WebSphere Product Center 的集成提供了经过改进的安全性授权基础结构,该授权基础结构允许支持 1000 个以上需要针对各种(内部和外部)角色进行授权的一般用户。例如,“类别管理员”将是一个内部角色,而“助理品牌管理员”将是一个外部角色。
对于 WebSphere Product Center 5.2 来说,仅针对 IBM Tivoli Directory Server V5.2(支持 LDAP V3)验证了 LDAP 集成。但是,实现是可扩展的,它可以与下列 LDAP 服务器配合工作:Sun Java System Directory Server 5.2、Weblogic 8.1– Embedded LDAP Server 和 Novell® eDirectory™ 8.7.3。
注意:在此发行版中,不支持“单点登录”功能。我们已计划在将来的发行版中实现“单点登录”。
如果一个用户在某个会话中通过认证,则在该会话结束之前,该用户将保持处于已通过认证状态,即使在该时间段内更改了用户标识(即更改了角色和密码等等)亦如此。
此发行版尚未对进行 LDAP 条目搜索时进行的特定于语言环境的字符串抽取操作进行验证。
由于引入了新的 LDAP 标志来区分 LDAP 用户和 Product Center 用户,所以在 WPC USER ENTITY 中有一项模式更改。
本节描述在将 LDAP for IBM Tivoli Directory Server V5.2 与 WebSphere Product Center 5.2 集成时所需执行的任务。这里假定您已经正确地安装了 IBM Tivoli Directory Server V5.2。LDAP 的配置要求为 IBM Tivoli Directory Server V5.2 的用户和角色配置 LDAP 模式。
要将 LDAP 与 WebSphere Product Center 集成,请执行下列操作:
1. 找到为 LDAP 配置打包的配置文件
2. 为 IBM Tivoli Directory Server V5.2 的用户和角色配置 LDAP 模式
3. 编辑 LDAP 配置文件
4. 在 WebSphere Product Center 中启用 LDAP 平面
5. 重新启动 WebSphere Product Center
<WPC5.2_INSTALL_DIR>/etc/default/ldap_config.xml
创建新域
1. 在 IBM Tivoli Directory Server Web 管理工具中,使用菜单路径域和模板 > 添加域来创建新域。
2. 填写所有必需字段。
3. 选择对象类 domain 作为“父 DN”。
例如:相对 DN 父 DN
cn=myrealm dc=wpcdomain.dc=isl.dc=com创建新的用户模板
1. 在 IBM Tivoli Directory Server Web 管理工具中,通过单击域和模板 > 添加用户模板来创建新的用户模板。
2. 键入上面创建的域条目来作为“父 DN”。选择“结构对象类”作为 inetOrgPerson。
3. 编辑“必需属性”选项卡以包括下列所有必需属性:
- Cn
- Sn
- Uid(这是“命名属性”)
- TelephoneNumber
- TelexNumber
- postalAddress
4. 使用菜单路径域和模板 > 管理域 > 编辑来使这个用户模板与上面创建的域相关联。
例如:
Parent DN
dc=wpcdomain,dc=isl,dc=com
cn=mytemplate,dc=wpcdomain,dc=isl,dc=com
创建新用户1. 从 IBM Tivoli Directory Server Web 管理工具中,使用菜单路径用户和组 > 添加用户来创建新用户。
2. 选择上面创建的域来作为此用户的“域”。
3. 在“必需属性”选项卡中键入内容以包括上面提到的所有属性。
创建新组
1. 从 IBM Tivoli Directory Server Web 管理工具中,使用菜单路径用户和组 > 添加组来创建新组。
2. 选择先前创建的域来作为这个组的“域”。组的对象类是 groupOfNames。
3. 使用户与组相关联。
要将 LDAP 与 WebSphere Product Center 集成,以下 LDAP 配置文件是必需的:
<WPC5.2_INSTALL_DIR>/etc/default/ldap_config.xml
编辑 ldap_config.xml 文件,将方括号中显示的值替换为适合于 LDAP 安装的值,以便进行运行时 LDAP 认证。
<?xml version="1.0" encoding="UTF-8"?>
<LdapConfiguration>
<connectionInfo>
<connectionParam name = "java.naming.provider.url"> (Enter the LDAP server URL)</connectionParam>
<connectionParam name = "java.naming.security.principal">(Enter username for logging into LDAP server)</connectionParam>
<connectionParam name = "java.naming.security.credentials">(Enter password for logging into LDAP server)</connectionParam>
<connectionParam name = "java.naming.security.authentication">simple</connectionParam>
<connectionParam name = "java.naming.referral">follow</connectionParam>
<connectionParam name = "java.naming.factory.initial">com.sun.jndi.ldap.LdapCtxFactory</connectionParam>
<connectionParam name = "java.naming.ldap.version">3</connectionParam>
</connectionInfo>
<RoleMapping>
<Object name = "Role Class">groupOfNames</Object>
</RoleMapping>
<WPCUserCredentialMappings ParentDN="(Key in the base DN for the User Objects)" ObjectClass="inetOrgPerson">
对于当前示例,基本 DN 是:cn=myrealm,dc=wpcdomain,dc=isl,dc=com
<WPCUserParam name = "UserName">uid</WPCUserParam>
<WPCUserParam name = "FirstName">cn</WPCUserParam> >
<WPCUserParam name = "LastName">sn</WPCUserParam> >
<WPCUserParam name = "Email">mail</WPCUserParam> >
<WPCUserParam name = "Address">postalAddress</WPCUserParam> >
<WPCUserParam name = "Phone">telephoneNumber </WPCUserParam>
<WPCUserParam name = "Fax"> TelexNumber</WPCUserParam> >
</WPCUserCredentialMappings>
</LdapConfiguration>
在 WebSphere Product Center common.properties 文件中,启用 LDAP 标志。
例如,
enable_ldap=true
在前面 4 个配置 LDAP 的步骤完成后,重新启动 WebSphere Product Center。
- 日志文件分析
- netstat
- ps
- kill
- svrmgrl 或 sqlplus
- telnet
- jar
- tar
- gunzip
- 通常,对 Web 服务器和应用程序服务器的超级用户访问权是必需的。
环境问题
在启动 WebSphere Product Center 之前,应用程序服务器上的 WebSphere Product Center 伪用户必须配置下列环境变量:
- TOP:WebSphere Product Center 安装的顶级目录
- DB2_HOME:对于 DB2 客户机二进制文件来说是必需的
- JAVA_HOME:对于 JDK 来说是必需的
- PATH:必须包括 $DB2_HOME/bin,并且应该包括 $JAVA_HOME/bin
另外,在启动 WebSphere Product Center 之前,必须定义 shell 脚本 init_ccd_vars.sh 的位置。这通常是在用户的 .bashrc 文件中完成的。
定义了 init_ccd_vars.sh 的位置之后,就不应该修改 CLASSPATH 环境变量。
常见的不正确配置文件设置
- common.properties
最常见的错误是 common.properties 中的数据库说明符不正确。未进行正确配置的数据库将具有下列症状:
appsvr、eventprocessor、queuemanager、scheduler 和 workflowengine 将无法启动
日志文件 logs/db_pool 和 logs/svc/ 中有错误
smtp_address。Smtp_address 应该指向 SMTP 中继,该中继或者是 localhost 上的 sendmail,或者是另一个能够将电子邮件发送到组织外部的系统。
- 许可证文件
如果缺少许可证文件(WPC_license.xml)或者它不正确,则不会启动任何服务。此错误将反映在 logs/svc 下的日志文件中。
应用程序服务器不响应
方案
应用程序服务器的响应变得极为迟钝。虽然有可能对服务器进行 ping 操作,但用户无法登录到环境,并且管理员无法登录到应用程序服务器。
要检查的事项:
进行检查,了解用户最近是否启动了非常大的作业。如果用户是有意识地启动该作业的,则检查该作业使用的脚本。
1. 数据导出/导入期间的字符转换
2. 数据库空间分配问题
3. 数据块毁坏和索引毁坏问题
4. 在比较长的一段时间之后,导入或导出挂起,并且状态栏不更改
5. 在关闭正在运行的作业之后,应用程序变得非常慢
6. 重做日志切换问题
7. WebSphere Product Center 中间件挂起,GUI 锁定
8. 分析模式作业挂起
9. SQL 连接自动重新启动
1. 数据导出/导入期间的字符转换
问题
在数据库的导出/导入期间,在使用该数据库的副本来创建测试环境时,出现了关于所使用的字符集的错误消息。
症状
例如,如果导出使用字符集 US7ASCII 的数据库,则以下错误消息将出现在导出日志中:
已使用 US7ASCII 字符集完成导出,并且 UTF8 NCHAR 字符集服务器使用 UTF8 字符集(可能进行字符集转换)
解决方案
每当导出/导入数据库时,设置 NLS_LANG 参数以使用字符集 american_america.utf8。
2. 数据库空间分配问题
问题
导入和导出作业有时候会由于为表、索引、回滚段和临时段分配的空间不够而失败。
症状
如果回滚段已满,或者回滚段表空间已满,则您在报警日志文件中将看到错误消息,该消息类似于显示如下的错误消息:
ORA-1650:在表空间 RBS 中,无法将回滚段 RBS8 按 512 进行扩展
由于已对回滚段 9 设置 1650 条件 FULL 状态,所以无法扩展回滚段 9。
解决方案
- 确保在表空间中有足够的可用空间。对于较大型的作业,在回滚段和临时段中可能需要更多的空间。
- 每天都检查数据库的报警日志文件,了解是否生成了任何关于数据库空间问题的错误。
3. 在关闭正在运行的作业后,WebSphere Product Center 的运行速度减慢
问题
每当关闭作业(如导入或导出)时,数据库系统都必须回滚整个事务以使数据库具有一致的状态。这个回滚过程将利用最多的系统资源(如 CPU 时间和内存)。
症状
在关闭正在运行的作业后,WebSphere Product Center 中间件的运行速度缓慢。
解决方案
等待回滚完成并且系统返回正常状态。除非有必要,否则不要关闭正在运行的作业。
4. 重做日志切换问题
问题
日志文件的数目不足/大小不够大会导致数据库系统长时间等待日志切换。
症状
数据库系统正在长时间地等待日志切换,并且是否所有重做日志文件都处于活动状态。
解决方案
- 增加日志文件的数目
- 增大重做日志文件的大小
5. WebSphere Product Center 中间件挂起,GUI 锁定
问题
如果访问 WebSphere Product Center 中间件时出现错误,则有可能是数据库连接已丢失。
症状
WebSphere Product Center 中间件锁定或者处于持续等待状态。当尝试访问 WebSphere Product Center 中间件时,出现错误。
解决方案
- 检查侦听器进程的状态
- 每当无法建立数据库连接或者 WebSphere Product Center 中间件屏幕时,检查数据库的状态。
6. 分析模式作业挂起
问题
建议您在将大量数据装入数据库或者从数据库中删除/清除表时偶尔地分析模式。
在运行模式分析前,必须停止 WebSphere Product Center 中间件。如果中间件未停止,则由于表正被该中间件使用,所以分析模式作业可能会挂起。
症状
当运行模式分析时,WebSphere Product Center 挂起。
解决方案
如果模式分析操作挂起,则关闭分析作业、停止 WebSphere Product Center 中间件、再次分析模式并启动 WebSphere Product Center。
定期分析模式以收集有关数据库中数据分布情况的最新统计信息。
监视和查看系统日志文件有助于诊断和解决许多问题。
注意:下一个文档版本将对本章进行扩充。 将提供更多有关使用日志文件和故障诊断技术的信息。
HTTP 传递错误
当发生 HTTP 传递错误时,考虑下列问题:
1. WebSphere Product Center 框能否看到目标位置?
- 使用 Linux/Unix http 浏览器(如“Lynx”)并输入 WebSphere Product Center 中间件 URL 以了解能否访问目标。
- 如果 WebSphere Product Center 服务器未提供浏览器,则尝试对目标位置上的端口 80 执行 telnet。例如,如果目标 URL 是 http://myserver/<urlname>,则输入“telnet myserver 80”(端口 80 是大多数 Web 服务器上的缺省 http 端口)。
2. 如果 WebSphere Product Center 能够看到目标位置,那么 WebSphere Product Center 分发器的工作正常吗?
- 检查在 $TOP/public_html/created_files/distributor 下面是否存在新文件。进行检查,了解当您尝试显示文件时是否有文件具有适当时间戳记。
- 有可能是一个失控的脚本生成了错误的输出文件。检查文件大小。文件大小是否与您所期望的大小相对应?如果该文件是 XML 或别的可读文件,则列出其内容。该文件是否包含您所期望的正确信息?
3. 如果该文件存在,那么是否正在进行传送?
- 可以使用不同的工具来了解是否正在进行实际的传送。您将至少需要结合使用“netstat”与“snoop”(在 Solaris 下)或“tcpdump”(在 Linux 下)。
- 调整您的期望值。如果文件大小是 300 MB,并且正在通过因特网将其传递到 URL,则该文件只能以因特网连接的最高速度传送。
FTP 访存错误
如果 WebSphere Product Center 尝试登录到目标 FTP 服务器并且找不到指定的目录,则会出现一个错误“无法切换至远程目录”。
有几个原因会导致此错误:
- 无法从 WebSphere Product Center 服务器访问目标 FTP 地址。从 WebSphere Product Center 服务器尝试直接对目标 FTP 执行 FTP 操作并验证文件传输。
- 使用的文件名可能不正确。检查大小写和拼写错误。
测试 Java 连接
JDBC URL 是在 common.properties 文件中定义的。要测试从 WebSphere Product Center 中间件到 JDBC URL 的 Java 连接,请使用以下脚本来测试 Java 连接。
$TOP/bin/test_java_db.sh
此脚本尝试连接至数据库并运行一个简单的“select count(*) from dual”。如果已建立连接,则将显示测试脚本生成的结果。
停止和重新启动 WebSphere Product Center
当在 Linux/Solaris 下使用常规停止脚本时,报告了一个问题。显然,WebSphere Product Center 未正确地或顺利地停止。如果发生这种情况,则使用下列步骤来停止并启动 WebSphere Product Center:
1. 通过执行以下脚本,尝试顺利地停止 WebSphere Product Center:
$TOP/bin/go/stop_local.sh
2. 等待大约一分钟的时间,然后输入以下命令:
ps –u (USERNAMEWITHOUT THE PARANTHESIS)
3. 如果有任何活动的 Java 进程,则表示有一个已调度的作业仍在进行中。如果您愿意的话,让该作业完成,否则使用以下脚本来手工停止该作业:
$TOP/bin/go/abort_local.sh
4. 等待大约 30 秒钟的时间,然后输入以下命令:
ps –u (USERNAMEWITHOUT THE PARANTHESIS)
5. 如果仍有活动的 Java 进程,则最可能的情况是 JVM 已崩溃。可以使用以下命令来手工关闭该 Java 进程:
kill `ps -u (USERNAMEWITHOUT THE PARANTHESIS)
| grep java | cut -b10-15`注意:如果仍存在任何 Java 进程,则可能需要重新启动系统。
6. 在关闭所有 Java 进程之后,使用以下脚本来重新启动 WebSphere Product Center:
$TOP/bin/go/start_local.sh
7. 等待大约一分钟的时间,然后验证 WebSphere Product Center 是否已正确启动。运行脚本 $TOP/bin/go/rmi_status.sh 或登录到 WebSphere Product Center 环境。
我们提供了用于从 WebSphere Product Center V4.2.0.x 迁移到 V5.2 的迁移框架。我们将在以后提供用于从 WebSphere Product Center 5.0 和 5.1 迁移到 5.2 的迁移框架。由于在 5.0 发行版与 5.2 发行版之间只有非常少量的已知核心更改,所以您可以根据需要执行手工迁移。请与您的 WebSphere Product Center 代表联系以了解更多信息。
在 4.2.0.x 中有一些 shell 脚本,它们可以帮助导出和导入 WebSphere Product Center 中特定公司的所有对象:
导出
导入
以上脚本使您能够方便地以 zip 文件形式导出 4.2.0.x 版本的所有 WebSphere Product Center 对象。该 zip 文件可以导入到 5.2 中以执行迁移活动。
可以通过两种方法来导出 WPC 4.2.0.x 中的公司。
1. 使用名为 $TOP/bin/exportCompanyAsZip.sh 的 shell 脚本实用程序
用法:
exportCompanyAsZip --company_code=<code> --script_path=<path/to/trigo/script>
其中,
下面给出了一个样本脚本。
envObjList = new EnvObjectList();
envObjList.addAllObjectsToExport("CATALOG");
envObjList.addAllObjectsToExport("HIERARCHY_MAPS");
envObjList.addAllObjectsToExport("MAPS");
envObjList.addAllObjectsToExport("FEEDS");
envObjList.addAllObjectsToExport("LOOKUP_TABLE");
envObjList.addAllObjectsToExport("ATTRIBUTE_COLS");
envObjList.addAllObjectsToExport("CONTAINER_ACCESSPRV");
envObjList.addAllObjectsToExport("HIERARCHY");
envObjList.addAllObjectsToExport("COMPANY_ATTRIBUTES");
envObjList.addAllObjectsToExport("SPEC");
envObjList.addAllObjectsToExport("DATASOURCE");
envObjList.addAllObjectsToExport("USERS");
envObjList.addAllObjectsToExport("ACG");
envObjList.addAllObjectsToExport("ROLES");
envObjList.addAllObjectsToExport("CATALOG_CONTENT");
envObjList.addAllObjectsToExport("HIERARCHY_CONTENT");
envObjList.addAllObjectsToExport("LOOKUP_TABLE_CONTENT");
envObjList.addAllObjectsToExport("DOC_STORE");
envObjList.addAllObjectsToExport("MY_SETTINGS");
envObjList.addAllObjectsToExport("DISTRIBUTION");
envObjList.addAllObjectsToExport("DOC_STORE");
sDocFilePath = "archives/company.zip";
exportEnv(envObjList, sDocFilePath);
2. 使用上面提供的脚本并在支持 WebSphere Product Center 脚本的环境中直接运行它(即在导入作业或报告中运行它,甚至直接在“脚本沙箱”中运行它)。
也可以使用 $TOP/bin/exportCompany.sh shell 脚本来以脚本形式从 WPC 环境中导出某些预定义的 WPC 对象,该脚本以 shell 脚本形式导出对象,因此,通过在另一个环境中执行这些脚本,我们可以重新创建这些 WPC 对象。但是,由于此实用程序不能够导出 WPC 对象内容(即层次结构中的项信息或类别信息),所以在进行迁移工作时不会使用此实用程序来导出 WPC 对象。
可以通过三种方法导入公司。
1. 使用 shell 脚本 $TOP/bin/importCompanyFromZip.sh
用法:importCompanyAsZip --company_code=<code> --zipfile_path=<path/to/import/archive>
其中,
company_code 是要导入的公司的公司代码
zipfile_path 是公司的压缩归档在文档库中的所在位置。
2. 使用 WPC 脚本操作 importEnv(String sDocFilePath)
其中,
sDocFilePath 是公司的压缩归档在文档库中的所在位置。
也可以使用 exportCompany.sh 的结果来导入 WPC 公司。但是,由于 exportCompany.sh 不能够导出 WPC 对象内容(即层次结构中的项信息或类别信息),所以在进行迁移工作时不会使用此脚本。
3. 使用应用程序 GUI 的“导入环境”选项。
使用应用程序 GUI 来导入数据
作为 WPC 4.2.0.x 中提供的现有导入/导出工具框架的一部分,下列 WPC 对象不会被导出:
选择
我们将把 4.2.0.x 中提供的导出工具更新为还支持导出这些 WPC 对象。
在 WPC 5.2 中,除了支持先前版本中已存在的“RPC/编码”样式以外,还将提供对基于“文档/文字”的 SOAP 请求的支持。此项迁移活动还需要进行测试。
4.2.1 包含“导入/导出工具”的正式发行版。此功能部件提供了“导入环境”的 GUI 功能点,它可以通过 zip 文件来将从同一版本 WebSphere Product Center 中的公司导出的数据导入到 WebSphere Product Center 中的另一公司中。
一个 XML 控制文件定义了导入顺序。这个控制文件是在导出期间创建的,并且被打包到 zip 文件中。建议客户使用的迁移框架是使用 4.2.0.x 中的 exportCompanyAsZip.sh 来导出所有公司数据。此脚本的输出 zip 文件应该与 5.2 中的“导入环境”或 importCompanyFromZip.sh 执行的导入兼容。
Web 服务定义语言(WSDL)支持 - 对简单请求消息的 WSDL 1.2 和 SOAP 1.2 请求/响应的支持。“协作管理器”菜单包括一个“Web Service 模块”,后者用于在“Web Service 控制台”中设置服务。当前,基于 HTTP 的 SOAP 是唯一受支持的协议。
定义
WebSphere Product Center 提供了一个脚本编制层,后者可用作 API 层。这些脚本可进一步作为 Web Service 公布。为需要在 WebSphere Product Center 中公布的每项业务功能创建一个 Web Service。创建相应的请求者应用程序来与该 Web Service 交互。该 Web Service 将在 WebSphere Product Center 上执行一个或多个脚本,并且将与其它 Web Service 配合工作以提供期望的业务功能。
下图显示了简单请求消息的 WSDL 1.2 和 SOAP 1.2 请求/响应用例。
Web Service 是使用“Web Service 控制台”设置的。下列步骤利用一般的 WSDL 用例。
1. Web Service 控制台 - 单击“新建”并为下列字段输入必需信息:
- Web Service 名称(例如:Item_Request)
- Web Service 描述(例如:使外部应用程序能够根据商品的标识属性(如 GTIN 或 UPC、GLN 以及目标市场)请求商品的详细信息)
- Web Service 定义文件(如下所述)
- Web Service 实现脚本(如下所述)
2. Web Service 定义文件
Web Service 定义文件是从“Web Service 控制台”上载的,它包含 WSDL 1.2 格式的 Web Service 描述。Web Service 使用 SOAP 1.2 请求/响应编码,WSDL 文件包含以下内容:
- 请求消息的 XSD
- 响应消息的 XSD
- 故障消息的 XSD
- WSDL 1.2 需要的所有其它内容
注意:Web Service 定义文件将被发布到缺省 HTTP 服务器,后者是 WebSphere Product Center 的 HTTP 服务器。这也是 Web Service 定义脚本的发布位置。系统通过“帮助”按钮提供帮助。
3. Web Service 实现脚本 - Web Service 实现脚本由符合以上 Web Service 定义的SOAP 1.2 进入请求消息调用。Web Service 实现脚本执行下列操作:
- 按照以上 Web Service 定义解析 SOAP 1.2 请求消息
- 典型情况下,查询一个或多个 WebSphere Product Center 容器以获取产品信息
- 创建包含产品信息的 SOAP 1.2 响应消息
- 将 SOAP 1.2 响应消息传送到请求者应用程序。
- 将请求和响应消息记录到文档库中,并以“消息控制台”能够访问的方式记录指向文档库中的消息的链接。
4. 请求者应用程序请求消息 - 请求者应用程序的管理员编写过程以创建与步骤 2 描述的 Web Service 定义相符的 SOAP 1.2 消息。
5. 请求者应用程序响应消息 - 请求者应用程序的管理员编写过程以接收并处理与步骤 2 描述的 Web Service 定义相符的 SOAP 1.2 消息。
设置 Web Service 后,将发生下列事件:
1. 用户运行请求者应用程序中的过程,该过程导致将 SOAP 1.2 消息从请求者应用程序传送到 WebSphere Product Center HTTP Server。
2. 请求消息只包含标识属性,如 GTIN 或 UPC、GLN 以及目标市场。
3. WebSphere Product Center 执行 Web Service 实现脚本以解析 SOAP 1.2 请求消息、访问产品信息、创建 SOAP 1.2 响应消息以及传送响应消息。
4. (可选)- 系统将请求消息和响应消息记录在文档库中。系统以“消息控制台”能够访问的方式记录指向文档库中的消息的链接。
5. 请求者应用程序接收响应消息。
6. 请求者应用程序对响应消息执行操作。
下列文件控制着整个 WebSphere Product Center 中的各个子系统。生成的日志的位置是在每个文件中定义的。
注意:所有路径都相对于 $TOP。
/etc/logs/eventprocessor.log.xml
/etc/logs/scheduler.log.xml
/etc/logs/system.log.xml
/etc/logs/appsvr.log.xml
/etc/logs/workflowengine.log.xml
Web Service 控制台使用户能够创建和管理由 WebSphere Product Center 发布的 Web Service。您可以编写 WSDL 文档以定义服务,将创建一个实现脚本来控制该服务的执行方式。
Web Service 控制台包含下列各列:
- 名称:Web Service 的名称。您可以单击名称以查看 Web Service 的详细信息。
- 描述:用来描述 Web Service 的简要描述。
- 协议:当前,SOAP_HTTP 是唯一可用的协议。
- 事务:服务的事务数。您可以单击数字以查看事务,也可以单击“删除”按钮以从控制台中除去该 Web Service。
要访问 Web Service 控制台,请使用以下菜单路径:
协作管理器 > Web Service > Web Service 控制台
要创建新的 Web Service,请使用以下菜单路径:
协作管理器 > Web Service > 新建 Web Service
“Web Service 详细信息”屏幕出现。输入定义新的 Web Service 所必需的信息。
本节定义“Web Service 详细信息”屏幕的每个字段。
注意:请参阅下一节以了解在支持“文档/文字”样式 Web Service 方面已进行的更改。
Web Service 名称:输入 Web Service 的名称。此名称将成为 SOAP 服务 URL 的一部分。它一定不能包含任何空格。
Web Service 描述:输入 Web Service 的描述。
协议:用于 Web Service 的协议。当前,基于 HTTP 的 SOAP 是唯一受支持的协议。缺省值为“SOAP_HTTP”。
样式:样式可以是“DOCUMENT_LITERAL”或“RPC_ENCODED”。实现“文档/文字”服务的 WPC 脚本将接收到完整的请求主体,并且预期返回完整的响应主体。“RPC/编码”服务 WPC 脚本将接收到字符串参数数组,并且预期返回单个字符串。对于简单应用程序来说,“RPC/编码”服务可能更易于使用,但“文档/文字”服务能够为更复杂的服务提供更大的灵活性。
URL:提供可以用于访问该服务的 URL。在保存 Web Service 之后,会自动填写此字段。
WSDL URL:可以用来访问 Web Service 的 WSDL 的 URL。在保存 Web Service 之后,会自动填写此字段。
WSDL:输入此服务的 WSDL。WSDL 文档以 XML 格式描述服务的接口、URL 和协议。虽然您必须手工输入此文档,但是我们在下面提供了样本 WSDL 文档。您必须输入有效的 XML 才能成功地保存 Web Service。
实现脚本:输入用于实现此服务的 WPC 脚本。对于“RPC/编码”服务来说,服务的进入参数位于数组变量“soapParams”中,服务的返回值必须是写至“out”写程序变量的字符串。对于“文档/文字”服务来说,SOAP 请求主体是在字符串变量“soapMessage”中提供的,并且响应主体必须被写至“out”写程序变量。对于任何一种样式,将故障代码写至“soapFaultCode”写程序变量,并将故障消息写至“soapFaultMsg”写程序变量以返回 SOAP 故障。下面提供了样本实现脚本。
存储请求吗?:如果选中此项,WPC 就会将所有进入请求的参数存储在文档库中。您将可以从“事务控制台”中获取这些参数。
存储回复吗?:如果选中此项,WPC 就会将所有响应的内容存储在文档库中。您将可以从“事务控制台”中获取这些参数。
已部署:如果选中此项,则将部署服务。否则,此服务将不可用。
以下“文档/文字”Web Service 返回指定股票代号的报价。这个有限的示例只返回“IBM”股票代号的价格;所有其它自变量都将导致 SOAP 故障。
这个 Web Service 端点等同于具有以下特征符的 Java 方法:
java.math.BigDecimal getStockQuote(String ticker);
实现脚本
// parse the request document
var doc = new XmlDocument(message);
// get the ticker parameter
var ticker = parseXMLNode("ticker");
// we only give out ibm quotes around here...
if (ticker == "IBM") {
out.println("<ibm:getStockQuoteResponse
xmlns:ibm=\"http://ibm.com/wpc/test/stockQuote\">");
out.println(" <ibm:response>123.45</ibm:response>");
out.println("</ibm:getStockQuoteResponse>");
}
else {
soap_fault_msg.print("Only quotes for IBM are supported");
}
WSDL
<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns="http://schemas.xmlsoap.org/wsdl/"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:y="http://ibm.com/wpc/test/stockQuote"
targetNamespace="http://ibm.com/wpc/test/stockQuote">
<types>
<xs:schema targetNamespace="http://ibm.com/wpc/test/stockQuote"
elementFormDefault="qualified">
<xs:element name="getStockQuote">
<xs:complexType>
<xs:sequence>
<xs:element name="ticker" type="xs:string" nillable="false"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="getStockQuoteResponse">
<xs:complexType>
<xs:sequence>
<xs:element name="response" type="xs:decimal"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
</types>
<message name="getStockQuoteRequest">
<part name="parameters" element="y:getStockQuote"/>
</message>
<message name="getStockQuoteResponse">
<part name="parameters" element="y:getStockQuoteResponse"/>
</message>
<portType name="StockQuotePortType">
<operation name="getStockQuote">
<input message="y:getStockQuoteRequest"/>
<output message="y:getStockQuoteResponse"/>
</operation>
</portType>
<binding name="StockQuoteBinding" type="y:StockQuotePortType">
<soap:binding style="document"
transport="http://schemas.xmlsoap.org/soap/http"/>
<operation name="getStockQuote">
<soap:operation soapAction=""/>
<input>
<soap:body use="literal"/>
</input>
<output>
<soap:body use="literal"/>
</output>
</operation>
</binding>
<service name="StockQuoteService">
<port name="StockQuotePort" binding="y:StockQuoteBinding">
<soap:address
location="http://example.wpc.ibm.com/services/StockQuoteService"/>
</port>
</service>
</definitions>
要搜索所有 Web Service 事务,请使用以下菜单路径来查看事务控制台:
协作管理器 > Web Service > 事务控制台。
1. 从事务控制台中,在“Web Service 事务”表中查看事务列表。
2. 单击“响应”列或“请求”列中的“查看”按钮。事务详细信息将显示在新的浏览器窗口中。
1. 在事务控制台中,从“Web Service 事务搜索”表的“起始到达日期”字段和“结束到达日期”字段中选择日期范围。
2. 单击“搜索”按钮。所有事务结果都将显示在搜索表下方的“Web Service 事务”表中。
供应商门户网站集成功能能够为零售商提供许多益处,包括:
为了正确地与 Websphere Portal Server 集成,WebSphere Product Center 提供了一个 Web Service 框架,此框架提供了下列功能:
为了与 Websphere Portal Server 集成,Web Service 功能支持下列功能:
因此,Web Service 框架提供了下列功能:
“脚本沙箱”提供的下列脚本操作具有 WebSphere Product Center 对 Web Service 的支持:
注意:要获取有关每个脚本操作的其它详细信息(原型和描述),请参阅 WebSphere Product Center 中的“脚本沙箱”。
· createWebService
· deleteWebService
· getDesc
· isDeployed
· getLoginString
· getImplScriptPath
· getName
· getProtocol
· getStoreIncoming
· getStoreOutgoing
· getStyle
· getUrl
· getWebServiceByName
· getWsdlDocPath
· getWsdlUrl
· invokeSoapServer
· saveWebService
· setDeployed
· setDesc
· setImplScriptPath
· setName
· setProtocol
· setStoreIncoming
· setStoreOutgoing
· setStyle
· setWsdlDocPath
本节包含有关 WebSphere Product Center 提供的“文档/文字”样式 Web Service 支持的详细信息。先前版本已提供了“RPC/编码”样式的 Web Service。但是,“RPC/编码”Web Service 只支持简单字符串类型。为了满足支持发送和接收复杂类型的需求,WebSphere Product Center 提供了对“文档/文字”样式 Web Service 的支持。
为了部署“文档/文字”样式 Web Service,用户需要创建一个 Web Service,后者包含用于定义服务模式的 WSDL 以及在接收到请求时要调用的 Websphere Product Center 触发器脚本。在保存 Web Service 时,用户需要明确地选择部署该 Web Service。在部署之后,WebSphere Product Center 将为该 Web Service 创建一个 URL,用户可以通过该 URL 访问已部署的 WSDL。Web Service 的 URL 具有以下格式:
http://<application-webserver>:<application-port-number>/services/<stored-webservice-name>
在此 URL 末尾追加“?wsdl”字符串将得到为该 Web Service 存储的 WSDL 的路径。
对“文档/文字”Web Service 进行的请求将封装在 SOAP 信封中,并且 SOAP 消息的主体将包含整个请求文档。这个请求文档必须具有正确的 XML 格式,并且将被按原样传递给 WebSphere Product Center Web Service 处理程序。调用者根据它预先对所调用的 Web Service 的已存储的 WSDL 的模式节点格式的了解来创建此请求。
WebSphere Product Center Web Service 处理机制将接收此请求并针对“文档/文字”样式请求的 WSDL 模式来验证该请求的内容。如果该请求与 WSDL 模式不符,则将抛出 AxisFault。否则,WebSphere Product Center 将从请求主体中除去名称空间引用,然后将经过修改的请求传递给部署时存储的 WebSphere Product Center 触发器脚本。WebSphere Product Center 脚本上下文无法处理启用了名称空间的 XML 文档,此限制导致必须除去名称空间。WebSphere Product Center 触发器脚本将获取请求内容并按照脚本作者定义的方式来使用那些内容。此脚本必须将它的结果作为对进入请求的有效响应输出。因此,在返回输出之前,将针对 WSDL 来验证该响应。
示例:
“文档/文字”模式类似于:
<element name="getStockQuote"/>
<complexType>
<sequence>
<element name="ticker" type="xsd:string"/>
</sequence>
</complexType>
</element>
<element name="getStockQuoteResponse"/>
<complexType>
<sequence>
<element name="response" type="xsd:decimal"/>
</sequence>
</complexType>
</element>
如果客户机调用了 getStockQuote("IBM"),则流程将类似于:
1. WebSphere Product Center 从 Axis SOAP 堆栈接收到 SOAP 请求。
2. Websphere Product Center 针对以上模式对请求消息进行验证。
3. Websphere Product Center 从请求主体中除去所有名称空间前缀。在本例中,由于此模式定义了缺省名称空间中的所有内容,所以不需要除去名称空间前缀。
4. Websphere Product Center 调用 Web Service 触发器脚本。输入变量是:
- operationName = "getStockQuote"
- message =
"<getStockQuote>
<ticker>IBM</ticker>
</getStockQuote>"5. 触发器脚本将响应写至“out”写程序变量:
- out =
"<getStockQuoteResponse>
<response>83.76</response>
</getStockQuoteResponse>"6. Websphere Product Center 针对以上模式对响应进行验证。
7. Websphere Product Center 通过 Axis SOAP 堆栈将完整的 SOAP 响应发回给客户机。
以下列表提供了为了支持“文档/文字”样式而进行的更改。
根据 WebSphere Product Center 版本的不同,可能需要执行小幅的数据库(DB2/Oracle)修改。请咨询 WebSphere Product Center 代表以了解迁移问题。
http://java.sun.com/developer/technicalArticles/xml/jaxrpcpatterns/
由于 WebSphere Product Center 附带交付的 XML 解析实现(由 Xerces V2.4.0 提供)有局限性,所以必须在 WSDL 的模式节点中以局部方式定义名称空间声明。当部署“文档/文字”样式 Web Service 时,此问题最为明显。例如,以下内容是有效的 WSDL,但 Websphere Product Center 无法正确地识别这些内容:
<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:y="http://ibm.com/wpc/test/stockQuote" targetNamespace="http://ibm.com/wpc/test/stockQuote">
<types>
<xs:schema targetNamespace="http://ibm.com/wpc/test/stockQuote" elementFormDefault="qualified">
<xs:element name="getStockQuote">
<xs:complexType>
<xs:sequence>
<xs:element name="ticker" type="xs:string" nillable="false"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="getStockQuoteResponse">
<xs:complexType>
<xs:sequence>
<xs:element name="response" type="xs:decimal"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
</types>
<message name="getStockQuoteRequest">
<part name="parameters" element="y:getStockQuote"/>
</message>
<message name="getStockQuoteResponse">
<part name="parameters" element="y:getStockQuoteResponse"/>
</message>
<portType name="StockQuotePortType">
<operation name="getStockQuote">
<input message="y:getStockQuoteRequest"/>
<output message="y:getStockQuoteResponse"/>
</operation>
</portType>
<binding name="StockQuoteBinding" type="y:StockQuotePortType">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<operation name="getStockQuote">
<soap:operation soapAction=""/>
<input>
<soap:body use="literal"/>
</input>
<output>
<soap:body use="literal"/>
</output>
</operation>
</binding>
<service name="StockQuoteService">
<port name="StockQuotePort" binding="y:StockQuoteBinding">
<soap:address location="http://localhost/axis/services/StockQuoteService"/>
</port>
</service>
</definitions>
必须按以下方式编写此 WSDL 才能正确地对其进行解析:
<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:y="http://ibm.com/wpc/test/stockQuote" targetNamespace="http://ibm.com/wpc/test/stockQuote">
<types>
<xs:schema targetNamespace="http://ibm.com/wpc/test/stockQuote" xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
<xs:element name="getStockQuote">
<xs:complexType>
<xs:sequence>
<xs:element name="ticker" type="xs:string" nillable="false"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="getStockQuoteResponse">
<xs:complexType>
<xs:sequence>
<xs:element name="response" type="xs:decimal"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
</types>
<message name="getStockQuoteRequest">
<part name="parameters" element="y:getStockQuote"/>
</message>
<message name="getStockQuoteResponse">
<part name="parameters" element="y:getStockQuoteResponse"/>
</message>
<portType name="StockQuotePortType">
<operation name="getStockQuote">
<input message="y:getStockQuoteRequest"/>
<output message="y:getStockQuoteResponse"/>
</operation>
</portType>
<binding name="StockQuoteBinding" type="y:StockQuotePortType">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<operation name="getStockQuote">
<soap:operation soapAction=""/>
<input>
<soap:body use="literal"/>
</input>
<output>
<soap:body use="literal"/>
</output>
</operation>
</binding>
<service name="StockQuoteService">
<port name="StockQuotePort" binding="y:StockQuoteBinding">
<soap:address location="http://localhost/axis/services/StockQuoteService"/>
</port>
</service>
</definitions>
案例标识:P16473
问题:创建新的 Web Service 并重新启动 WebSphere Product Center。当尝试调用新创建的 Web Service 时,发生错误。
变通方法:允许对“public_html/WEB-INF”目录下的 Axis 配置文件“server-config.wsdd”进行写访问。此外,对于使用 WebLogic 的环境来说,必须以展开的目录格式部署 WebSphere Product Center 实例。如果不这样做,Axis 的自动重新部署功能就不会在重新启动时部署 WebSphere Product Center 创建的 Web Service,从而导致错误。
案例标识:P16059
使用 DOCUMENT-LITERAL 创建 Web Service。保存并返回到新创建的 Web Service,然后将样式更改为 RPC-ENCODED 并再次保存。显示的样式是 DOCUMENT-LITERAL。
这是一个已知的局限性。用户无法更改已部署的 Web Service 的样式。
1. 转到 common.properties。为“soap_company”和“soap_user”定义一个值。这将是进入 SOAP 请求在访问数据库和运行脚本时使用的公司和用户。并且,为“wpc_web_url”定义一个值。
例如:
soap_company=acme
soap_user=Admin
wpc_web_url=http://myinstance.acme.com:1234/
2. 启动 WebSphere Product Center。转到“协作管理器 -> Web Service -> 新建 Web Service”。输入或选择下列值。
<?xml version="1.0" encoding="UTF-8"?>
<!-- edited with XMLSPY v2004 rel. 4 U (http://www.xmlspy.com) by Dave Marquard (IBM) -->
<definitions xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:y="http://ibm.com/wpc/test/stockQuote" targetNamespace="http://ibm.com/wpc/test/stockQuote">
<types>
<xs:schema targetNamespace="http://ibm.com/wpc/test/stockQuote" elementFormDefault="qualified">
<xs:element name="getStockQuote">
<xs:complexType>
<xs:sequence>
<xs:element name="ticker" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="getStockQuoteResponse">
<xs:complexType>
<xs:sequence>
<xs:element name="response" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
</types>
<message name="getStockQuoteRequest">
<part name="parameters" element="y:getStockQuote"/>
</message>
<message name="getStockQuoteResponse">
<part name="parameters" element="y:getStockQuoteResponse"/>
</message>
<portType name="StockQuotePortType">
<operation name="getStockQuote">
<input message="y:getStockQuoteRequest"/>
<output message="y:getStockQuoteResponse"/>
</operation>
</portType>
<binding name="StockQuoteBinding" type="y:StockQuotePortType">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<operation name="getStockQuote">
<soap:operation soapAction=""/>
<input>
<soap:body use="literal"/>
</input>
<output>
<soap:body use="literal"/>
</output>
</operation>
</binding>
<service name="StockQuoteService">
<port name="StockQuotePort" binding="y:StockQuoteBinding">
<soap:address location="http://localhost/axis/services/StockQuoteService"/>
</port>
</service>
</definitions>
// parse the request document
var doc = new XmlDocument(soapMessage);
// get the ticker parameter
var ticker = parseXMLNode("ibm:ticker");
// we only give out ibm quotes around here...
if (ticker == "IBM") {
out.println("<ibm:getStockQuoteResponse xmlns:ibm=\"http://ibm.com/wpc/test/stockQuote\">");
out.println("<ibm:response>123.45</ibm:response>");
out.println("</ibm:getStockQuoteResponse>");
}
else {
// do I need to print to soapFaultCode too?
soapFaultMsg.print("Only quotes for IBM are supported");
}
3. 选中“存储请求”,以便您可以从事务控制台查看请求历史记录
4. 选中“存储响应”,以便您可以从事务控制台查看响应历史记录
5. 选中“已部署”以便部署该 Web Service。除非选中此选项,否则该 Web Service 不可用
6. 使用 com.ibm.ccd.soap.test.StockQuoteTest.java 来调用该 Web Service
用法:$JAVA_RT com.ibm.ccd.soap.test.StockQuoteTest <URL> <NUM_CASE>
示例:$JAVA_RT com.ibm.ccd.soap.test.StockQuoteTest http://trillian:9099/services/DocumentWebServiceTest 0
<NUM_CASE> 可以是 0 到 5 的任何整数
0 可以用来查询 IBM 的股票报价。请参阅 StockQuoteTest.java 以了解更多详细信息。
7. 响应将是:
已调用 URL“http://trillian:9099/services/TestingDocumentStyle14”处的 SOAP 服务
请求是“<ibm:getStockQuote xmlns:ibm="http://ibm.com/wpc/test/stockQuote">
<ibm:ticker>SNM</ibm:ticker>
</ibm:getStockQuote>”
SOAP 调用已成功。
结果是“<ibm:getStockQuoteResponse xmlns:ibm="http://ibm.com/wpc/test/stockQuote">
<ibm:response>123.45</ibm:response>
</ibm:getStockQuoteResponse>”
已实现了 WebSphere Product Center 调度程序的命令行界面以允许与外部调度程序集成并以自动方式集成(如果您愿意的话)。目前,已针对 IBM Tivoli Workload Scheduler 对此功能进行了认证。此功能允许用户使用命令界面或使用 Tivoli Workload Scheduler 用户界面来触发 WebSphere Product Center 导入或导出。
局限性:只有在“英语”语言环境下才支持此功能。服务器上使用“美国英语”作为语言的安装将能够使用此功能。所有其它语言都未完全受支持,输出控制台中显示的所有消息都是英文的。已计划在将来的 WebSphere Product Center 修订包或主发行版中对所有其它 Group 1 语言环境进行支持。
可以通过两种方法来执行 WebSphere Product Center 导入和导出作业。第一种方法是使用命令界面来使用 WebSphere Product Center 调度程序触发作业,第二种方法是使用 Tivoli Workload Scheduler 用户界面。要调用第二种方法,必须符合下列先决条件:
1. 在应用程序服务器上安装 Tivoli Workload Scheduler 8.2、Tivoli Management Framework 4.1 和 Tivoli Management Framework Language Support 4.1。
2. 确保 shell 脚本“run_job_template.sh”位于所调度的作业的运行环境中的“$TOP/bin/”文件夹中。
3. 在用来运行或调度作业的桌面上安装 Tivoli Management Framework 4.1。
WebSphere Product Center 的调度程序通过 WebSphere Product Center 安装提供的 shell 脚本 $TOP/bin/run_job_template.sh 来与 IBM Tivoli Workload Scheduler 集成。这个 shell 脚本需要位于所调度的作业的运行环境中,并且每个作业都需要自己的 shell 脚本。
例如,
作业的名称 |
相关联的 shell 脚本 |
Feed 1 |
run_job_feed1.sh |
Feed 2 |
run_job_feed2.sh |
DailyFeed3 | run_job_dailyfeed3.sh |
您需要在每个测试或生产环境中针对所要运行的每个作业修改 run_job_template。
例如:
打开 run_job_feed1.sh,我们将看到以下片段:
#export TOP=<Path to WPC Installation home directory> # E.g. /usr/appinstalls/wpc52
#WPC_INIT_VARS=$TOP/setup/init_ccd_vars.sh
#. $WPC_INIT_VARS# Set the job related variables as needed and do not modify anything else after this
# CCD_JOB_NAME=<Job Name> # [Required]
# CCD_JOB_TYPE=<Job Type> # [Required, Valid values are import|export]
# CCD_COMPANY_CODE=<Company Code> # [Optional, Default Value is trigo]
# CCD_USERNAME=<User Name> # [Optional, Default Value is Admin]
# CCD_DEBUG=<Debug on or off> # [Optional, Default Value is off]
注意:CCD_COMPANY_CODE 的缺省值是“trigo”,这是我们运行 create_schema.sh 时创建的缺省公司。
以上参数片段将更改为:
export TOP=/usr/trigo/wpc52_41/bin
WPC_INIT_VARS=$TOP/setup/init_ccd_vars.sh
. $WPC_INIT_VARS# Set the job related variables as needed and do not modify anything else after this
CCD_JOB_NAME=Feed1 # [Required]
CCD_JOB_TYPE=import # [Required, Valid values are import|export]
CCD_COMPANY_CODE=test # [Optional, Default Value is trigo]
CCD_USERNAME=m # [Optional, Default Value is Admin]
CCD_DEBUG=on # [Optional, Default Value is off]
可使用 Tivoli Workload Scheduler 用户界面来触发 WebSphere Product Center 导入或导出。此用户界面使用一个 shell 脚本来定义所要运行或调度的作业。本节提供使用 IBM Tivoli Workload Scheduler 来执行作业时所需完成的步骤的详细信息。
在可以使用 Tivoli Workload Scheduler 来执行 WebSphere Product Center 作业前,必须创建一个任务来定义作业。
创建任务
创建任务时,您将定义用来运行所调度的作业的主机以及必需 shell 脚本文件的路径。
1. 打开 Tivoli Desktop,然后在“Tivoli 管理环境”对话框中输入 服务器信息,该服务器包含利用合并调度程序功能时所必需的应用程序:WebSphere Product Center 5.2、Tivoli Workload Scheduler 8.2、Tivoli Management Framework 4.1 和 Tivoli Management Framework Language Support 4.1。完成后,单击“确定”。
- 主机 - 输入主机的 IP 地址
- 登录身份 - 输入用户名
- 密码 - 输入用户的密码
2. 双击安装了 Tivoli Workload Scheduler 的主机的名称。“策略域”对话框出现。
3. 从菜单栏中,选择“创建”>“任务库”,“创建任务库”对话框出现。输入新任务库的名称,然后单击“创建并关闭”。
4. 双击任务库以创建任务。创建任务的操作与在 WebSphere Product Center 中创建作业的操作相似。
5. 从菜单栏中,选择“创建”>“任务”并输入任务名。例如,“Task for Feed 1”。
6. 在编辑任务时,选择执行该任务时所需的角色。
7. 选择该任务的执行平台。如果该任务在 AIX 平台上运行,则选中 AIX 选项,于是“任务的 AIX 可执行文件”出现。输入必需信息以指示必需的 shell 脚本“run_job_template”的位置:
- 在主机上:输入“run_job_template”所在的主机名。
- 文件路径:“run_job_template”的文件路径。
注意:对 run_job_template.sh 所作的更改不会在任务中动态反映出来。从“编辑任务”屏幕中,取消选取并接着选取平台选项,然后指定已更新的 shell 脚本的路径以反映所作的最新更改。
要了解有关更改“run_job_template.sh”的信息,请参阅『修改 run_job_template.sh』一节。8. 单击按钮“创建并关闭”以保存对任务所作的编辑。
执行任务
在“任务库”中创建任务之后,就可以手工执行该任务或者在安排的时间执行该任务。该任务在执行时将使用它的已定义主机和“run_job_template.sh”脚本文件来启动 WebSphere Product Center 导入/导出。
1. 在“任务库”屏幕中,双击期望的任务。
2. 选中“显示在桌面上”选项以查看作业执行详细信息以及作业完成状态。
3. 在“可用的任务端点”下面,选择适当的主机,以使该主机出现在“选择的任务端点”下面。
4. 单击“执行”并在“格式化输出”屏幕中检查结果。桌面将显示作业执行详细信息,您可以通过单击“保存至文件...”将这些信息保存到文件中。
在可以调度作业前,必须为需要调度的 WebSphere Product Center 作业创建任务。
创建任务
1. 在 Tivoli 桌面上,单击主机并双击期望的“任务库”以创建作业。
2. 在“创建”菜单选项下面,选择“任务”并输入任务名。
3. 选择需要为其调度作业的任务。
4. 选中“显示在桌面上”选项以查看作业执行详细信息以及作业完成状态。
5. 在“可用的任务端点”下面,选择所需的主机,以使该主机出现在“选择的任务端点”下面。
6. 单击“创建并关闭”。
执行任务
1. 转至“任务库”页面并保持“桌面”打开。
2. 拖动作业“Job for Feed 1”并将其放到桌面上的“调度程序”上。
3. 输入作业标签。
这里,根据用户需求的不同,可以使用几个不同的选项来运行作业。例如,可以将作业安排为无限期地运行,此外,用户也可能想按照固定的时间间隔来运行作业。因此,根据需求的不同,用户可以更改“添加已调度的作业”页面上的设置。
假定用户想要将作业安排为每小时(60 分钟)运行 3 次。在这样的方案中,重要的是确保对于设置的每个时区,显示的当前时间都与服务器时间完全相同。
4. 选中“重复作业”并输入“3”。
5. 输入“60”作为分钟值。
6. 如果用户要向特定的组发送通知,则选中“发布 Tivoli 通知”并单击“可用的组”,然后在“可用的通知组”列表中选择任何组并单击“设置”以关闭窗口。
7. 选中“在桌面上显示状态对话框”。
8. 如果在用户环境中已进行了电子邮件设置,则选择指定电子邮件标识以便通过电子邮件发送通知。
9. 选中“记录至文件”并指定日志文件路径,根据需要指定主机名和文件路径。
10. 单击调度作业或调度作业并关闭。
可以通过 IBM Tivoli Workload Scheduler 的“通知”功能来查看作业状态。如果用户愿意的话,他们还可以登录 WebSphere Product Center 以检查作业状态。
1. 在“桌面”页面上,双击“通知”。
2. 选择任何指定的组并单击“打开”。
如果用户愿意的话,他们可以使用命令行界面来通过 WebSphere Product Center 调度程序运行导入或导出。这要求用户拥有必需的特权来访问用于控制所调度的作业的服务器。
要触发作业,请使用以下命令行:
$JAVA_RT com.ibm.ccd.scheduler.common.RunJob --job_name="aaaa" --job_type=import|export [--company_code=bbbb --username=cccc --debug=on / off]
- job_name - 所调度的导入/导出的名称
- job_type - 对导入或导出作业进行的选择
- company_code - 所调度的作业要链接到的公司名
- username - 一个用户名,此用户能够触发所调度的作业
- debug - 包括有关作业运行时间的调试详细信息
例如:
$JAVA_RT com.ibm.ccd.scheduler.common.RunJob --job_name="Item Feed " --job_type=import --company_code=test --username=user1 --debug=on
此命令将触发公司“test”中名为“Item Feed”的导入作业。
本章旨在对 WebSphere Product Center 实现中的“集成最佳实践”进行总结。使用这些最佳实践将有助于在系统之间实现高质量并且可靠的集成。为了阐述集成的所有方面,编写本文档时提供了与集成的每个不同方面相关联的最佳实践。
关键的集成元素:
- 设计原理
- 实现
- 验证
- 可视性
集成因素:我们可以使用下面列示的因素来理解在 WebSphere Product Center 实现中遇到的各种类型的实现。文档的其余部分将着重说明哪些最佳实践或指南适用于实现的哪些因素或类型。
WebSphere Product Center 作为源系统或目标系统
最明显的因素是:WebSphere Product Center 是正在交换的信息的源系统还是目标系统。源系统对集成施加它自己的约束,最重要的约束是(a)执行增量联合的能力,(b)启动集成的能力,(c)接收有关所发送的数据的成功/失败通知以及执行适当操作的能力,(d)所支持的协议和格式以及对 EAI 基础结构的支持。
控制系统
我们将控制系统定义为根据集成的内部触发器来执行操作的系统。根据时间表以作业形式运行联合的 WebSphere Product Center 就是一个示例。另一个示例是由于添加项而触发 WBI 适配器的 SAP。WebSphere Product Center 是集成的源系统还是目标系统与集成中的哪个系统是控制系统完全无关。有几种可能的情况。当涉及中介(如 FTP 服务器或 EAI 工具)时,源系统和目标系统都可以是控制系统:基于调度的旧系统将文件放在 FTP 服务器上,而基于调度的 WebSphere Product Center 检取该文件。WebSphere Product Center 作为受控目标系统(即,它等待外部信息来触发数据导入)的示例是:IBM WBI 通过调用程序来将消息传递到 WebSphere Product Center,并且消息内容来自 Transora 的项更新。WebSphere Product Center 作为受控源系统(即,它等待外部信息来触发数据导出)的一个示例是:IBM WBI 定期轮询 WebSphere Product Center 队列以了解是否已有可供检取的文件。
协议
在 WebSphere Product Center 实现小组中以及在客户资源中,协议、格式和消息与基于文件的集成之间存在着概念混淆。因此,本文档的其中一个目标是确保我们已经为这些概念确定了公共的术语。协议示例包括文件传输协议(FTP)、超文本传输协议(HTTP)、简单消息传输协议(SMTP,即电子邮件)、Java 消息传递服务(JMS)和 IBM WebSphere Message Queuing(IBM WebSphere MQ)。协议定义诸如包络、数据(例如,数字)的编码以及期望的响应之类的信息,但与所传送的内容无关。在所有集成中,我们都应该相当明确地了解所使用的协议,这是因为我们总是至少使用一种协议。此外,集成的各个阶段可能实际上使用了不同的协议:SAP 中的 WBI 适配器可能通过 HTTP 将数据从 SAP 传送至 WBI Inter Connection Server(ICS),后者接着将该数据移交给 IBM MQ 队列管理器,以便将该数据传送给另一个作为 MQ 客户机与 WebSphere Product Center 相连接的队列管理器。
格式
数据的布局格式与协议无关。格式的示例包括逗号分隔的值(CSV)、竖杠定界、可扩展标记语言(XML)或仅仅是一些预定义的字段和记录结构(如对于电子数据交换(EDI)消息的情况)。每种格式都通过位置/长度参数或通过标记来定义字段。记住特定格式可能需要的编码十分重要。例如:在实现中,我们常常会忘记需要在 XML 中对诸如尖括号(“<”和“>”)之类的字符进行转义或者忘记内容实际上可能包含 CSV 中的逗号。
数据大小
人们常常将这个因素与“基于消息的”或“基于文件的”通信混淆,因此,弄清这个因素的含义十分重要。“基于消息的”集成通常涉及较小型的数据交换,属性类似于:
- 数据交换更频繁并且数据量更少,因此,与以“批处理”为目的的传统系统相比(在这些系统中,可能每星期执行一次导出/导入),传达更改的时间间隔要短得多。
- 两个系统(源系统和目标系统)进行交互以便对发送的消息进行处理并进行应答,而不是生成一个文件,该文件可能通过 FTP 被传送至其它位置或者在文件系统上停留了一星期才被检取以进行处理。
但是,没有明确的界线来区分基于消息的集成与基于文件的集成(即批处理集成),并且,定义一组明确的因素而不相互混淆或重叠十分重要。因此,与数据是被标记为“基于消息的”集成还是被标记为“批处理”集成相比,数据的整体大小应该是需要考虑的更重要的因素。
通信类型
另一个要考虑的因素是集成将要涉及的通信的类型。同步通信将特定操作的结果直接反馈给用户或系统。例如,通过使用 HTTP 来进行通信,就可以在传递操作后将结果自动反馈给系统或用户。另一方面,异步通信更多地使用“射后不理”策略。例如,如果集成涉及在 FTP 服务器上存储文件(该文件将被某个系统检取),则不会将此操作的结果自动反馈给存储该文件的系统。
频率
与“数据大小”因素一起,这个“频率”因素捕获将需要定期处理的数据的总量。
集成线程
这个中间系统和基础结构因素捕获 EAI 基础结构是否正被使用。并且,在带有旧系统的集成中,有时可以编写中间程序以将数据上载或抽取到旧系统中。由于这些中间系统或程序通常是集成链中最弱的环节,因此,了解并记录这些中间系统或程序十分重要。
尤其是在可能需要多次跳跃(例如,从 WebSphere Product Center 到 WBI 再到目标系统)的复杂集成中,非标准方法(如直接更新数据库)、多种协议或其它通信需求(如通过防火墙进行通信)将提早建立单一工作线程或完整集成路径。这将确定问题并给予其它各方(如网络管理员或者在 IBM WBI 上工作的小组)充足的时间来并行地解决这些连接问题。
在 WebSphere Product Center 实现中,上面列示的集成因素应该成为用于描述集成的标准术语。PS 小组在分析/设计阶段提供的文档应该明确并一致地使用这些因素。
首字母缩写词
首字母缩写词
定义
EAI
企业应用程序集成
FTP
文件传输协议
HTTP
超文本传输协议
MQ
IBM 的消息排队中间件。由于所有连接解决方案现在都已纳入 WebSphere 品牌,所以 MQ 通常是指 IBM WebSphere MQ。
ICS
IBM 的 WBI 互联服务器
WBI
IBM 的 WebSphere Business Integration 套件,即 IBM 的 EAI 套件。
可重用性
可重用性是集成实现方法的总体基础。由于 WebSphere Product Center 的发展,越来越多的客户实现得以完成,因此我们需要能够快速地调整并解决与先前未集成的系统进行集成以及与那些在先前实现中已集成的系统进行集成的问题。为了满足这种需求,我们有必要使用可重用性来完成所有集成工作,以便在需要为另一个客户与同一系统集成时,我们能够以最高的效率做到这一点。
可重用性是通过以下方法实现的:(a)利用 EAI 工具(如 IBM WBI)及其一般业务对象模型,(b)选择与数据模型无关的格式,(c)写与数据模型无关并且可以在其它实现中重用的 WebSphere Product Center 脚本(确认和轮询等)的库。
信息共享
通信作为集成方法
可以在概念上认为集成仅仅是可以由控制系统 WebSphere Product Center 与受控系统之间的通信触发的一系列事件。可以通过系统间传递的消息、轮询内容或文件的自动过程或任何其它基本通信方法来触发这些事件。例如,通信内容将包括将要进行的更改的类型(添加、更新或删除)、唯一的通信标识(用于跟踪/确认)以及用来在 WebSphere Product Center 中或在整个系统中影响更改的相关内容。
可靠性衡量
除了在系统之间传递信息以传达更改之外,还应该有一种适当的方法来传达特定事务是成功还是失败这一信息。可以通过同步通信形式来最直观地实现这种握手通信,并且,这种握手通信允许集成的系统跟踪在另一端接收失败时是否需要重新发送特定事务,从而改进并最终确保集成的可靠性。
信息格式
应该以很通用的方式来设计这些通信的特定格式,以便可以在多个实现中重用该格式以及与该格式相关的处理功能。
当考虑用于系统间通信的一般格式时,根据下列需要来注意格式的可用性非常重要:
- 国际字符集和特殊字符(逗号、引号和尖括号等等)
- 复杂结构(即,内容和关系的层次结构)
- 能够处理内容或项占位符的多个实例并且每个实例具有不同的值
信息处理
虽然在系统之间发送的信息的格式在一定程度上应该具有一般性,但是,并非所有实现都能够满足预定义格式也是可以理解的,当我们要将集成看作 WebSphere Product Center 与整个系统之间的直接链接时尤其如此。为了避免由于差别(如数据模型差别)而需要在每个实现中对格式以及格式与 WebSphere Product Center 规范之间的映射进行重新处理,建议在 XML 格式与 WebSphere Product Center 规范之间使用可重用映射功能。
使用 EAI 平台
执行此操作的一种方式是使用 EAI 平台(如 WBI 或 webMethods 套件),这将允许我们构建可重用的连接器,例如,允许 WebSphere Product Center 通过完全可重用的单一消息格式(例如单一 XML DTD)进行通信的连接器。然后,WBI 可以对由于实现的具体情况的不同而导致的差别进行转换,而不是要求重新处理 WebSphere Product Center 功能以处理信息。由于不要求重新处理 WebSphere Product Center 功能,所以可以在多个实现中使用同一功能。
其它选项
但是,需要考虑的另一个因素是,特定的客户可能需要重用在他们的企业内已用于其它系统的格式。这将使得 WebSphere Product Center 难以引入完全独立的 DTD(以后,将需要为企业中的其它系统转换此 DTD 以使其可以被理解而不是为 WebSphere Product Center 进行转换以使用已存在的 DTD)。在这种情况下,我们应该使用可重用功能来在 WebSphere Product Center 中的规范与 DTD 之间进行转换。
另一种可能性是,即使使用了 EAI 平台,但对于特定的客户来说,从理解将 WebSphere Product Center 管理的信息映射到它们的内部 DTD 的角度看来,这种方法对于交流信息来说也更有用,因此是更为理想的方法。
事件处理
理想情况下,WebSphere Product Center 中的一个自动进程将处理事件。例如,可以使用 WebSphere Product Center 发行版中引入的排队功能来处理消息的发送(出站队列)以及响应和进入消息的接收(入站队列)。然后,可以利用队列处理脚本来对那些消息进行实际处理,并因此实际地执行作为特定消息的结果而将要被触发的事件。
但是,事件处理不需要直接与 WebSphere Product Center 的特定功能或特定版本相联系。其它事件处理方法可以包括 WebSphere Product Center 中轮询 FTP 服务器的已调度作业、(通过文档库)在本地文件系统中查找文件的已调度作业、让基于调用程序的触发器脚本根据已传递的信息来激发事件或其它方法。选择哪一种方法应最终根据仔细考虑特定集成的数据大小和频率等因素的要求而定。
更改跟踪
为了能够在系统之间实现完全同步,在 WebSphere Product Center 中需要有一种方法来跟踪对某些内容和项所作的更改,那些内容和项可以被进一步地有效标记为是否传达给整个系统。例如,如果在(作为源系统的)WebSphere Product Center 中删除了一个项,我们有可能希望不仅能够触发一条消息发送至目标系统(该消息通知目标系统:它应该删除同一个项),并且还能够跟踪该消息的传达是成功还是失败以使 WebSphere Product Center 可以了解是否从目标系统中实际地删除了该项。
可重用的连接器
连接器资源库
随着实现的进步以及我们的合作伙伴的发展,我们将逐渐构建用于各种系统的可重用连接器的资源库。我们应尽一切可能来重用这些连接器,这是因为从特定实现的角度来看,只需要对通过这些连接器来处理项等功能作小幅修改甚至不作修改就可以重用这些功能。当然,因为随着时间的推移会不断地发现并解决问题,所以,使用这些连接器将大大加快实现的总体执行速度并增强连接器以及使用那些连接器的实现的总体可靠性和稳定性。
当与尚未定义连接器的系统集成时,应该请一位集成专家参与工作,他可以快速地构建一个可重用连接器,然后,既可以将该连接器用于特定实现上的集成也可以将其存储在连接器资源库中,万一以后我们需要与另一个实现上的系统集成时,可以使用该连接器。
连接器的使用
应该使用连接器,以使可能需要进行的任何修改是通过正在系统之间传递的信息的 EAI 层处理转换进行的。换言之,在重新编写 WebSphere Product Center 中任何用于处理通过 EAI 传递的信息的可重用功能之前,我们应该利用 EAI 平台的能力来执行必需的转换,以便不需要重新编写 WebSphere Product Center 中的任何功能。
对实现进行缩放
最小集成
应该将大型的总体集成任务划分成小得多并且更易于管理的任务。例如,这可以通过将单个完整的集成划分为小得多的集成来完成 - 可逐步划分为每个项类型(规范)的“独立”集成、每个容器(目录)的集成,如果有必要的话,甚至可以细分为一组属性的集成。一旦确信这些“最小集成”中的每一个都毫无缺陷地工作时,可以对它们进行组合以形成一个完整的集成。
功能的粒度
您应该特别注意系统之间发生集成所要求的级别。例如,当将更改发送至目标系统时,用户可能希望能够发送自从特定日期之后的所有更改、仅发送特定目录的自从上次发送更改后的那些更改、仅发送对特定项组发生的更改或者发送对所有项的特定属性发生的任何更改。特定的需求将依赖于实现,但是,在实现的设计过程中提早考虑所需的粒度以便适当地满足该需求十分重要。
性能调整
一般性能注释
不要将性能问题作为遗留问题。在最后阶段更改和修正集成的格式或其它方面很容易,但是,性能瓶颈可能需要进行很大程度上的重新设计,有时甚至需要工程支持。在开发过程中的适当时候,请对脚本进行性能衡量。
衡量性能
在采用最小集成方法(在『实现』一节中详细描述)的情况下,应该在集成的每个步骤中通过测量每个最小集成任务所需的总时间来衡量性能。这样,可以在适当的粒度级别确定潜在的性能不佳区域,因而可以更方便地进行性能调节。
调节性能
在确定性能问题区域之后,应该进行详细的分析以确定操作缓慢的根本原因。可以使用诸如 WebSphere Product Center 的中间件概要分析以及作业详细信息屏幕上的性能选项卡之类的工具来进行详细的分析。然后,该分析可侧重用于脚本或 SQL 查询的特定方面,然后,可以执行适当的操作 - 修改或重新编写脚本,或者着重进行“工程设计”以增强数据库查询功能。
验证
稳定性
最小集成的优点
通过提供显示集成起作用的所有区域的详细列表,实现最小集成(在『实现』一节详细描述)应该能够使您更加坚定地确信集成已成功。在看不到最小集成的情况下,不仅更加难以提供集成起作用的详细信息的证明,整个集成也更加有可能会遇到难以确定、诊断和调试的问题。因此,实现最小集成将增强集成的总体稳定性。
可伸缩性测试
最小集成的优点
通过实现最小集成(在『实现』一节详细描述),就可以在精细得多的详细信息级别进行集成测试,从而使得发生的任何错误或问题不会被大量可能不相关的复杂现象掩盖。因此,如上所述,此方法应该能够大大加速诊断、调试和解决所找到问题的过程。
代表环境与完整环境
应该对与最终环境具有相同的配置(相同的规范、验证规则、值规则和视图)但具有尽可能少的代表实体(语言环境、目录、类别树、项、类别、组织、用户和角色)的代表环境完成集成测试。与在全面环境中进行的测试相比,这应该会缩短测试的运行时间和屏幕的装入时间,并且通常应该能够加快测试速度。所有测试和调试都应该在此环境中完成。
仅当在代表环境中完成了测试并且该环境中的所有内容都表现为工作正常之后,才应该在完整并且全面的环境中验证集成。但是,为了确保在代表环境中没有意外地忽略任何边缘方案,并且为了测试集成的产品级别性能,仍应该执行此步骤。
可伸缩过程测试
首先,只应该对非常少量(10 个或更少)的代表项运行任何可调度的作业(即导入和导出)。应该将此数目按比例增大到能够在实际处理这些项的脚本中获得置信度。这种方法将确保不会有以下情况出现:一个大型的作业运行了数小时,但是运行它的用户最后才发现出现的错误情况没有使整个进程在运行过程中的最初几分钟内立刻失败。
只有在充分确信与作业相关联的脚本的操作之后,才在使用完整数据集的情况下运行该作业。与对于完整环境的建议相同,为了确保在较小型的作业运行中没有意外地忽略任何边缘方案,并且为了测试作业的产品级别性能,仍应该执行此步骤。
可视性
报告
最小集成的优点
实现最小集成(在『实现』一节中详细描述)允许进行更为详细的报告,这是因为集成块更小并且能够更快地实现。与在整个集成的级别报告实现进度相比,这个更精细的报告级别允许更加具体和定量地跟踪实现。
可以在一个图表中列示最小集成以及它们与更大的完整集成图形的关系,然后,可以根据最小集成任务的进度报告来方便地绘制出总体实现进度的准确图形。
所有权
即使是在与多个小组一起工作时,也应该将整个集成的所有权授予单个人员。这个人的工作是确保提早建立单一线程、确保各个小组根据本文档中的指南来工作以及确保在以下环节:(a)最小集成、(b)可伸缩过程测试和(c)代表环境与完整环境的增量式构建/测试等环节中在各小组之间同步。
文档
明确地标识格式和方法
当有多个小组在集成中工作时,请决定一条明确的执行路径,并明确地记录将要使用的任何格式。最普通的示例是,一个 WebSphere Product Center 小组正在从 WebSphere Product Center 中导出数据,而一个客户或 SI 小组正在将该数据上载至目标系统。在没有公共格式的规范之前,不要开始工作,并且,每天都应该保持此文档处于最新状态。这是项目经理必须实施的绝对要求。
此方法并非与使用代表环境和执行最小集成不一致。两个小组都应该以增量方式进行构建和测试以确保进度稳定并且可视。
使用明确并且公共的术语来描述集成
所有实现都应该使用『集成因素』一节中标识的因素。
可重用性
进行缩放的关键在于从先前的集成学习并在牢记『可重用性』一节所描述的可重用性原则的情况下对集成进行打包。
可视性
确定报告进度的总体标准,并且,最起码每隔几天向项目经理提供一次明确的状态更新。
最小集成
根据对一个大型集成有意义的各个因素(目录和属性)来对该集成的复杂性进行划分。每次都把注意力放在一个最小集成上,并且直接与可视性标准联系在一起。
代表环境与完整环境
维护易于调试和测试的代表环境。仅当确信脚本和规范有效时,才移至完整环境。将此项与可视性标准联系在一起。
可伸缩过程测试
在转到完整的数据集之前,对小型数据集测试所有作业以检查正确性。将此项与可视性标准联系在一起。
性能
在开发周期内的早期运行一些性能测试并在此之后定期地运行那些测试以确定问题,而不必担心逻辑或格式的正确性。
提早建立单一线程
请提早建立单一工作线程,在需要多个跳跃、多种协议或非标准方法的复杂集成中尤其如此。
设计规范和文档
请定义并记录明确的执行路径并明确地记录将要使用的任何格式,当有多个小组在集成中工作时尤其如此。
单个所有者
即使是在与多个小组一起工作时,也应该将整个集成的所有权授予单个人员。
方法
一般通信格式
应该尽可能地设计一般通信格式或重用上一个项目的一般通信格式。格式越一般,就会有越多的系统可以参与集成,而不需要对格式进行特殊的重新处理就可以让所有系统能够相互通信。当然,格式越一般,性能就会相应下降,因此,对一个项目理想的格式对另一个项目来说可能不理想。当确定所要使用的特定格式时,仍应该考虑“集成因素”。
内容映射
应该尽可能地通过可动态更新的方法来完成 WebSphere Product Center 中的内容模型与通过通信格式看到的通信模型之间的映射。此外,根据对“集成因素”的调查,特定的项目需求可能会指示这些映射的创建不能是完全可动态更新的 - 例如,因为对绝对最大处理吞吐量设置了高优先级。执行此操作的一种方式涉及使用类别树(例如,表示一个 XML 结构),那些类别树有单一的相关节点规范,该节点规范可以指示该类别树的特定节点在 WebSphere Product Center 的内容模型中映射至的属性的规范节点路径。然后,可以利用递归处理脚本来根据此类别树及其定义的映射处理项到 XML 文件的映射,甚至只需很少的工作就可以满足嵌套多次出现的需要。
信息转换/变换
在集成中涉及的系统本身应该不需要处理集成中的其它系统的信息或内容限制和需求。可以很方便地利用 EAI 平台来处理此项内容转换和变换工作。例如,虽然 WebSphere Product Center 将 FLAG 值存储为“TRUE”或“FALSE”,但是,我们与之集成的系统可能将该值存储为“Y”或“N”。可以使用 EAI 平台来执行这些转换,以便 WebSphere Product Center 始终可以发送 TRUE/FALSE 并假定将把它作为 TRUE/FALSE 发送,而集成系统始终可以发送 Y/N 并假定将把它作为 Y/N 发送。这确保即使集成涉及更多的系统,对于这些附加系统也完全不需要进行重新编码。
为客户着想
由于我们可以重用客户有可能已熟悉的平台,所以,客户可以更加确信集成使用熟知的功能 - 例如 EAI 平台。另外,如果已存在特定于客户机的通信格式并且将该格式用于 WebSphere Product Center 集成,则客户机端开发者几乎不需要参加其它培训就能够理解 WebSphere Product Center 将要映射到的通信格式。
通信灵活性和可靠性
大多数 EAI 平台提供了本机功能来允许通过各种协议进行通信并确保通过代理传递通信内容。这使 WebSphere Product Center 能够把工作重心放在仅仅生成所要传送的必需文档上,而不必担心是否支持其它方法来将此文档传送至各种系统,也无需跟踪此文档是否已被每个系统接收 - 这些问题成为有关 EAI 层和平台需要关注的问题,WebSphere Product Center 仅仅需要从总体集成线程的角度了解它们。
IBM 可能不在所有国家或地区提供本文档中讨论的产品、服务或功能特性。有关您当前所在区域的产品和服务的信息,请向您当地的 IBM 代表咨询。任何对 IBM 产品、程序或服务的引用并非意在明示或暗示只能使用 IBM 的产品、程序或服务。只要不侵犯 IBM 的知识产权,任何同等功能的产品、程序或服务,都可以代替 IBM 产品、程序或服务。但是,评估和验证任何非 IBM 产品、程序或服务,则由用户自行负责。
IBM 公司可能已拥有或正在申请与本文档内容有关的各项专利。提供本文档并未授予用户使用这些专利的任何许可。您可以用书面方式将许可查询寄往:
IBM Director of Licensing
IBM Corporation
North Castle Drive
Armonk, NY 10504-1785
U.S.A.
本条款不适用英国或任何这样的条款与当地法律不一致的国家或地区:
International Business Machines Corporation“按现状”提供本出版物,不附有任何种类的(无论是明示的还是暗含的)保证,包括但不限于暗含的有关非侵权、适销和适用于某种特定用途的保证。某些国家或地区在某些交易中不允许免除明示或暗含的保证。因此本条款可能不适用于您。
本信息中可能包含技术方面不够准确的地方或印刷错误。此处的信息将定期更改;这些更改将编入本资料的新版本中。IBM 可以随时对本资料中描述的产品和/或程序进行改进和/或更改,而不另行通知。
本信息中对非 IBM Web 站点的任何引用都只是为了方便起见才提供的,不以任何方式充当对那些 Web 站点的保证。那些 Web 站点中的资料不是 IBM 产品资料的一部分,使用那些 Web 站点带来的风险将由您自行承担。
IBM 可以按它认为适当的任何方式使用或分发您所提供的任何信息而无须对您承担任何责任。
本程序的被许可方如果要了解有关程序的信息以达到如下目的:(i)允许在独立创建的程序和其他程序(包括本程序)之间进行信息交换,以及(ii)允许对已经交换的信息进行相互使用,请与下列地址联系:
IBM Burlingame Laboratory
Director IBM Burlingame Laboratory
577 Airport Blvd., Suite 800
Burlingame, CA 94010
U.S.A
只要遵守适当的条件和条款,包括某些情形下的一定数量的付费,都可获得这方面的信息。
本资料中描述的许可程序及其所有可用的许可资料均由 IBM 依据 IBM 客户协议、IBM 国际软件许可协议或任何同等协议中的条款提供。
此处包含的任何性能数据都是在受控环境中测得的。因此,在其他操作环境中获得的数据可能会有明显的不同。有些测量可能是在开发级的系统上进行的,因此不保证与一般可用系统上进行的测量结果相同。此外,有些测量是通过推算而估计的,实际结果可能会有差异。本文档的用户应当验证其特定环境的适用数据。
涉及非 IBM 产品的信息可从这些产品的供应商、其出版说明或其他可公开获得的资料中获取。IBM 没有对这些产品进行测试,也无法确认其性能的精确性、兼容性或任何其他关于非 IBM 产品的声明。有关非 IBM 产品性能的问题应当向这些产品的供应商提出。
本信息可能包含日常业务经营中使用的数据和报告的示例。为了尽可能完整地说明这些示例,这些示例中包括个人、公司、品牌和产品的名称。所有这些人名或名称均系虚构,如有实际的企业名称和地址与此雷同,纯属巧合。
所有关于 IBM 未来方向或意向的声明都可随时更改或收回,而不另行通知,它们仅仅表示了目标和意愿而已。
如果提供了编程接口信息,它用来帮助您使用此程序来创建应用软件。
通用编程接口允许您编写获取此程序工具的服务的应用软件。
但是,此信息也可能包含诊断、修改和调整信息。这些诊断、修改和调整信息用于帮助您调试应用软件。
警告:不要将此诊断、修改和调整信息用作编程接口,因为它是会更改的。
下列各项是 International Business Machines Corporation 在美国和/或其他国家或地区的商标或注册商标:
IBM
IBM logo
AIX
CrossWorlds
DB2
DB2 Universal Database
Domino
Lotus
Lotus Notes
MQIntegrator
MQSeries
Tivoli
WebSphere
Microsoft、Windows、Windows NT 和 Windows 徽标是 Microsoft Corporation 在美国和/或其他国家或地区的商标。
MMX、Pentium 和 ProShare 是 Intel Corporation 在美国和/或其他国家或地区的商标或注册商标。
Java 和所有基于 Java 的商标是 Sun Microsystems, Inc. 在美国和/或其他国家或地区的商标。
其他公司、产品或服务名称可能是其他公司的商标或服务标记。
IBM WebSphere Product Center contains certain Excluded Components (as defined
in the relevant License Information document), to which the following
additional terms apply. This software is licensed to You under the terms and
conditions of the International Program License Agreement, subject to its
Excluded Components provisions. IBM is required to provide the following
notices to You in connection with this software:
i.) IBM WebSphere Product Center includes the following software that was
licensed by IBM from the Apache Software Foundation under the terms and
conditions of the Apache 2.0 license:
- Apache Regular Expression v1.2
- Apache Axis v1.1
- Apache XML4J v3.0.1
- Apache Log4j v1.1.1
- Apache Jakarta Commons DBCP Package v1.1
- Apache Jakarta Commons Pool Package v1.1
- Apache Jakarta Commons Collections Package v3.0
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION,
AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement You may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability.
While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of Your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to Your work.
To apply the Apache License to Your work, attach the following
boilerplate notice, with the fields enclosed by brackets "[]"
replaced with Your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright [yyyy] [name of copyright owner]
Licensed under the Apache License, Version 2.0 (the "License");
You may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
ii.) IBM WebSphere Product Center includes the following software that was
licensed by IBM from Scott Hudson, Frank Flannery and C. Scott Ananian under
the following terms and conditions:
- Cup Parser Generator v0.10k
CUP Parser Generator Copyright Notice,
License, and Disclaimer
Copyright 1996-1999 by Scott Hudson, Frank Flannery, C. Scott Ananian
Permission to use, copy, modify, and distribute this software and its
documentation for any purpose and without fee is hereby granted, provided that
the above copyright notice appear in all copies and that both the copyright
notice and this permission notice and warranty disclaimer appear in supporting
documentation, and that the names of the authors or their employers not be
used in advertising or publicity pertaining to distribution of the software
without specific, written prior permission. The authors and their employers
disclaim all warranties with regard to this software, including all implied
warranties of merchantability and fitness. In no event shall the authors or
their employers be liable for any special, indirect or consequential damages
or any damages whatsoever resulting from loss of use, data or profits, whether
in an action of contract, negligence or other tortious action, arising out of
or in connection with the use or performance of this software.
iii.) IBM WebSphere Product Center includes the following software that was
licensed by IBM from Elliot Joel Berk and C. Scott Ananian under the following
terms and conditions:
- JLex v1.2.6
JLEX COPYRIGHT NOTICE, LICENSE AND DISCLAIMER.
Copyright 1996-2003 by Elliot Joel Berk and C. Scott Ananian
Permission to use, copy, modify, and distribute this software and its
documentation for any purpose and without fee is hereby granted, provided that
the above copyright notice appear in all copies and that both the copyright
notice and this permission notice and warranty disclaimer appear in supporting
documentation, and that the name of the authors or their employers not be used
in advertising or publicity pertaining to distribution of the software without
specific, written prior permission. The authors and their employers disclaim
all warranties with regard to this software, including all implied warranties
of merchantability and fitness. In no event shall the authors or their
employers be liable for any special, indirect or consequential damages or any
damages whatsoever resulting from loss of use, data or profits, whether in an
action of contract, negligence or other tortious action, arising out of or in
connection with the use or performance of this software. Java is a trademark
of Sun Microsystems, Inc. References to the Java programming language in
relation to JLex are not meant to imply that Sun endorses this product.
iv.) IBM WebSphere Product Center includes the following software that was
licensed by IBM from International Business Machines Corporation and others
under the following terms and conditions:
- ICU4J v2.8
ICU License - ICU 1.8.1 and later
COPYRIGHT AND PERMISSION NOTICE
Copyright (c) 1995-2003 International Business Machines Corporation and others
All rights reserved.
Permission is hereby granted, free of charge, to any person obtaining a
copy of this software and associated documentation files (the
"Software"), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, and/or sell copies of the Software, and to permit persons
to whom the Software is furnished to do so, provided that the above
copyright notice(s) and this permission notice appear in all copies of
the Software and that both the above copyright notice(s) and this
permission notice appear in supporting documentation.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL
INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING
FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
Except as contained in this notice, the name of a copyright holder
shall not be used in advertising or otherwise to promote the sale, use
or other dealings in this Software without prior written authorization
of the copyright holder.
All trademarks and registered trademarks mentioned herein are the property of
their respective owners.