web前端

位置:IT落伍者 >> web前端 >> 浏览文章

自动化WebLogic平台应用程序供应


发布日期:2019年11月13日
 
自动化WebLogic平台应用程序供应

摘要

BEA WebLogic Platform应用程序供应(provisionin)是一个这样的过程准备提供一个有效的WebLogic Platform环境来支持已部署好的应用程序的后续应用在前一篇文章中我们介绍了经过几个阶段将WebLogic Platform 应用程序从开发升级到生产阶段时我们能从中获得什么在本文中研究的重点是使用可用于WebLogic Platform产品的工具来自动化每个阶段的应用程序供应这将允许您自动创建运行WebLogic应用程序所需的环境

简介

BEA WebLogic Platform应用程序供应是一个这样的过程准备提供一个有效的WebLogic Platform环境来支持已部署好的应用程序的后续应用WebLogic Platform环境通常由三种资源组成域级别的资源(如JDBC Connection Pool和DataSources)客户应用程序和生产数据(如安全角色缓存策略门户元数据和贸易合作伙伴管理数据等)在经过几个阶段将WebLogic应用程序从开发阶段升级到生产阶段时需要在每个阶段适当地供应这些资源考虑到配置域级别和应用程序级资源的复杂性应用程序供应不是一个普通的过程它常常需要大量的手工劳动并且很容易出错所以人们非常期待通过自动化供应过程来提高生产效率和可靠性同时降低IT成本

本文首先将讨论自动化应用程序供应过程中面临的挑战然后对可以在WebLogic Platform中使用的供应工具进行概括通过对一些常见场景的案例分析比如从开发阶段升级到生产阶段快速生产复制生产数据配置和差量供应本文将演示如何有效使用这些供应工具来自动化供应过程

本文提供的示例均摘自一些实际的客户供应场景文中引用的WebLogic Scripting Tool(WLST)示例脚本和域模板都已经在WebLogic Platform Service Pack 上开发并通过测试在即将推出的WebLogic Platform版本中还将支持JSR因此目前已经配置好的域级别的一些资源将作为应用程序级资源打包随着应用程序供应的自动化我们的生活会更轻松一些

注意本文并不打算成为一篇关于如何使用供应工具(如Domain Template Builder或DTB)的教程通过参考资料部分中提供的链接您可以找到关于这些工具的更多信息

挑战

要运行WebLogic Platform应用程序就必须创建一个包括适当WebLogic Platform组件和应用程序级资源的域提供了一个升级过程的例子在这个过程中应用程序要经历个阶段开发集成QA/分级测试和生产在生产阶段WebLogic Platform应用程序供应还包括为每个应用程序供应需求设置一个集群子网和代理

从开发阶段升级到生产阶段的应用程序升级过程

在典型的开发阶段几个开发人员将同时为一个项目工作每个开发人员从事不同的模块研究这些开发人员可能拥有作为沙箱的自己的工作域(开发模式带有本地数据库的单服务器)并且可以使用源代码控制工具来促进团队开发在开发模式域中BEA WebLogic Server和BEA WebLogic Workshop将自动供应一些应用程序资源比如 Entity Bean表AsyncDispatcher队列和会话状态表在生产模式域中必须显式供应这些资源QA/分级测试环境通常会模拟真实的生产环境该环境一般由一个或多个集群域以及一些专用的数据库服务器负载平衡器和商业证书组成安全性和高可用性在生产阶段很重要因为它们可能是开发环境中完全缺乏的东西此外如果在生产阶段对托管服务器使用不同的IP地址或端口那么还需要更新应用程序模块为定制部署重新生成EAR文件

当经过几个阶段将WebLogic Platform应用程序从开发阶段升级到生产阶段时自动化这个过程对确保成功实现生产部署很关键配置自动化所面临的一个主要挑战是识别和捕获正确的配置需要支持正确的应用程序部署并将这一点贯彻到每个阶段然后进行目标环境所需的任何配置定制

WebLogic Platform提供了大量系统工具来促进供应自动化这些工具包括Configuration WizardDomain Template Builder和WebLogic Scripting Tool(WLST)等关于这些工具的完整列表请参阅WebLogic Platform Deployment GuideWebLogic Platform还提供了许多帮助客户完成初始的域配置的预定义域模板一组用来添加定义良好的应用程序的模板以及维护现有域的一些服务根据各种供应场景的特点可以将供应方法分成基于模板的方法和基于WLST的方法注意可以有效组合这些方法来应对复杂的供应场景

基于模板的供应

预定义域和扩展模板包含构建或扩展特殊WebLogic域所需的主要属性和文件在向域中添加了新的资源和应用程序之后就可以使用Domain Template Builder来创建定制域模板稍后可以使用该模板通过Configuration Wizard创建一个目标域

基于模板的方法利用Domain Template Builder功能来捕获当前域的各种配置细节和工件为了使用基于模板的方法将从一个运行中的域开始这个域可以是一个服务器开发域也可以是一个集群的生产域此外应该完全了解现有域这样才不会在创建模板时错过关键配置信息在创建模板时有一个定制域资源设置的机会但也可以在以后某个阶段实现定制即在使用已创建的模板实际配置该域的时候

基于WLST的供应

WebLogic Server Scripting Tool(WLST)是一个命令行脚本接口(使用Jython构建)您可以使用该接口与WebLogic Server交互以及配置WebLogic ServerWLST既支持联机操作模式也支持脱机操作模式WLST Online在连接到某台运行中的服务器时才开始运作而WLST Offline通过添加命令来支持Configuration Wizard功能它允许在不连接到运行中的服务器的情况下创建和扩展WebLogic域WLST Offline支持WebLogic Platform中提供的预定义域模板以及使用Template Builder工具创建的定制域模板

基于WLST的配置方法利用WLST Offline和WLST Online功能来记录一组域脚本中的各种域配置细节并将这些脚本与一些预定义或定制的域模板一起使用以创建目标域使用基于WLST的方法可以很容易地通过脚本更改域配置还可以通过源代码控制有效追蹤配置变化关于使用WLST的更多信息请参阅CodeShare项目wlst可以从中获得一些示例脚本和最佳实践

在以下几个小节中将深入研究一些常见的供应用例演示并比较基于模板的方法与基于WLST的方法的运用

用例从开发阶段转移到分级测试/生产阶段

该用例展示了一个在自动供应方面有较高要求的常见配置场景通常开发环境与生产环境存在极大差异这使得基于WLST的方法比基于模板的方法更加适用通过一个假设的场景我们将阐述如何组合使用WLST Offline和WLST Online脚本来配置所需的生产域

该例中开发团队已经实现了两个应用程序BEA WebLogic Integration应用程序和BEA WebLogic Portal应用程序这两个应用程序都是使用单独的服务器实例在单独的平台域中部署的在从分级测试阶段移动到生产阶段时该团队想在一个平台域中配置两个单独的集群(wliCluster和wlpCluster)一个用于部署WebLogic Integration应用程序另一个用于部署WebLogic Portal应用程序Configuration Wizard和WLST Offline只支持单集群域的自动配置当通过Configuration Wizard在一个平台域中配置多个集群(例如有一个wliCluster和一个wlpCluster)时域级别的资源会自动将目标设定为第一个集群(在这里是wliCluster)所以需要重新指定一些资源(比如与门户相关的应用程序和资源)的目标组合使用WLST Offline和Online脚本可以有效满足配置多集群域的特殊需求

通常可以使用WLST Offline脚本来配置用于任何单集群域的资源例如WLST Offline脚本可以添加用户添加托管的服务器添加额外的JMS队列定制JDBCConnectionPool等等因为WLST Offline是基于Config Wizard框架的所以它支持一些良好的自动配置特性但它在配置多个集群方面存在同样的限制在创建第一个集群(wliCluster)之后需要从wliCluster中取消对门户相关的应用程序和资源的目标设定

cd(/)unassign(Application paymentWSAppTarget wliCluster)unassign(Application taxWSAppTarget wliCluster )unassign(JDBCConnectionPool portalPoolTarget wliCluster )unassign(JDBCDataSourcepn_trackingDataSource Target wliCluster )unassign(JDBCDataSource pnDataSourceTarget wliCluster )unassign(JDBCTxDataSourceportalFrameworkPool Target wliCluster )

以下WLST Online脚本举例说明了第二个集群(wlpCluster)的配置并适当地重新设置与门户相关的那些资源的目标将它们的目标设定为wlpCluster

def create_wlpcluster(cluster_config): clusterName clusterAddrmulticastAddrmulticastPort mss = cluster_config # create the cluster cluster = auto_createCluster(clusterNameclusterAddr

multicastAddr multicastPort) # create the managed servers for msConfig in mss:   managedserver = auto_createManagedServer(msConfigcluster) # add the cluster to the target list of the following resources wlstcd(/) jcf = wlstgetTarget(JMSConnectionFactory/ + cgQueue) if jcf != None:   jcfaddTarget(cluster) poolList=portalPoolcgPoolcgJMSPoolnonXA for poolName in poolList:   pool = wlstgetTarget(JDBCConnectionPool/ + poolName)   if pool != None:     pooladdTarget(cluster)   dsList=pn_trackingDataSourcepnDataSource for dsName in dsList:   ds = wlstgetTarget(JDBCDataSource/ + dsName)   if ds != None:     dsaddTarget(cluster) txdsList=portalFrameworkPoolcgDataSourcecgDataSourcenonXA for txdsName in txdsList:   txds = wlstgetTarget(JDBCTxDataSource/ + txdsName)   if txds != None:    txdsaddTarget(cluster) wlstcd(Application/ + JWSQueueTransport) ejb = wlstgetTarget(EJBComponent/ + QueueTransportEJB) if ejb != None:   ejbaddTarget(cluster) wlstcd(/)

让我们仔细看看该脚本的其中一部分

dsList=pn_trackingDataSourcepnDataSourcefor dsName in dsList:  ds = wlstgetTarget(JDBCDataSource/ + dsName)  if ds != None:  dsaddTarget(cluster)

该脚本要做的就是循环遍历DataSource的名称我们应该将这些DataSource的目标设定为新的wlpCluster对于每个DataSource首先应该调用getTarget()方法来获得DataSource对象然后将wlpCluster添加到其目标列表中

可以从wlst CodeShare项目中下载完整的示例脚本

除了配置域级别的资源还需要支持关键生产数据的自动供应(或在有时被调用时执行的迁移)这类数据包括WebLogic安全区(security realm)WebLogic Portal元数据和WebLogic Integration元数据有关的更多信息请参阅生产数据配置一节

用例快速生产复制

该用例描述了一个特殊的供应场景在该场景中客户已经有了一个在管理服务器上正确配置的正在运行的生产域并且需要将相同的配置复制到WebLogic集群域中的许多托管服务器中在多台远程机器上运行基于GUI的工具非常单调乏味并且很容易出错基于模板的方法似乎非常适合用来自动化这个复制过程我们将举例说明如何使用Domain Template Builder来捕获生产域中的东西

假设这个假定的域是一个WebLogic Integration集群域叫做wlicluster客户最初使用Configuration Wizard在WLI域模板中创建了这个域随后又部署并配置了以下资源来支持应用程序的需要

一个称为tradeHubAppear的应用程序该应用程序使用了消息代理通道和事件生成器并调用了一个第三方适配器

一个称为egDistQueue的分布式队列以及它对应的队列成员

一个称为tradeHubJMSEG的JMS Event Generator它与egDistQueue和一个现有通道文件有关

一个称为kodo的第三方适配器它的目标是集群

现在我们需要创建一个定制域模板来捕获完整的配置默认情况下Template Builder会包括这个域直接引用的文件可以通过Add File窗口(参见图将已部署好的应用程序所需的其他文件(如JMS Event Generator的jar文件和第三方适配器文件)添加到模板中

在创建定制域模板时添加文件

对于前面提到的生产域我们需要添加以下文件

将<wliconfig>文件夹添加到<Domain Root Directory>(注意不必在<wliconfig>文件夹下包含托管服务器的子文件夹)

将<script>文件夹添加到<Domain Root Directory>

将对应于tradeHubJMSEG事件生成器的jar文件(即WLIJmsEG_tradeHubJMSEGjar)添加到<Domain Root Directory>

将DefaultAuthorizerldift文件添加到<Domain Root Directory>因为它定义了默认授权角色以及用来访问消息代理通道的策略

将适配器工具所在的文件夹添加到<Application Root Directory>/wlicluster

上面展示了域和应用程序资源的一个列表该列表已经捕获在域模板中如果还有其他资源(比如安全角色和策略)那么还需要单独使用WebLogic Platform提供的其他工具来捕获这些资源下一个用例举例说明了如何使用这些工具来供应生产数据

用例生产数据供应

通常WebLogic Platform生产环境中的数据由安全角色缓沖策略门户元数据贸易合作伙伴管理(TPM)数据和其他通常存储在各种持久性存储器(如嵌入式LDAP外部数据库和储存库文件)中的数据组成该用例的重点在于自动化生产数据的供应过程

WebLogic域级别的表

每个WebLogic域模板(除了WebLogic Server域模板)都有一组预定义的SQL文件在启动服务器之前需要将这些文件加载到目标数据库中例如WebLogic Portal域模板定义了Content Management Database Object和WSRP Object表在启动WebLogic Portal域之前需要加载这两个表这些域级别的表将被加载到生产数据库中并被域中的所有服务器共享可以通过Configuration Wizard在创建域期间加载这些表或者通过WLST Offline中的loadDB()函数加载这些表以下脚本对此进行了描述

readTemplate(D:\\common\templates\domains\platformjar)existingPoolName = cgJMSPoolnonXAcd (/)cd (JDBCConnectionPool/ + existingPoolName)cmosetDriverName(oraclejdbcdriverOracleDriver)cmosetUserName(EEDCDB)cmosetPassword(EEDCDB)cmosetURL(jdbc:oracle:thin:@:

:)loadDB(iexistingPoolName)closeTemplate()

WebLogic安全区

每个WebLogic Platform域都是在一个默认安全区中配置的通常存储在嵌入式LDAP中每个安全区都由一组已配置的安全提供者用户安全角色和安全策略组成可以定制默认安全区来支持各种安全需要比如说替换一个安全提供者和添加用户为了支持将安全数据从一个安全区迁移到另一个安全区WebLogic Platform通过WebLogic Console和MBean接口提供了一些特殊的导出/导入工具

BEA WebLogic Enterprise Security 策略数据

BEA WebLogic Enterprise Security(WLES)(现称为AuqaLogic Enterprise Security)服务使用一些不同种类的策略来保护应用程序和资源为了使客户轻松地将策略数据转移到生产环境中WLES提供了Policy Export/Import工具策略导出工具允许您将数据从策略数据库输出到叫作策略文件的文本文件中也可以使用Policy Import工具将这些策略文件导回同一策略数据库或另一个策略数据库这些工具有一些命令行接口可以很轻松地集成这些接口来支持自动供应

WebLogic Portal元数据

在配置和定制WebLogic Portal应用程序时有各种门户对象(比如权利和委托管理)这些对象存储在嵌入式LDAP和门户数据库中通过筛选不应传播的元数据和遗弃不应更新的不受影响的目标数据的能力WebLogic Portal Propagation Utility允许门户管理员有选择性地将数据从一个阶段移动到另一个阶段注意该工具目前在devdev上它在WebLogic Platform的下一个版本中也将受到支持

WebLogic Integration TPM 数据

贸易合作伙伴管理(Trading Partner Management TPM)数据包括贸易合作伙伴配置文件来自keystore的证书服务定义和服务配置文件Bulk Loader是一个命令行工具可以用它来导入导出和删除TPM数据Bulk Loader导入的是XML表达形式的TPM数据导出的是XML文件

bulkloader [verbose] [config <blconfigxml>] [wlibc]

import <dataxml>

export <dataxml> [nokeyinfo] [select <selectorxml>]

BEA Liquid Data for WebLogic服务器设置

BEA Liquid Data for WebLogic(现称为AquaLogic Data Service Platform)服务器设置包括Data SourcesCustom Functions和Stored Queries这些设置存储在<ldrepository>文件夹下的储存库文件中以下Ant脚本描述了如何调用Liquid Data工具从Ldconfigxml文件导入服务器设置相同的类也支持服务器设置的导出

<java classname=combealdiutilCfgImpExp fork=true> <classpath>  <pathelement location=<WL_HOME>/server/lib/weblogicjar/>  <pathelement location=<REPOSITORY_DIR>/importexporttools/CfgImpExpjar/>  <pathelement location=<WL_HOME>/liquiddata/server/lib/wlldijar/> <pathelement location=<WL_HOME>/liquiddata/server/lib/castorjar/> <pathelement location=<WL_HOME>/liquiddata/server/lib/xercesImpljar/> <pathelement location=<WL_HOME>/liquiddata/server/lib/APPINF/lib/LDSjar/> </classpath> <arg line=<ADMIN_ADDR> <ADMIN_PORT> <ADMIN_USERNAME> <ADMIN_PASSWORD>  import <DOMAIN_HOME>/ldrepository/import_export/LDconfigxml/></java>

特定于应用程序的表

在生产模式域中WebLogic Server不会在部署应用程序时尝试自动供应所依赖的资源例如如果应用程序包含会话式Web service或Entity Bean那么在部署应用程序之前需要加载会话状态表和Entity Bean表因为知道需要供应的内容所以很容易通过脚本自动供应这些内容关于加载会话状态表和Entity Bean表的更多信息请参阅前一篇文章

自动化生产数据配置的需求已经通过典型平台环境中的各种生产数据得以证实其中一些数据可以通过WLST Online/Offline脚本进行供应而其他一些数据则可以通过WebLogic Platform提供的特殊工具(例如Portal Propagation工具和WLES Import/Export)来导出或导入在极少数情况下可能需要使用数据库级别的工具来导出或导入存储在外部数据库实例中的关键信息

差量供应

随着生产环境的发展可能需要对现有环境进行更进一步的定制例如管理员可能需要更改安全区中的一些安全提供者或者更新现有缓存策略这有时也称为差量供应大多数差量供应操作都是通过WebLogic Console和MBean调用来完成的也可以使用基于模板的方法或基于WLST的方法来支持各种差量供应需要

例如可以使用WLST Online将一个额外的JMS队列作为分布式队列进行配置并跨集群设置相应的物理队列成员wlst CodeShare项目中的一个代码示例演示了如何将Application AsyncRequest Queues作为Distributed Queues添加到Cluster中另一个代码示例阐述了如何通过WLST Online配置嵌入式LDAP或外部LDAP

WebLogic Console和WLST Online脚本支持活动服务器的差量供应而WLST Offline和扩展模板可以用来供应附加的应用程序和服务比如JDBC或JMS组件以及启动/关闭类要应用扩展模板则需要关闭服务器以下WLST Offline脚本演示了一个差量供应场景在该场景中首先创建的是WebLogic Workshop域而WebLogic Integration域模板被应用于使用addTemplate()和updateDomain()操作的WebLogic Workshop域结果就有了一个既支持WebLogic Workshop功能又支持WebLogic Integration功能的域

readTemplate(<WL_HOME>/common/templates/domains/wlwjar)cd(/)cd(Security/mydomain)cd(User/weblogic)cmosetPassword(weblogic)setOption(OverwriteDomain true)writeDomain(<BEA_HOME>/user_projects/domains/wlwwli)closeTemplate()readDomain(<BEA_HOME>/user_projects/domains/wlwwli)setOption(ReplaceDuplicatesfalse)addTemplate(<WL_HOME>/common/templates/applications/wlijar)updateDomain()closeDomain()

结束语

通过几个阶段来自动化WebLogic Platform应用程序供应需要完全了解每个阶段的特定需求并采用正确的工具来实现这个自动化过程在本文中我们重点研究了基于模板的方法和基于WLST的方法并举例说明了如何有效使用这些方法来自动化一些常见的供应场景

               

上一篇:JODConverter自带的一个Web应用

下一篇:用HTML编写的几个固定界面