2012年9月27日星期四

结合使用最新的 Jython 与 WebSphere Application Server wsadmin 瘦客户端

结合使用最新的 Jython 与 WebSphere Application Server wsadmin 瘦客户端

简介

本文介绍如何在 IBM® WebSphere® Application Server 中设置一个 wsadmin 瘦客户端来使用最新版的 Jython。使用最新版的 Jython,为您提供了利用自 Jython 2.1 以后添加的新语言功能的机会,比如:

  • 需要处理其中异常的 Try-except-finally 代码块。
  • 方便处理连接和锁定的 with 结构。
  • 各种库中的改进;尤其是线程库。
  • 内置于最新的 Jython 运行时中的性能改进。

以下这组指令中包含运行该瘦客户端所需的一些工件样例:

  • 用于 Windows® 的包装器脚本 thinClient.bat,用于在该瘦客户端中调用 wsadmin。
  • 用于 Linux® 和 AIX® 的包装器脚本 thinClient.sh,用于在该瘦客户端中调用 wsadmin。(这是一个 bash shell 脚本。)此脚本命名为 thinClient.sh,是为了将它与可用于从服务器配置文件中启动 wsadmin 的 wsadmin.sh 区分开来。
  • 一个 wsadmin.properties 文件,配置来用于该瘦客户端。
  • wsadmin 的配置文件脚本 ThinClientProfile.py,该脚本是通过 – profile 选项为 wsadmin 的。要正确设置 Admin 对象,并在使用脚本库选项 wsadmin.script.libraries 时正确加载库模块,此配置文件必不可少。
  • bash 脚本 addAdminObjectImport.sh,修改 WebSphere Application Server Jython 库管理模块,以包含该模块使用的 Admin 对象(AdminConfig、AdminControl、AdminTask 等)的导入语句。此脚本简化了将随 Jython 版本一起使用的 WebSphere Application Server Jython 脚本库的设置,该 Jython 版本与 WebSphere Application Server 安装所用的脚本有所不同。(如果熟悉 Windows 脚本编写,您可能将能够为 Windows 创建一个类似脚本。)

适用版本

在编写本文时,最新的版本为 Jython 2.5.2,但这里介绍的步骤应同样适用于任何更新的版本。请参阅 参考资料 获取 Jython 2.5 中的新功能的完整列表。

这里介绍的步骤已在 Linux®、AIX® 和 Windows® 中进行了测试,使用的是来自 WebSphere Application Server V7、V8 和 V8.5 环境的瘦客户端。

创建 wsadmin 瘦客户端环境

创建 wsadmin 瘦客户端环境的常规指令可在 中获得。以下列出的步骤基于这些 Information Center 指令,但包含专门针对使用不同版本的 Jython 进行的细微修改。

Java 兼容性

wsadmin 瘦客户端需要一个 IBM Java 运行时来实现与运行部署管理器的 JVM 的 ORB 兼容性,该管理器将与 wsadmin 瘦客户端连接。(可以配置另一个供应商的 JVM 来使用 IBM ORB,但具体细节不属于本文的介绍范围。)获得正确的 IBM Java 的一种方式是在您希望设置 wsadmin 瘦客户端的机器上安装一个合适的 WebSphere Application Server 客户端 (AppClient)。AppClient 带来了 WebSphere Application Server 产品发行版的 “补充” 部分,无需额外的许可成本即可安装。另一种方法(通常更加简单)是,您可从一台已安装 WebSphere Application Server 的机器复制 IBM Java,只要两台机器上的 OS 和字长相同即可。本文中的指令使用的是后一种方法。(顺便说一下,您可以为一个在 64 位 Java 上运行的部署管理器使用一个在 32 位 Java 上运行的 wsadmin 客户端,反之亦然。)

以下是本文中所使用的用来帮助更好地理解此信息的命名约定:

  • <PROFILE_HOME> 指的是一个 WebSphere Application Server 配置文件的根目录,会从这个目录复制一些文件来创建瘦客户端运行时环境。(在测试此信息期间,会从一个部署管理器配置文件中复制相关内容,但也可使用一个节点配置文件。)
  • <WAS_HOME> 指的是一个完整的 WebSphere Application Server 安装的根目录,用于将某些工件复制到瘦客户端运行时环境。
  • <THIN_CLIENT_HOME> 用来指瘦客户端运行时环境的根目录。

创建 wsadmin 瘦客户端环境:

  1. 创建一个将放置瘦客户端环境的顶级目录。在本例中,顶级目录为 /opt/IBM/WebSphere/ThinClient,但您可将该目录放在任何地方。(在一个 Windows 机器上,由于路径名称中的空格字符有时会引起异常,不要将瘦客户端目录放在 Program Files 路径下。)瘦客户端所在的顶级目录一般在这些指令中指的是 <THIN_CLIENT_HOME>

有关 Windows autorun.inf 文件的警告

当使用远程挂载的文件将 Java 从一台机器复制到 Windows 设置中的另一台机器时,您将可能会得到一条警告,表明无法复制或更改 java/docs 目录中的 autorun.inf 文件。在此情况下,可以跳过复制 autorun.inf 文件。
  1. 从现有的 WebSphere Application Server 环境中,通过以下任一方式将 Java 复制到 <THIN_CLIENT_HOME>:
    • 使用 cp – R 复制 <WAS_HOME>/java。
    • 使用 tar – cvf 的保守方法创建一个 <WAS_HOME>/java 归档文件。将该归档文件复制到 <THIN_CLIENT_HOME> 并使用 tar – xvf 提取它。
    • 在 Windows 环境中,将 <WAS_HOME>/java 文件夹复制到 <THIN_CLIENT_HOME>,这可通过拖放或创建一个压缩 (.zip) 文件并对归档文件执行复制和提取来完成。
    您应从一个现有的 WebSphere Application Server 安装中获取 Java,因为 wsadmin 瘦客户端启动时,它会寻找 IBM ORB 类来连接部署管理器进程。使用的 ORB 类是 com.ibm.CORBA.iiop.ORB。您可从一个与配置 wsadmin 瘦客户端的机器兼容的机器(也就是说具有相同的 OS、相同的字长等)上运行的任何 WebSphere Application Server 环境中复制 IBM Java。

Java 和 Jython

安装 Jython 需要一个 Java 运行时,而且运行 Jython 显然也需要 Java 运行时。如果 Java 安装在 wsadmin 瘦客户端机器上并且已在系统路径中,那么您可使用该 Java 来安装 Jython。否则,可使用刚从 <WAS_HOME> 目录复制到 <THIN_CLIENT_HOME>/java 的 Java。在安装 Jython 期间,系统将提示您选择 Java 运行时的路径。为避免混淆,使用安装在 <THIN_CLIENT_HOME> 中的 Java 运行时,它也将用于运行 wsadmin。
  1. 在 <THIN_CLIENT_HOME> 中创建一个名为 lib 的目录。这是将安装最新的 Jython 的地方。
  2. jython_installer-2.5.2.jar 复制到 <THIN_CLIENT_HOME>。
  3. 将最新的 Jython 安装到 <THIN_CLIENT_HOME>/lib 目录。您将在 Jython 站点 上找到安装 Jython 的完整指令。安装 Jython 时,请确保:
    • 使用此命令启动安装程序:

      java -jar jython_installer-2.5.2.jar

    • 使用默认的 标准 安装。
    • 在提示选择将 Jython 安装到的位置时,指定此目录:

      <THIN_CLIENT_HOME>/lib/jython

    • (可选,但推荐使用)在提示选择要用于 Jython 的 Java 安装路径时,选择 Other,然后导航到位于 <THIN_CLIENT_HOME>/java 的 Java。
  4. 将以下 JAR 复制到 <THIN_CLIENT_HOME>/lib:
    • 来自 <WAS_HOME>/runtimes 的 com.ibm.ws.admin.client_#.#.0.jar(其中 #.# 为 7.0、8.0 或 8.5,具体取决于 WebSphere Application Server 版本)
    • 来自 <WAS_HOME>/plugins 的 com.ibm.ws.security.crypto.jar
  5. 在 <THIN_CLIENT_HOME> 中创建一个名为 properties 的目录。这是将存放一些消息和配置文件的地方。

从 Windows 复制到 UNIX

对于本文中提供的一些复制到 UNIX 平台的一些文件(比如 thinClient.sh),一个不错的想法是在这些文件上运行 dos2unix 实用程序,以确保不会遇到由两个操作系统之间的换行符区别带来的问题。
  1. 在一个现有的 WebSphere Application Server 配置文件中,将以下列出的属性文件从 <PROFILE_HOME>/properties 复制到 <THIN_CLIENT_HOME>/properties,执行任何指定的更改:
    • ipc.client.props: 支持 IPC 连接。
    • soap.client.props: 支持 SOAP 连接。

      修改

      • 将 com.ibm.SOAP.securityEnabled 更改为 true。
    • sas.client.props: 支持 JSR160RMI 连接(首选)。
    • ssl.client.props: 支持加密的连接。

      修改

      • 将 user.root 的值更改为 <THIN_CLIENT_HOME>
      • 在此文件中,在 <THIN_CLIENT_HOME> 路径中使用正斜杠。Java 会依据具体平台来正确解释该路径。
      • 在 Default self-signed certificate properties 一节中,检查主题 DN(区分名)是否适合您的站点。(具体来讲,您将需要更改组织属性,而且可能要更改国家。)
    • wsjaas_client.conf: 支持安全连接。

检查盘符

对于 Windows 平台,当修改任何属性文件(比如 wsadmin.properties、ssl.client.props 等)中的路径时,请确保盘符适合您运行 wsadmin 瘦客户端的机器。如果获得运行时错误,表明 wsadmin 无法写入其 traceout 和 valout 日志,问题可能是由盘符引起的。路径的其余部分通常是正确的。
  1. 将 本文中包含的 wsadmin.properties 文件复制到 <THIN_CLIENT_HOME>/properties。这个样例属性文件已经过正确配置。您也可以从 <PROFILE_HOME>/properties 目录的现有 WebSphere Application Server 配置文件中获取一个 wsadmin.properties 文件。
  2. 在 wsadmin.properties 文件中,检查此处列出的参数,以确定您是否需要调整它们的值:
    • (可选)com.ibm.ws.scripting.connectionType=JSR160RMI

      JSR160RMI 是推荐的连接类型,但在一些情况下,您可能发现需要使用 SOAP 连接类型。

    • (可选)com.ibm.ws.scripting.port=0

      它设置为一个虚假端口,以避免意外连接到一个部署管理器。

    • (可选)com.ibm.ws.scripting.host=localhost
    • com.ibm.ws.scripting.defaultLang=jython
    • (必需)com.ibm.ws.scripting.traceFile

      将此值设置为一个使用 <THIN_CLIENT_HOME>/logs 的路径。

    • (必需)com.ibm.ws.scripting.validationOutput

      同样,此参数也必须指定一个使用 <THIN_CLIENT_HOME>/logs 的路径。

    • (可选)com.ibm.ws.scripting.traceString

      默认已禁用。

    • (可选)com.ibm.ws.scripting.validationLevel

      默认为 NONE。

    本文件中的值将被用户主目录下的 wsadmin.properties 文件中的值覆盖。这些值也可被相应的命令行选项覆盖,比如 -host-port 等。
  3. 在 <THIN_CLIENT_HOME> 中创建一个名为 etc 的目录。将在这里创建瘦客户端密钥和信任存储文件以用于远程部署管理器的加密连接。(请参阅属性目录中的 ssl.client.props 文件,了解配置细节。)
  4. 将 本文提供的 样例 thinClient.shthinClient.bat 脚本复制到 <THIN_CLIENT_HOME>,并对其进行修改以便适用于您的瘦客户端安装:
    1. WAS_HOME 的值修改为包含用于创建瘦客户端目录的完整路径(否则会将它称作 <THIN_CLIENT_HOME>)。(在 thinClient.bat 脚本中,请记住在路径名称中使用反斜杠。)
    2. 类似地,将 USER_INSTALL_ROOT 修改为用于创建瘦客户端的目录 (<THIN_CLIENT_HOME>)。
    3. 确保 JAVA_HOME 对您正在使用的 Java 有用。如果使用安装在 <THIN_CLIENT_HOME>/java 以外地方的 Java,您将需要相应地更新 JAVA_HOME 的值。
    4. (可选)将 wsadminHost 修改为您希望连接到的部署管理器的默认主机。(您可在启动瘦客户端时在命令行上提供 – host 参数,这将覆盖包装器脚本中提供的值。)如果您愿意,可提供一个虚假主机名来避免意外连接到某个 WebSphere Application Server 进程。
    5. (可选)取消注释您希望用作默认连接类型的 wsadminConnType。一般而言,强烈建议此类型为 JSR160RMI。这可在启动瘦客户端时使用 – conntype 参数覆盖。
    6. (可选)将 wsadminPort 修改为默认部署管理器的 JSR160RMI 连接的默认端口。(部署管理器的默认 JSR160RMI 端口为 9809,它与 “bootstrap” 端口相同。)这可在启动瘦客户端时使用 – port 参数覆盖。如果愿意,可以提供一个虚假端口号,以避免意外连接到某个 WebSphere Application Server 进程。
    7. 在设置类路径的脚本行中(搜索 "client_"),修改 com.ibm.ws.admin.client_#.#.0.jar 的名称以反映正在使用的 WebSphere Application Server 的版本,也就是将 #.# 替换为 7.0、8.0 或 8.5。
  5. 在 <THIN_CLIENT_HOME> 中创建一个 logs 目录。使它可供所有人编写。此目录用于在启用了 wsadmin 跟踪时跟踪文件。
  6. 在 <THIN_CLIENT_HOME> 中创建一个名为 profiles 的目录。将 ThinClientProfile.py 文件复制到此目录。此 profiles 目录是一个保存 ThinClientProfile.py 文件副本的方便位置,该文件执行两件重要的事情:
    • 它将 Admin 对象加载到 sys.modules 中,这样它们对您的模块就是可见的,这就使得这些对象的导入语句可得到正确解析。
    • 在使用 wsadmin.script.properties Java 选项指定库时,它将使用包含 Jython 模块的任何库目录正确设置 sys.path。
    • 在 ThinClientProfile.py 中,搜索 WebSphereVersion,并根据您使用的 WebSphere Application Server 版本将该值修改为 7.0、8.0 或 8.5。
  7. (可选)为方便起见,将 <THIN_CLIENT_HOME> 放在您的路径中。这将使 thinClient 包装器脚本无需使用其完整路径即可执行。
  8. (可选)如果您使用 WebSphere Application Server 随带的 wsadmin 脚本库(使用 Jython 编写),那么:
    1. 为现有的 WebSphere Application Server 安装中的 scriptLibraries 目录创建一个归档文件。在 UNIX 机器上,这通过 tar 命令来完成:

      cd <WAS_HOME>
      tar – cvf scriptLibraries.tar scriptLibraries

    2. 将 scriptLibraries 归档文件复制到 <THIN_CLIENT_HOME> 中。
    3. 提取 scriptLibraries 归档文件。在 UNIX 机器上,这通过 tar 命令来完成:

      tar – xvf scriptLibraries.tar

    4. 为了使这些库可通过使用更新的 Jython 瘦客户端正确加载,库的根目录名称需要更改为不同于 scriptLibraries 的名称。在本例中,该目录重命名为 wasScriptLibraries
    5. 确保所有类文件都已删除,以便可使用新 Jython 重新编译它们。从 <THIN_CLIENT_HOME> 目录:

      find ./wasScriptLibraries – name “*.class” | xargs rm

    6. 您还需要检查所有脚本库模块,将它们修改为包含一个导入该模块所使用的任何一个 Admin 对象的导入语句。在使用脚本库模块时,导入语句需要避免 Admin 对象上的名称错误。对于 UNIX 机器,有一段 bash 脚本,可将适当的导入语句添加到 WebSphere Application Server Jython 库中的所有 Admin 模块中。请参阅 下载材料 中的样例脚本 addAdminObjectImport.sh(此脚本已在 Linux 平台上进行了测试)。
    7. 当启动 thinClient.sh 时,使用以下选项:

      – javaoption “-Dwsadmin.script.libraries= <THIN_CLIENT_HOME>/wasScriptLibraries”

      其中 <THIN_CLIENT_HOME> 是您的瘦客户端安装的根目录。您可使用相同选项和您可能习惯使用的其他内部脚本库的路径。
    8. 在启动 addAdminObjectImport.sh 时,使用 – profile 选项和 ThinClientProfile.py 的路径,以便使用 wsadmin.script.libraries 中指定的库正确构造 sys.path。例如:

      -profile <THIN_CLIENT_HOME>/profiles/ThinClientProfile.py

      其中 <THIN_CLIENT_HOME> 是您的瘦客户端安装的根目录。
  9. 在 UNIX 平台上,您可能希望将 <THIN_CLIENT_HOME> 目录树的所有权更改为对 wsadmin 瘦客户端机器有意义的用户和组。可使用 chown 命令和 -R 选项来更改整个目录树的用户和组所有权。

初始设置到此就完成了。您现在可使用适合您平台的 thinClient 包装器启动瘦客户端了。

调用 thinClient

本文假设 wsadmin.properties 将默认语言设置为 jython,将 conntype 设置为 JSR160RMI 或 SOAP。当符合此情形时,惟一需要的两个参数是端口和主机。您也可在 wsadmin.properties 中设置端口和主机以提供一个默认设置,但不推荐这么做,因为它可能导致意外地连接到一个部署管理器。

假设采用 JSR160RMI 默认连接类型,在 Windows 对瘦客户端的调用(无需运行 Jython 脚本)类似于:

thinClient.bat – port 9809 – host mydmgrhost

同样,在 Linux 上调用瘦客户端的最精简命令类似于:

thinClient.sh – port 9809 – host mydmgrhost

上面的命令示例会将您带到一个连接到一个部署管理器的 wsadmin “侦听器” 中。(当然,您将需要为您的环境提供一个有效的端口号和主机名)。

当运行一段脚本时,您可使用用于 wsadmin 的所有相同的选项(-f、-profile),以及应用于您的脚本的任何参数。

在 Windows 上,确保在您提供给 thinClient.bat 的任何路径名中使用了正斜杠,以使 Java 能够正常工作。如果您必须使用反斜杠,则必须使用双反斜杠。

首次运行 thinClient

首次运行 wsadmin 瘦客户端时,Jython 将使用它在以后启动时会使用的类对象填充其 cachedir。Jython 将在 <THIN_CLIENT_HOME> 中创建一个 temp/cachedir 目录来保存此对象缓存。您将看到接受处理的每个 JAR 的消息。

首次连接到一个远程部署管理器时,将创建一个密钥和信任存储。系统会提示您将一个公共凭证从部署管理器添加到瘦客户端信任存储中。将显示凭证 属性供您检查。首次使用 wsadmin 瘦客户端连接不同的部署管理器时,系统会再次提示您添加该部署管理器的一个公共凭证。请参阅 ssl.client.props 文件了解密钥和信任存储的特征和位置。(如果坚持使用默认配置,密钥和信任存储在 <THIN_CLIENT_HOME>/etc 中创建。)

故障排除

如果在测试中遇到任何困难,以下是一些故障排除技巧:

  • 检查 thinClient.bat 或 thinClient.sh 中的 JAVA_HOME

    如果 JAVA_HOME 未正确设置,并且预期的位置没有 java.exe,那么 thinClient.bat 或 thinClient.sh 脚本不会正确启动。在 Windows 上,如果从 DOS shell 启动 thinClient.bat 时 java.exe 不正确,您将获得消息 “The system cannot find the path specified”。

  • UNIX 问题

    在 UNIX 平台上,一个不错的想法是在 thinClient.sh 和 ThinClientProfile.py 上运行 dos2unix。这样做可以清除奇怪的问题。

  • 在 thinClient.bat 的参数中使用正斜杠

    即使在 Windows 上,也可在 thinClient.bat 的脚本参数或您通过 thinClient.bat 启动的任何 Jython 脚本中使用正斜杠。如果想要使用反斜杠,您将需要结合使用两种斜杠,以便使 wsadmin 能够正确解释它们。

  • 目标主机的网络可视性

    确保:

    • 您可从正在运行瘦客户端的主机 ping 或 traceroute 到运行部署管理器的主机。
    • 部署管理器主机名能正确解析。如果您在使用该主机名时未能建立连接,可在其位置尝试原始 IP 地址。
    • 您为目标主机使用了正确的 SOAP 或 JSR160RMI 端口。您可通过从管理控制台查看部署管理器来检查该端口。
  • 为 wsadmin 瘦客户端启用跟踪

    如果您希望为瘦客户端的启动开启跟踪功能,可修改 wsadmin.properties 中的 traceString 属性。您无法从命令行控制跟踪。

  • JSR160RMI 问题

    如果无法让 JSR160RMI 正常运行,可尝试 SOAP。

  • 主机名和文件路径中的录入错误

    确保在您尝试连接的远程部署管理器的主机名或端口号中没有任何录入错误。在 Windows 机器上,确保盘符是正确的。(当路径的其余部分正确时,很容易忽略盘符。)

  • SSL 配置问题

    如果未正确配置 SSL,那么您可能会看到此错误:

     WASX7023E: Error creating "SOAP" connection to host "localhost"; exception   information: com.ibm.websphere.management.exception.ConnectorNotAvailableException:   [SOAPException: faultCode=SOAP-ENV:Client; msg=Error opening socket:   javax.net.ssl.SSLException: java.lang.RuntimeException: Unexpected error:   java.security.InvalidAlgorithmParameter Exception: the trustAnchors parameter must   be non-empty;   targetException=java.lang.IllegalArgumentException: Error opening socket:   javax.net.ssl.SSLException: java.lang.RuntimeException: Unexpected error:   java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must   be non-empty]

    这通常是由 ssl.client.props 文件中的 user.root 属性的错误配置导致的。如果瘦客户端无法连接其期望查找密钥和信任存储的位置,那么它将无法在首次启动时创建它们,也无法连接到部署管理器。

在另一台机器上配置瘦客户端以供使用

进行了此处描述的初始配置后,您可对瘦客户端的根目录执行 zip 或 tar 操作,然后将它移动到另一台机器;例如,另一个管理员的桌面。要在另一台机器上重新配置瘦客户端:

  1. 在机器的文件系统中解压或解包 wsadmin 瘦客户端。
  2. 如果目标机器需要一个不同的 Java(例如 32 位,而不是 64 位),那么您需要删除 <THIN_CLIENT_HOME>/java 目录,并从一个具有与目标机器相同架构的 WebSphere Application Server 安装中获取 Java。将该 Java 复制到新 <THIN_CLIENT_HOME> 目录。
  3. 修改 thinClient.bat 或 thinClient.sh,以确保文件顶部的 WAS_HOME 变量反映了瘦客户端的新安装 root。(脚本中的所有其他文件路径都基于 WAS_HOME,所以这是惟一需要更改的变量。)
  4. 在 <THIN_CLIENT_HOME>/properties 中的 wsadmin.properties 文件中,修改 traceFile 和 validationOutput 属性,以确保它们对新的瘦客户端首页是正确的。
  5. 在 <THIN_CLIENT_HOME>/etc 目录中,删除 key.p12 和 trust.p12 存储文件。这些将在新主机中重新创建。
  6. 编辑 <THIN_CLIENT_HOME>/properties 中的 ssl.client.props 以修改 user.root 属性,反映瘦客户端的新首页。这对在调用瘦客户端时正确地重新生成密钥和信任存储并进行正确使用至关重要。
  7. 如果使用 soap.client.props 提供用户和密码,那么您可能需要修改该用户和密码,以使用将应用这个 wsadmin 瘦客户端实例的管理员的身份。

进行这些更改后,新 wsadmin 瘦客户端应已准备好运行。您可通过运行 shell 中的 thinClient.bat 或 thinClient.sh 来对其进行测试。

推进 Jython

在继续使用更新的 Jython 版本时,您可能希望记住一些事情,以确保您的过渡和将来的处理能够顺利完成:

  • 更新的 Jython 使用 Unicode 字符串。如果您在 wsadmin 脚本中对使用类型 (“”) 的字符串类型进行了测试,这可能会引起一个问题。您将需要添加一个使用类型 (u””) 的附加测试。
  • 更新的 Jython 支持不与 Jython 向后兼容的更新语言功能 (Jython 现在内置于 WebSphere Application Server 中)。在 wsadmin 脚本中开始使用这些更新的语言功能后,请记住您将无法在标准的 WebSphere Application Server wsadmin 环境中运行同样的脚本。

结束语

本文为您提供了一种方式来使用最新的 Jython 版本,而不会影响现有的 WebSphere Application Server 安装。通过使用最新的 Jython 设置 wsadmin 瘦客户端,您可开发并运行充分利用了最新的 Jython 语言功能和改进的 wsadmin 脚本。


TAG: