IBM®
跳转到主要内容
    中国 [选择]    使用条款
 
 
Select a scope: Search for:    
    首页    产品    服务与解决方案     支持与下载    个性化服务    
跳转到主要内容

developerWorks 中国  >  WebSphere  >

配置 WebSphere Business Events 集群

以自动化方式使用 Jython 脚本

developerWorks
文档选项

未显示需要 JavaScript 的文档选项

样例代码

英文原文

英文原文


级别: 中级

Gale A. Botwick, 经过认证的顾问 IT 专家, IBM

2009 年 9 月 27 日

本文使用了一个完整的预构建框架,向您展示了如何使用 Jython 脚本自动化地为 WebSphere® Business Events 创建集群的步骤,该框架包含了所有必需的代码,只需要进行少量简单的修改。

概述

客户需要能够自动完成 WebSphere 配置。实现此目的的一项最佳实践就是使用脚本。优先选择脚本的原因有以下几个:

  • 使用 WebSphere Application Server (Application Server) 管理控制台在一定程度上简化了配置过程。
  • 可以重复使用。
  • 消除了大部分用户错误。
  • 提供了更快的管理能力。
  • 提供了审计跟踪。

WebSphere Business Events V6.2(此后称为 Business Events)引入了集群支持。在本文中,我们将描述如何使用 Jython 脚本自动化创建集群的步骤。使用的代码包含在 下载 小节中。

Business Events Information Center 描述了在完成典型的 Business Events V6.2 安装后手动执行集群的步骤,包括删除与独立服务器有关的 WebSphere Application Server 配置。下载 部分提供的附带脚本库包含删除 Application Server 独立服务器配置所需的代码。在这个例子中,我们将在两台机器 wstiblade5 和 wstiblade4 之间建立一个 Business Events 集群,如图 1 所示。在此之前,您应当确保已经完成了以下步骤:

  1. WebSphere Application Server Network Deployment(包含一个 Deployment Manager 概要文件)已经被安装到 wstiblade5 中。
  2. 使用节点代理在 wstiblade5 和 wstiblade4 上都创建了节点。
  3. 每个节点都安装了 Business Events 和 Application Server。
  4. 两个节点都被联合到 cell 中。

本文描述的系统使用 Red Hat® Enterprise Linux® ES 4 构建,但是下载中提供的工件也可以用于 Windows® 或 Linux。需要用到以下软件:

  • WebSphere Business Events V6.2 for Linux
  • DB2® V9.5 Fix Pack 1 for Linux

图 1. Cell 拓扑结构
Cell 拓扑结构




回页首


关于脚本

可下载的脚本库 中为脚本环境提供了两个目录:

  1. py:该目录包含 Jython 脚本:
    • main.sh
    • main.bat
    • main.py
    • common.py
    • clusterSetup.py
    • utils61.py
  2. props:某些脚本需要属性文件,而这些文件就位于此目录中。在需要时,我将提供一些属性文件,可以根据您的环境和需求修改它们。这个目录包含以下属性文件:
    • Application.props
    • BusMember.props
    • dataSourceDB2.props
    • JDBCDB2Provider.props
    • JDBCOracleProvider.props
    • QCF.props
    • TCF.props
    • wbe_events_ActSpec.props
    • wbe_events_durable_ActSpec.props
    • wbe_history_ActSpec.props
    • WbeProps.props

如图 2 所示,处理流程包含一个 shell 脚本(main.sh)或批处理文件(main.bat),其中包含一个概要文件 common.py,用于设置环境变量。批处理文件名为 main.py,它将发起所有必须的功能。


图 2. 处理流程
处理流程




回页首


定制脚本

清单 1 展示了脚本库中附带的 main.sh 文件,它将用于 UNIX 环境中。修改 wsadmin.sh 的路径以指向 Application Server Network Deployment Manager 安装的位置:


清单 1. main.sh
				
/opt/IBM/WBE62/WAS/profiles/Dmgr01/bin/wsadmin.sh -lang jython -profile 
common.py -f main.py

清单 2 展示了脚本库中附带的 main.bat 文件,它将用于 Windows 环境。修改 wsadmin.bat 的路径以指向 Application Server Network Deployment Manager 安装的位置:


清单 2. main.bat
				
c:\Program Files\IBM\WBE62\WAS\profiles\Dmgr\bin\wsadmin.bat 
-lang jython -profile common.py -f main.py
                        

清单 3 展示了脚本库中附带的 common.py 文件。该文件配置脚本中使用的环境变量。按如下所示修改 common.py 文件:

  • 修改 SCRIPTS_HOME 以指向解压缩脚本库的位置。
  • ND_NAME 修改为 Deployment Manager 的概要文件名。
  • 修改 WBEHOME 以指向安装 Business Events V6.2 的位置。
  • cellName 修改为 Application Server cell 的名称。
  • nodeList 修改为包含构成集群的节点的名称。

清单 3. common.py
				
# File Name:   	common.py
# Description: 	Used to setup variables used throughout other scripts.
# Author:      	Gale Botwick - gbotwick@us.ibm.com
#
#*************************************************************************

#--------------------------------------------------------------------
# Turn Debug ON/OFF
#--------------------------------------------------------------------
_DEBUG = 0  # False
#_DEBUG = 1  # True

#--------------------------------------------------------------------
# Setup Script Specific Paths
#--------------------------------------------------------------------
SCRIPTS_HOME="/opt/IBM/WBE62/config/was"
WSADMIN_SCRIPTS_HOME=SCRIPTS_HOME+"/py"
PROPS_HOME=SCRIPTS_HOME+"/props/"

#--------------------------------------------------------------------
# Setup WebSphere Network Deployment 6.1.x Paths
#--------------------------------------------------------------------
ND_NAME="Dmgr01"
WBEHOME="/opt/IBM/WBE62"
WAS_ND_HOME=WBEHOME+"/WAS/profiles" + ND_NAME
WAS_ND_BIN=WAS_ND_HOME+"/bin"

#--------------------------------------------------------------------
# Setup WebSphere Cell Configuration
#--------------------------------------------------------------------
cellName="WBECell01"
# NOTE: There is no space after the comma in nodeList(below)
nodeList="wstiblade5Node01,wstiblade4Node01"
virtualHost="default_host"

清单 4 展示了脚本库文件中包含的 main.py 文件。程序的第一部分删除了在创建新配置之前使用标准(典型)安装设置的配置。对此文件作出以下修改:

  • 使用您的节点名替换 wstiblade5Node01wstiblade4Node01 的所有实例
  • 对于 createWebSphereVariable,修改 DB2 JDBC Driver Path,使其指向机器上的适当位置。

完成该脚本后,将需要重启 Deployment Manager 以使安全更改生效。否则,您将无法成功地连接到数据源。


清单 4. main.py
				
#******************************************************************************
# File Name:   	main.py
# Description: 	Used for flow of scripts
# Author:      	Gale Botwick - gbotwick@us.ibm.com
# History:     
#******************************************************************************

import sys
import java

execfile( WSADMIN_SCRIPTS_HOME+"/clusterSetup.py" )
execfile( WSADMIN_SCRIPTS_HOME+"/utils61.py" )


#==================================================================================
#  Delete Server
#==================================================================================
print "\n** Delete Server **"
# USAGE:   deleteServer ( <"server name">, <"node name"> )
deleteServer ( "server1", "wstiblade5Node01" )
deleteServer ( "server1", "wstiblade4Node01" )

#==================================================================================
#  Remove SI Bus
#==================================================================================
print "\n** Remove Service Integration Bus **"
# USAGE:  removeBus ( <"bus name">)
removeBus ( "WbeBus" )

#==================================================================================
#  Remove JMS Connection Factories
#==================================================================================
print "\n** Remove JMS Connection Factories **"
# USAGE:  removeJMSCFs ( <"CF name"> )
removeJMSCFs ( "WbeQueueConnectionFactory" )
removeJMSCFs ( "WbeTopicConnectionFactory" )

#==================================================================================
#  Remove JMS Topics
#==================================================================================
print "\n** Remove JMS Topics **"
# USAGE:  removeJMSTopics ( <"topic name"> )
removeJMSTopics ( "actionTopic" )
removeJMSTopics ( "commandTopic" )
removeJMSTopics ( "durableActionTopic" )
removeJMSTopics ( "durableEventTopic" )
removeJMSTopics ( "eventLogTopic" )
removeJMSTopics ( "eventTopic" )
removeJMSTopics ( "historyModuleTopic" )
removeJMSTopics ( "logTopic" )
removeJMSTopics ( "replyTopic" )
removeJMSTopics ( "statusTopic" )


#==================================================================================
#  Remove JMS Activation Specs
#==================================================================================
print "\n** Remove JMS Activation Specs **"
# USAGE:  removeJMSActSpecs ( <"spec name"> )
removeJMSActSpecs ( "wbe_events" )
removeJMSActSpecs ( "wbe_events_durable" )
removeJMSActSpecs ( "wbe_history" )


#==================================================================================
#  Remove Shared Library
#==================================================================================
print "\n** Remove Shared Library **"
# USAGE:  removeSharedLib ( <"library name"> )
removeSharedLib ( "WbeJdbcDriver" )

#==================================================================================
#  Remove WebSphere Environment Variable
#==================================================================================
print "\n** Remove WebSphere Environment Variable **"
# USAGE:  removeWebSphereVariable ( <"scope">, <"scope name">, <"node name">, <"name"> )
removeWebSphereVariable ( "node", "wstiblade5Node01", "", 
"DB2UNIVERSAL_JDBC_DRIVER_PATH" )
removeWebSphereVariable ( "node", "wstiblade4Node01", "", 
"DB2UNIVERSAL_JDBC_DRIVER_PATH" )
removeWebSphereVariable ( "node", "wstiblade5Node01", "", 
"DB2UNIVERSAL_JDBC_DRIVER_NATIVEPATH" )
removeWebSphereVariable ( "node", "wstiblade4Node01", "", 
"DB2UNIVERSAL_JDBC_DRIVER_NATIVEPATH" )

#==================================================================================
#  Create WebSphere Environment Variable
#==================================================================================
print "\n** Create WebSphere Environment Variable **"
# USAGE:  createWebSphereVariable ( <"scope">, <"scope name">, 
<"node name">, <"name">, <"value"> )
createWebSphereVariable ( "cell", cellName, "", 
"DB2UNIVERSAL_JDBC_DRIVER_PATH", "/opt/ibm/db2/V9.5/java" )
createWebSphereVariable ( "cell", cellName, "", "DB2UNIVERSAL_JDBC_DRIVER_NATIVEPATH", 
"/opt/ibm/db2/V9.5/java")

#==================================================================================
#  Create Cluster
#==================================================================================
print "\n** Create Cluster **"
# USAGE:  createCluster ( <"cluster name">, <"pref local">, <"rep domain"> 
<"enable failover"> )
createCluster ( "WBERuntime", "true", "false", "false" )

#==================================================================================
#  Create Cluster Member
#==================================================================================
print "\n** Create Cluster Member **"
# USAGE:  createClusterMember ( <"cluster member name">, <"cluster name">, 
<"node name">, <"weight"> )
createClusterMember ( "wbeserver1", "WBERuntime", "wstiblade5Node01", "2" )
createClusterMember ( "wbeserver2", "WBERuntime", "wstiblade4Node01", "2" )


#==================================================================================
#  Set JVM Heap Sizes
#==================================================================================
print "\n** Set JVM Heap Sizes **"
# USAGE:   setJVMHeapSizes ( <"server list">, <"min heap size">, 
<"max heap size"> )
# EXAMPLE: setJVMHeapSizes ( "server1 server2", "256", "1024" )
setJVMHeapSizes ( "wbeserver1 wbeserver2", "512", "1024" )


#==================================================================================
#  Create JVM Custom Property
#==================================================================================
print "\n** Create JVM Custom Property **"
# USAGE:  createJVMProperty ( <"node name">, <"server name">, 
<"name">, <"value">, <"description"> )
createJVMProperty ( "wstiblade5Node01", "wbeserver1", "wbe.home", 
"/opt/IBM/WBE62/director", "" )
createJVMProperty ( "wstiblade4Node01", "wbeserver2", "wbe.home",
"/opt/IBM/WBE62/director", "" )

#==================================================================================
#  Enable Startup Beans Service
#==================================================================================
print "\n**  Set Startup Beans Service **"
# USAGE:  setStartupBeansService ( <"node name">, <"server name" )
setStartupBeansService ( "wstiblade5Node01", "wbeserver1" )
setStartupBeansService ( "wstiblade4Node01", "wbeserver2" )


#==================================================================================
#  Create Default WBE properties
#==================================================================================
print "\n** Create Default WBE properties **"
# USAGE:  createWbeProperties ( <"jndi name">, <"instance name"> )
createWbeProperties ( "com/ibm/wbe/wbeProperties01", "WbeSrv01" )


#==================================================================================
#  Update WBE properties
#==================================================================================
print "\n** Update WBE properties **"
# USAGE:  updateWbeProperties ( <"properties file name"> )
updateWbeProperties ( PROPS_HOME+"WbeProps.props" )


#==================================================================================
#  Create Bus
#==================================================================================
print "\n** Create SI Bus **"
# USAGE:  createBus ( <"bus name">, <"description"> )
createBus ( "WbeBus", "Service Integration Bus for IBM 
WebSphere Business Events" )

#==================================================================================
#  Add Member to Bus
#==================================================================================
print "\n** Add member to SI Bus **"
# USAGE:  addBusMember ( <"properties file name"> )
#				   
addBusMember ( PROPS_HOME+"BusMember.props" )

#==================================================================================
#  Create Bus Destination
#==================================================================================
print "\n** Create SIB Destination **"
# USAGE:  createBusDestination ( <"bus name">, 
<"destination name">, <"type"> )
createBusDestination ( "WbeBus", "WbeTopicSpace", "TopicSpace" )

#==================================================================================
#  Create JMS Queue Connection Factory
#==================================================================================
print "\n** Create JMS Queue Connection Factory **"
# USAGE:  createCF ( <"properties file name"> )
createCF ( PROPS_HOME+"QCF.props" )

#==================================================================================
#  Create JMS Topic Connection Factory
#==================================================================================
print "\n** Create JMS Topic Connection Factory **"
# USAGE:  createCF ( <"properties file name"> )
createCF ( PROPS_HOME+"TCF.props" )

#==================================================================================
#  Create JMS Topics
#==================================================================================
print "\n** Create JMS Topics **"
# USAGE:  createTopic ( <"scope">, <"scope name">, <"name">, 
<"jndi name">, <"topic name">, <"bus name">, <"topic space"> )
createTopic ( "cell", cellName, "actionTopic", "jms/actionTopic", 
"actionTopic", "WbeBus", "WbeTopicSpace" )
createTopic ( "cell", cellName, "commandTopic", "jms/commandTopic", 
"commandTopic", "WbeBus", "WbeTopicSpace" )
createTopic ( "cell", cellName, "durableActionTopic", 
"jms/durableActionTopic", "durableActionTopic", "WbeBus", 
"WbeTopicSpace" )
createTopic ( "cell", cellName, "durableEventTopic", 
"jms/durableEventTopic", "durableEventTopic", "WbeBus", 
"WbeTopicSpace" )
createTopic ( "cell", cellName, "eventLogTopic", 
"jms/eventLogTopic", "eventLogTopic", "WbeBus", "WbeTopicSpace" )
createTopic ( "cell", cellName, "eventTopic", "jms/eventTopic", 
"eventTopic", "WbeBus", "WbeTopicSpace" )
createTopic ( "cell", cellName, "historyModuleTopic", 
"jms/historyModuleTopic", "historyModuleTopic", "WbeBus", 
"WbeTopicSpace" )
createTopic ( "cell", cellName, "logTopic", "jms/logTopic", 
"logTopic", "WbeBus", "WbeTopicSpace" )
createTopic ( "cell", cellName, "replyTopic", "jms/replyTopic", 
"replyTopic", "WbeBus", "WbeTopicSpace" )
createTopic ( "cell", cellName, "statusTopic", "jms/statusTopic", 
"statusTopic", "WbeBus", "WbeTopicSpace" )

#==================================================================================
#  Create JMS Activation Spec
#==================================================================================
print "\n** Create JMS Activation Spec **"
# USAGE:  createActivationSpec ( <properties file name> )
createActivationSpec ( PROPS_HOME+"wbe_events_ActSpec.props" )
createActivationSpec ( PROPS_HOME+"wbe_events_durable_ActSpec.props" )
createActivationSpec ( PROPS_HOME+"wbe_history_ActSpec.props" )

#==================================================================================
#  Create JDBC Provider
#==================================================================================
print "\n** Create JDBC Provider **"
# USAGE:  createJDBCProvider ( <properties file name > )
createJDBCProvider ( PROPS_HOME+"JDBCDB2Provider.props" )

#==================================================================================
#  Create Data Source
#==================================================================================
print "\n** Create Data Source **"
# USAGE:  createDataSource ( <properties file name> )
createDataSource ( PROPS_HOME+"dataSourceDB2.props" )

#==================================================================================
#  Create Shared Library
#==================================================================================
print "\n** Create Shared Library **"
# USAGE:  createSharedLib ( <"scope">, <"scope name">, 
<"node name">, <"library name">, <"classpath"> )
createSharedLib ( "cluster", "WBERuntime", "", "WbeJdbcDriver", 
"/opt/ibm/db2/V9.5/java/db2jcc.jar" )
createSharedLib ( "cluster", "WBERuntime", "", "JWLLib", 
"${WAS_INSTALL_ROOT}/optionalLibraries/IBM/JWL/2.0/odc-jsf.jar ${WAS_INSTALL_ROOT}
/optionalLibraries/IBM/JWL/2.0/jsf-ibm.jar" )

#==================================================================================
#  Install an Application
#==================================================================================
print "\n** Install an Enterprise Application **"
# USAGE:  installApp ( <"property file name"> )
installApp ( PROPS_HOME+"Application.props" )

#==================================================================================
#  Save Configuration
#==================================================================================
print "\n====== Saving configuration  ======"
AdminConfig.save()
syncNodesToMaster( nodeList )

print 'Done ...'


清单 5 展示了完整的 TCF.props 文件。注意,我们对提供者(provider)端点(CF_PROVIDER_ENDPTS)使用了默认的端口号,该端点将映射到例子中的 Business Events 运行时服务器(wbeserver1 和 wbeserver2)的 SIB_ENDPOINT_ADDRESS。根据您的具体配置,您可能需要在管理控制台中调整这些端口号。对于 QCF.props 文件也是一样的。在预先判断端点时存在几个变化因素,因此很难通过编程方法填充它们。

此外,和所有其他属性文件一样,您需要修改 SCOPE_NAME 以匹配您的 cell 名,并使出现的任何 wstiblade5wstiblade4 匹配节点名。


清单 5. TCF.props
				
    
###############################################################################
####    JMS Topic Connection Factory Properties
###############################################################################
# Required Parameters
# Scope = cell | node | server | cluster
SCOPE=cell
SCOPE_NAME=WBECell01
CF_NAME=WbeTopicConnectionFactory
CF_JNDI_NAME=jms/WbeTopicConnectionFactory
SI_BUSNAME=WbeBus
#
# Optional Parameters
CF_TYPE=topic
CF_PROVIDER_ENDPTS=wstiblade4.rtp.raleigh.ibm.com:7276,
wstiblade5.rtp.raleigh.ibm.com:7276
CF_CLIENT_ID=WBE
CF_DESCRIPTION=Topic Connection Factory for IBM WebSphere Business Events
#
# Connection Pool Properties
CP_CONN_TIMEOUT=180
CP_MAX_CONN=30
CP_MIN_CONN=1
CP_REAP_TIME=180
CP_UNUSED_TIMEOUT=1800
CP_AGED_TIMEOUT=600
CP_PURGE_POLICY=EntirePool





回页首


结束语

在本文中,我们介绍了如何使用下载中提供的 Jython 脚本框架自动化创建 Business Events V6.2 集群。





回页首


致谢

本文作者衷心感谢 Tim Galvin,他对本文进行了认真的审校、评论和反馈。






回页首


下载

描述名字大小下载方法
源代码WBEScripts_V6.2.zip32KBHTTP
关于下载方法的信息


参考资料

学习

讨论


关于作者

Gale Botwick 的照片

Gale Botwick 具有超过 25 年的软件开发经验,其中包含 9 年以上的 WebSphere Application Server 经验。她的专业领域包括管理、基础设施、自动化配置和部署,以及解决操作和性能问题。她以广泛的面向 WebSphere Application Server 的 Jython 脚本库著称,这些脚本库已经连续三年成为 AIM IC Repository 中重用度最高的资产。




对本文的评价








IBM 公司保留在 developerWorks 网站上发表的内容的著作权。未经IBM公司或原始作者的书面明确许可,请勿转载。如果您希望转载,请通过 提交转载请求表单 联系我们的编辑团队。
    关于 IBM 隐私条约 联系 IBM 使用条款