内容


在 WebSphere Application Server 中使用命令帮助简化管理脚本

Comments

引言

在 IBM WebSphere Application Server V7 的开发过程中,可用性研究表明,命令帮助场景对用户至关重要,强调了对脚本的大量使用,并需要继续提供高质量的脚本工具和帮助。命令帮助是一种在 Jython 脚本语言中提供 wsadmin 命令的功能,用于在 WebSphere Application Server 管理控制台中执行各种操作。

命令帮助首先在 WebSphere Application Server V6.1 中使用,并对其提供了有限的支持,可以为大约 185 个任务提供命令。由于客户请求和对该功能的大量积极好评,在 V7 中增加了支持的范围和命令数量,支持数量提高到原来的四倍以上,可以支持 750 多个任务。

为用户提供了四个用于管理 WebSphere Application Server 环境的 wsadmin 对象:AdminConfig、AdminTask、AdminApp 和 AdminControl。在使用命令帮助之前,负责编写脚本的管理员常常需要参考各种资源来准确地确定他们需要操作的项目的脚本组件,其中包括适当的命令对象、语法和参数。在管理控制台中实施命令帮助之后,您(作为管理员)只需通过用户界面一次性完成任务,然后检索并保存生成的命令集。

为帮助您充分利用这些功能并从命令帮助中获得最大的价值,本文将通过一些使用场景介绍命令帮助的一些基础知识,还将介绍一些方便您开展工作的具体功能。

使用命令帮助

命令帮助提供三种搜索命令的方法:

使用控制台生成命令

第一种方法是命令帮助的最基本用法。您启动管理控制台,执行某项操作,并访问命令帮助面板,其中显示该操作的 wsadmin 命令。

例如,假设您希望创建一个新的业务级应用程序。作为该应用程序的一部分,首先需要将应用程序文件导入资产存储库。可以将资产视为构成业务级应用程序的构造块;它表示物理二进制文件,并且是业务级应用程序体系结构中应用程序内容的最小管理单元。

要使用管理控制台导入资产,请按照下列步骤操作:

  1. 在左侧的导航菜单中展开 Applications 部分。
  2. 选择 New Application,然后选择 New Asset
  3. 指定文件,完成所需的字段,然后单击 Next。图 1 显示了摘要面板。注意,命令帮助区域用红色圆圈标明。
    图 1. 管理控制台中的命令帮助
    图 1. 管理控制台中的命令帮助
    图 1. 管理控制台中的命令帮助
  4. 单击 View administrative scripting command for last action 启动命令帮助面板(图 2)。此面板显示了在 Jython 脚本语言中提供的用于导入资产的 wsadmin 脚本命令。现在您可以直接复制命令并将其粘贴到活动的 wsadmin 会话,或者粘贴到一个文件中以便以后修改和使用。当在 wsadmin 中运行这些命令时,请确保使用 Jython 从运行管理控制台的概要的 /bin 目录中启动了 wsadmin,如:

    C:\IBM\WebSphere\AppServerGM\profiles\Dmgr01\bin> wsadmin -lang jython.

    图 2. 命令帮助
    图 2. 命令帮助
    图 2. 命令帮助

    图 2 还显示了命令帮助首选项:Enable command assistance notifications 和 Log command assistance commands。可以使用这些选项记录命令的历史记录,这将在下几节中详细介绍。

使用日志维护历史记录

命令帮助面板仅显示在控制台中执行的最后操作的命令。不过,您可以启用日志记录选项,将生成的所有命令记录在一个日志文件中。该文件的名称是 commandAssistanceJythonCommands_<user name>.log,并存储在运行管理控制台的概要的日志目录中,例如:

C:\IBM\WebSphere\AppServerGM\profiles\Dmgr01\logs\dmgr
\commandAssistanceJythonCommands_phil.log.

命令帮助的日志记录可以在命令帮助面板(图 2)中启用,也可以在控制台首选项(图 3)中启用。

图 3. 控制台首选项
图 3. 控制台首选项
图 3. 控制台首选项

我们还接着介绍业务级应用程序示例,假设您导入一个或多个资产,新建一个空的业务级应用程序,然后向其添加资产或其他嵌入式业务级应用程序。清单 1 显示了在日志文件中捕获的、完成此任务所需的一些命令的示例。

清单 1. 命令帮助日志文件的示例内容
# [10/31/08 0:03:11:396 EST] Assets > Assets
AdminTask.importAsset('[-storageType FULL -source C:/IBM/WebSphere/AppServerGM/profiles/
Dmgr01/wstemp/null/upload/login.ear -AssetOptions [[login.ear login.ear defaultbinding.
virtual.host#defaultbinding.force "" "" "WebSphere:spec=Java EE ear" "" .*\.dll=755#.*\
.so=755#.*\.a=755#.*\.sl=755 false]]]')

# [10/31/08 0:04:01:489 EST] BLAManagement
AdminTask.listBLAs('[-includeDescription true ]')

# [10/31/08 0:04:45:146 EST] Business-level applications > New
AdminTask.createEmptyBLA('[-name DefaultApp_BLA -description "Sample BLA adding log-in 
capability to DefaultApplication." ]')

# [10/31/08 0:05:37:552 EST] Business-level applications > DefaultApp_BLA > Add
AdminTask.listAssets('[-includeDescription true -includeDeplUnit true -assetID login.
ear ]')

# [10/31/08 0:05:57:114 EST] Business-level applications > DefaultApp_BLA > Add
AdminApp.install('C:/IBM/WebSphere/AppServerGM/profiles/Dmgr01/logs/app2467.ear', '[  
-nopreCompileJSPs -distributeApp -nouseMetaDataFromBinary -nodeployejb -appname 
LoginApplication -createMBeansForResources -noreloadEnabled -nodeployws -validateinstall 
warn -noprocessEmbeddedConfig -filepermission .*\.dll=755#.*\.so=755#.*\.a=755#.*\.
sl=755 -noallowDispatchRemoteInclude -noallowServiceRemoteInclude -blaname WebSphere:
blaname=DefaultApp_BLA -asyncRequestDispatchType DISABLED -nouseAutoLink -MapWebModToVH 
[[ LoginWebApp login.war,WEB-INF/web.xml default_host ]]]' )

# [10/31/08 0:06:59:208 EST] Business-level applications > DefaultApp_BLA > Add
AdminTask.addCompUnit('[-blaID WebSphere:blaname=DefaultApp_BLA -cuSourceID WebSphere:
blaname=DefaultApplication -CUOptions [[WebSphere:blaname=DefaultApp_BLA WebSphere:
blaname=DefaultApplication DefaultApplication_0001 "" 1]]]')

# [10/31/08 0:08:26:442 EST] Adding asset to repository
AdminConfig.save()

# [10/31/08 0:09:41:708 EST] Business-level applications
AdminTask.startBLA('[-blaID WebSphere:blaname=DefaultApp_BLA ]')

应用程序部署是 WebSphere Application Server 用户极为常见的任务,但是,由于业务级应用程序的概念(及其关联的命令)在 V7 中是新增内容,因此能够在数分钟内生成此命令集足以证明命令帮助功能的价值和高效性。清单 1 中的命令帮助日志文件显示了创建、保存和启动新的业务级应用程序所需的操作集。每个日志条目的第一行都包含一个时间戳和在控制台中生成命令的位置。此日志文件显示:

  • 如何使用 AdminTask.importAsset 命令导入资产。
  • 如何使用 AdminTask.createEmptyBLA 命令创建新应用程序。
  • 后续操作 AdminApp.install(添加 login.ear 资产)和 AdminTask.addCompUnit 用于构建业务级应用程序。
  • 其余的两个命令仅显示如何保护和启动新应用程序。

将命令发送到脚本工具

您还可以使用命令帮助通知自动保存命令输出。WebSphere Application Server 使用 Java Management Extensions (JMX) 通知将命令发送到兼容的 Jython 编辑器。

配置命令帮助通知

考虑到本文的目的,IBM Rational Application Developer for WebSphere Software 7.5 是本例中使用的 IDE。要将 Rational Application Developer 与管理控制台一起使用,请执行以下操作:

  1. 您必须通过创建一个从工具的工作台到服务器的指针将应用服务器与 IDE 工具关联起来。如果对 WebSphere Application Server 概要启用了管理安全性,则需要从 Rational Application Developer 向服务器进行身份验证。您必须对服务器和工具提供相同的用户名和密码,因为此工具将仅从该经过身份验证的控制台用户接收命令。
  2. 在 WebSphere Application Server 管理控制台中,确保在命令帮助面板(图 2)或控制台首选项(图 3)中选中了 Enable command assistance notifications 并应用了更改。
  3. 从 Rational Application Developer 的服务器视图中,启动关联服务器的 WebSphere Administration Command Assist 窗口。
  4. 返回到 WebSphere Application Server 管理控制台并执行相应任务。

在控制台生成命令之后,它们将显示在 Rational Application Developer 的 WebSphere Administration Command Assist 视图中(图 4)。在此视图中显示的命令可以插入任何 Jython 文件的任何部分,只需将光标置于文件中所需的位置,右键单击该命令,并选择 Insert 即可(图 4)。

图 4. Rational Application Developer 中的命令帮助窗口
图 4. Rational Application Developer 中的命令帮助窗口
图 4. Rational Application Developer 中的命令帮助窗口

使用带变量的命令帮助

在整个管理控制台中生成的命令可提供在环境中创建和操作项目的正确 wsadmin 对象类型、函数、语法、属性和示例值。如果您是编写 wsadmin 脚本的新手,或者需要为新功能编写脚本,则上述功能对您开始工作提供有力帮助。

图 4 中用于列出和修改端口的示例命令源自需要与每台服务器关联的项目集清单(例如端口、应用程序、资源等等)的客户。包含 70 多台服务器的环境绝对需要脚本。为了向您介绍如何创建列出每台服务器的所有资源(如 JDBC 驱动程序)的脚本,下面的步骤描述了为脚本文件生成命令的过程。尽管这是一个十分简单的练习,但通过该练习可以了解如何将命令帮助创建的命令与 Jython 的基本功能合并在一起,以创建满足特定需要的解决方案。

对于本例而言,您的需求是获得列出所有 WebSphere Application Server 以及每台服务器的所有 JDBC 驱动程序的命令。本例的计算单元由一台部署管理器和三台服务器构成。

在部署管理器的管理控制台中:

  1. 导航到 Servers => Server Types => WebSphere application servers。面板的中央部分显示了计算单元中此类服务器的列表。
  2. 如果既未启用命令帮助日志记录又未启用通知,则请单击 View administrative scripting command for last action 链接检索、复制和保存该命令。
  3. 将显示以下命令:

    AdminTask.listServers('[-serverType APPLICATION_SERVER ]')

  4. 导航到 Resources => JDBC => JDBC providers。面板的中央部分显示了计算单元中此类提供程序的列表。
  5. 将范围更改为其中的一台服务器:

    Node=T60P-2007-CQ8Node03, Server=server1

  6. 如果既未记录命令帮助又未启用通知,则请单击 View administrative scripting command for last action 链接检索、复制和保存该命令。
  7. 这时将显示与以下内容类似的命令:

    AdminConfig.list('JDBCProvider', AdminConfig.getid( '/Cell:T60P- 2007-CQ8Cell01/Node:T60P-2007-CQ8Node03/Server:server1/'))

现在可以将这两个命令与其他 Jython 代码合并在一起,以便为每台服务器生成所需 JDBC 提供程序的列表。要运行该脚本,请使用以下指定的文件选项和文件名启动 wsadmin:

wsadmin -f c:\IBM\AppServer_list_jdbc.py.

清单 2 中显示了示例脚本。(注意:Jython 不使用行号,但本例中严格显示行号是为了便于说明。)

清单 2. 合并命令和 Jython 脚本语言的脚本文件内容
1  appServers = AdminTask.listServers('[-serverType APPLICATION_SERVER ]').splitlines()
2 
3  for appServ in appServers:   
4    print appServ
5    jdbc = AdminConfig.list('JDBCProvider', appServ) 
6    print jdbc

第 1 行使用一个字符串函数 splitlines() 分隔服务器列表,然后将这些值作为一个变量 appServers 进行存储。在此列表中为每台服务器存储的值是唯一标识。第 3-6 行迭代该列表,并输出每台服务器的 ID(第 4 行),检索该服务器范围内所有 JDBC 提供程序的列表(第 5 行),然后输出每个提供程序的属性和值(第 6 行)。请参见清单 3 了解示例输出。注意,在第 5 行中,为了更加通用,对命令帮助生成的命令稍微进行了修改;无需检索特定服务器的 ID,现在可以为其提供 appServ 变量拥有的任何值。

清单 3. 脚本文件的部分输出
server3(cells/T60P-2007-CQ8Cell01/nodes/T60P-2007-CQ8Node03/servers/server3|server.xml)
"Derby JDBC Provider (XA)(cells/T60P-2007-CQ8Cell01/nodes/T60P-2007-CQ8Node03/servers/
	server3|resources.xml#builtin_jdbcprovider)"
[classpath ${DERBY_JDBC_DRIVER_PATH}/derby.jar]
[description "Built-in Derby JDBC Provider (XA)"]
[implementationClassName org.apache.derby.jdbc.EmbeddedXADataSource]
[isolatedClassLoader false]
[name "Derby JDBC Provider (XA)"]
[nativepath []]
[providerType "Derby JDBC Provider (XA)"]
[xa true]
server1(cells/T60P-2007-CQ8Cell01/nodes/T60P-2007-CQ8Node03/servers/server1|server.xml)
		...

可以根据需要使用其他 wsadmin 命令(如 AdminConfig.showall())或 Jython 的其他各种功能和函数(如字符串操作函数)来检索、修改或格式化命令帮助的输出。

总结

本文的目的是为了提高对命令帮助功能的认识,命令帮助是 WebSphere Application Server 中的一种 Jython 脚本帮助工具,本文还提供了一些演示内置和外部解决方案的示例,以帮助您满足管理需要。

管理大型环境和经常执行重复任务的人员会大量使用脚本。四种 wsadmin 命令对象的语法、函数和命名约定之间没有大量的一致性。准确地确定命令来完成所需的操作以及为 wsadmin 构建脚本有时是一种极具挑战性和非常耗时的任务,特别是对进行中级脚本开发的新手而言更是如此。命令帮助显著地简化了此过程同时提高了开发效率。


相关主题


评论

添加或订阅评论,请先登录注册

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=WebSphere
ArticleID=380465
ArticleTitle=在 WebSphere Application Server 中使用命令帮助简化管理脚本
publish-date=04232009