1、WebLogic 域配置策略 在本文的 第一部分 (第 8 期,卷 3 , WLDJ )中,我曾向您详细介绍了可用于创建和配置域,以及经过评估的指南和模板选项的不同策略。在本文中,我使用了像 WLShell 、 WebLogic Scripting Tool 、 Silent Scripts 和 Ant 这样的工具来配置域。这些工具利用了简单的高级脚本语言。 注意 : 本文在很大程度上依赖于一些通用的步骤,比如第一部分中描述的域创建、数据库配置和检查域配置。 脚本语言 有很多问题与脚本语言的结构和语义有关。如何编写注释?如果有的话,什么是行分隔符?该语言支持哪些数据类型?该语言是否有变量和赋值
2、?如何执行查询和导航?如何调用行为(即方法)?是否支持分支和循环?幸运的是,许多可选的脚本语言都可以用于域配置。让我们看一看这些语言。 WLShell 根据 WLShell 站点的说法, “ WLShell 是一种用于 WebLogic 的 shell 。 ” WLShell 使用一种非常简单的脚本语言来提供对 JMX Mbean 的访问,并提供一种熟悉的文件和目录导航模型, 来导航 MBean 。 WLShell 的安装非常简单。下载正确的安装程序并执行之。遵照安装程序的步骤,完成安装。 WLShell 脚本语言支持单行注释。注释字符是散列符号( # )。以 # 开始的一切内容都被注释掉了。
3、没有特殊的行结束符号。回显命令是 print 或者 echo 。 WLShell 使用熟悉的目录和文件概念来导航 WebLogic Server 实例, MBean 对应于目录,而 MBean 的属性对应于文件。因此,导航是通过像 cd 和 ls 这样的可识别命令来完成的。 用于创建一个 MBean 的命令是 md ,而用于删除一个对象的命令是 rd 。例如,要创建一个名为 semJDBCConnectionPool 的连接池,可以执行下面的命令: md /JDBCConnectionP oo l/semJDBCConnectionP oo l 如果名称包含正斜杠怎么办?可以通过使用一个另外的
4、正斜杠对这个正斜杠进行转义。例如,要创建一个名为 jdbc/semJDBCDataSource 的数据源,可以执行下面的命令: md /JDBCTxDataSource/jdbc/semJDBCDataSource 设置一个对象的变量属性可以使用 set 命令来完成。要设置一个 boolean 类型的变量,需要调用 set variable-name true-or-false 。例如,要把 StdoutDebugEnabled 变量设置为 true ,可以调用下面的命令: set StdoutDebugEnabled true 要设置一个 integer 类型的变量,需要调用 set var
5、iable-name integer-value 。例如,要把 StdoutSeverityLevel 变量的值设置为 64 ,可以调用下面的命令: set StdoutSeverityLevel 64 要设置一个 string 类型的变量,需要调用 set variable-name “string-value.“ 。例如,要把 URL 设置为 jdbc:pointbase:server:/localhost:9093/workshop ,可以调用下面的命令: set URL “jdbc:pointbase:server:/localhost:9093/workshop“ 设置原始类型的变量
6、很容易,但是如何设置 java.util.Properties 类型的变量呢?要设置 java.util.Properties 类型的变量,需要使用特殊的语法。调用 set variable-name (java.util.Properties) “name=value ,各个 name=value 对之间由分号隔开。例如,要设置连接池的属性,可以调用下面的命令: set Properties (java.util.Properties) “user=weblogic;databaseName=jdbc:pointbase:server:/localhost:9093/semdb“ 至此,我已
7、分析了如何设置 boolean 、 int 、 String 和 Properties 类型的变量。那么如何设置另一种 MBean 类型的变量呢?只要调用 set variable-name path-to-the-mbean 即可。例如,要设置 JMS JDBC 存储器的连接池属性,可以调用下面的命令: set ConnectionP oo l /JDBCConnectionP oo l/semJDBCConnectionP oo l 通过执行 ls 命令, WLShell 不仅列出了可以获取或设置的属性,而且还列出了可以调用的操作。如何执行一项操作呢?需要使用一个叫做 invoke 的特殊
8、命令。 Invoke 命令的语法是: invoke method-name parameter-list-separated-by-space 。例如,要把连接池部署到服务器,可以调用下面的命令: invoke addTarget /Server/ 在上面的例子中,方法名称 是 addTarget 。方法带有一个参数,即服务器的 MBean 。 使用 WLShel l 部署应用程序是一件棘手的事情。获得一个到 /Deployer-Runtime/DeployerRuntime 实例的引用,并创建一个实例来保存部署的数据。把数据与服务器关联起来,然后激活应用程序。 可以以脚本模式和交互模式来使用
9、 WLShell 。在交互模式中,创建了一个 WLShell 会话,并将其连接到一个正在运行的 WebLogic Server 实例。通过在 WLShell 会话中调用命令可以 修改 WebLogic Server 实例。要以交互模式运行 WLShell ,可以执行下面的命令: %wlsh 在脚本模式中,需要创建并执行 WLShell 命令的一个脚本。可以一次性创建该脚本,随后执行任意多次,以便建立类似的域。用于执行脚本的语法是 wlsh -f script-file-name 。要使用脚本创建示例域,可以执行下面的命令: %wlsh -f sem_domain_wlshell.txt 在上面
10、的例子中, sem_domain_wlshell.txt 文件包含 WLShell 语句以配置域。 在执行 WLShell 脚本之前,配置一个空的 WebLogic Workshop 域,具体方法是按照 “ 域配置 ” 部分中的步骤,使用 SEMDomain-WLShell 作为配置名称。为了运行 WLShell ,只要检查 wlshell/bin 目录在 PATH 环境变量中是否可用即可。现在执行脚本: wlsh -f sem_domain_wlshell.txt 检查配置的正确性,具体方法是按照检查域配置部分中所说的那样运行测试。 WLShell 支持通过 c2w 命令,把现有的 conf
11、ig.xml 文件转换为 WLShell 脚本和命令。 WLShell 支持离线模式工作,并支持连接到 config.xml 而不是正在运行的服务器上。然而,这个实现并非功能完备。例如,在离线模式中创建连接池会导致出现一条 “ feature not implemented ” (意思是此项功能尚未实现)的消息。 WebLogic Scripting T oo l (WLST) WLST 使用 Jython 作为其脚本语言。 Jython 站点声称, “ Jython 是面向对象 的动态高级语言 Python 的一种实现, 100% 使用 Java 编写,并且与 Java 平台无缝集成。 ”
12、不用进行重复性的劳动, WLST 在脚本基础架构方面做了一个十分明智的决定。 WLST 利用了 Jython 功能强大的脚本语言。 下面给出安装指导: 下载 WLST (wlsScripting.zip) 文件并解压缩之(比如 c:WLST) 。 wlsScripting.zip 文件包含 wlst_doc.pdf 文件。 wlst_doc.pdf 文件包含了有关 WLST 的所有详细信息,比如安装、配置和执行。请查阅参考资料部分,以便获得更多有关下载和安装 WLST 的详细指导。 下面给出 WLST 的配置指导: 在 CLASSPATH 中设置 weblogic.jar ,具体方法是执行 s
13、etWLSEnv (例如, %WLS_HOME%serverinsetWLSEnv.cmd )。 在 CLASSPATH 中设置 wlst.jar 。 在 CLASSPATH 中设置 jython.jar 。 通过执行 java weblogic.WLST 检查 WLST 是否正在工作。这会以交互模式执行 WLST 。 参考 wlst_doc.pdf 文件,以获得有关配置 WLST 的详细指导。 可以用脚本模式和交互模式使用 WLST 。在交互模式中,需要以离线模式创建一个 WLST 会话。在这种模式中, WLST 并未连接到一个正在运行的 WebLogic Server 实例。一旦 WLST
14、 连接到一个正在运行的 WebLogic Server 实例,便可以通过在 WLST 会话中调用命令来修改 WebLogic Server 实例。在脚本模式中,需要创建并执行 WLST 命令的一个脚本。就像在交互模式中一样,脚本包含 Jython 语句。脚本文件是一个 Jython 文件。可以一次性创建脚本,然后执行任意多次,以建立类似的域。 要以交互模式调用 WLST ,可以调用下面的命令: java weblogic.WLST 要以脚本模式 调用 WLST ,需要传入脚本的名称。例如: java weblogic.WLST sem_domain_wlst.py 暂时不要执行上面的命令。在本
15、节的结尾处,您将进行另外的安装,然后执行 WLST 脚本。 下面是关于 Python (和 Jython )的一些基本的注意事项。指定语句符号的结尾 (;) 是可选的,除非在一行上指定了多条语句。注释字符是散列符号 (#) 。在一行上,所有位于 # 号之后的内容都会被认为是注释的一部分。回显命令是 print 。字符串可以在单引号 () 或双引 号 (“) 中进行传递。 WLST 使用类似的目录和文件概念来导航 MBean 。因此,导航是通过像 cd 和 ls 这样的可识别命令来完成的。然而,每个命令都是一个函数。因此,命令看起来是 cd(Servers/cgServer) 和 ls() 这样
16、的形式。 WLST 为当前的托管对象定义了一个非常特殊的变量,名为 cmo 。一开始, cmo 被指派给 root 。当您导航 MBean 时, cmo 的值会随之变化。在文件系统用语中, cmo 的值就是当前的工作目录。执行 ls(a) 来查找 其值可以修改的属性。给属性名称加上 set 前缀,以便修改属性的值。例如,要把属性 StdoutSeverityLevel 的值修改为 64 ,可以调用下面的方法: setStdoutSeverityLevel(64) 。然而,应该在什么对象上调用 setStdoutSeverityLevel(64) 方法呢?当然是 cmo : cmo.setStd
17、outSeverityLevel(64) 另一个选择是把 cmo 赋给一个变量。稍后,可以随时在当前的会话中使用该变量。例如: cgServer = cmo cgServer.setStdoutSeverityLevel(64) 假定您想要把 StdDebugEnabled 的值设置为 true 。然而, Python 和 Jython 均不支持 boolean 类型。幸运的是,可以使用 integer 类型的等价值, 1 代表 true ,而 0 代表 false 。因此,下面这样就可以把 StdDebugEnabled 的值设置为 true : cgServer.setStdoutDebu
18、gEnabled(1) 如何创建像 JDBC 连接池和 JMS 队列这样的资源呢?可以使用 WLST 的内置 create() 方法。 create() 方法接受两个参数。第一个参数是资源的名称,而第二个参数则是资源的类型。例如,要创建一个名为 semJDBCConnectionPool 的 JDBC 连接池,可以执行下面的命令: create(semJDBCConnectionP oo l,JDBCConnectionP oo l) 注意 : 还有一个相应的 delete() 方法,工作方式类似。 WLST 提供一个名为 makePropertiesObject() 的特殊方法,用以在由分号
19、隔开的名称 / 值对的字符串之外创建属性对象。因此,像下面这样可以设置一个 JDBC 连接池的属性: semCPProperties = makePropertiesObject(user=weblogic;databaseName=jdbc:pointbase:server:/localhost:9093/semdb) semCP.setProperties(semCPProperties) 部署新近 创建的资源(如连接池)给服务器很容易。像下面这样调用源的 addTarget() 方法即可: semCP.addTarget(cgServer) 对于 WLST 来说,使用 deploy()
20、方法部署应用程序十分轻松。 deploy() 方法带有三个参数。第一个参数是应用程序的名称。第二个参数是通向 EAR 文件位置的路径。第三个参数是目标或服务器名称。下面给出的是 deploy() 方法的例子: deploy(SEMApp,c:/Automate/SEMApp/SEMApp.ear,cgServer) 在执行 WLST 脚本之前,按照 “ 域配置 ” 部分中的步骤,配置一个空的 WebLogic Workshop 域,使用 SEMDomain-WLST 作为配置名称( Configuration Name )。按照 “ 数据库配置 ” 部分中的步骤建立数据库实例。现在,执行脚本:
21、 java weblogic.WLST sem_domain_wlst.py 重新启动 WebLogic Server 实例,并通过运行 “ 检查域配置 ” 部分中描述的测试来检查配置的正确性。 技术人员是否可以把 现有的域反过来转化为 WLST 脚本呢?答案是完全可以。使用 configuretoscript() 命令,现有域的内容就会被转化为 WLST 脚本文件。使用此项功能可以快速地把 WLST 结合到您当前的过程中。 静寂脚本 静寂脚本包含,由配置向导以静寂模式执行的语句。这些语句均以分号 (;) 结尾。该语言支持 Java 风格的注释。双正斜杠 (/) 用于把一整行作为注释,而 /*
22、 ? */ 则用于把一段作为注释。该语言没有数据类型的概念;所有内容都是包含在双引号中的字符串。例如,要设置 boolean 或 integer 类型,只需要将值封闭在双引号内,如下所示: set cgServer.StdoutDebugEnabled “true“; set cgServer.StdoutSeverityLevel “64“; 可以将简单类型转化为它们的字符串等价形式,但是对于对象又该怎么办呢?答案是使用对象的名称。例如,要设置队列的错误目的地: set aq.ErrorDestination “SEMAppWeb.queue.AsyncDispatcher_error“;
23、不支持分支和 循环。没有导航。静寂脚本文件的结构是文本的。该语言支持变量。可以在创建新对象或者找到预先存在的对象时,给变量赋值。例如,下面就是在找到一个预先存在的对象时给变量赋值: find Server “cgServer“ as cgServer; 也可以在创建新对象时给变量赋值: create JDBCConnectionP oo l “semJDBCConnectionP oo l“ as semCP; 脚本使用特殊的语法把资源部署给它们的目标,即调用 MBean 的 addTarget() 方法 。特殊的语法是把 “ 赋给 Target “ 。例如,要把 semJDBCConnect
24、ionPool 部署给 cgServer ,可以使用下面的语法: assign JDBCConnectionP oo l “semJDBCConnectionP oo l“ to Target “cgServer“; 静寂脚本对域创建的支持非常好。因此,您可以使用配置向导(就像 “ 域配置 ” 部分中所描述的那样)或者使用静寂脚本 来创建域。我将举例说明如何使用静寂脚本创建域。 sem_domain_silent_create.txt 脚本例示了域的创建。静寂脚本读取 Basic WebLogic Workshop Domain 模板,并创建一个域。但是,如何调用脚本呢?用于调用静寂脚本的语法
25、如下: %BEA_HOME%/weblogic81/common/bin/config.cmd -mode=silent -silent_script=full path to script file -log=full path to the log file 现在,使用 sem_domain_silent_create.txt 脚本创建域。 -log 标志是可选的,但是强烈建议使用。当出现错误时,记录到控制台的消息十分简明扼要,却能将完整的异常跟踪记录到了日志文件中。在调试静寂配置脚本的过程中,日志文件十分重要。 请注意,在 sem_domain_silent_create.txt 文件中
26、,如果没有给 WebLogic 用户指派密码,脚本将会失效。此外,默认情况下,新近创建的用户被指 定到 Administrators 组。因此,创建一个用户系统时,该用户系统属于 Administrators 组。如果脚本试图把域写到一个已经存在的位置,脚本将会失效。为了置换预先存在的域,可以把 OverwriteDomain 变量的值设置为 true 。 接下来,就像 “ 数据库配置 ” 部分中描述的那样,建立一个数据库。现在,如果服务器正在运行,则关闭之。通过执行 sem_domain_silent_config.txt 脚本来配置服务器。要知道,设置 driverName 和 URL 的
27、顺序很重要。 否则,连接池的创建将会失败! 注意 sem_domain_silent_config.txt 脚本结尾的 update domain 命令。没有这个命令,就不会提交对域所做的修改,而且域也不会发生变化! 使用静寂脚本配置域时(注意,服务器没有运行),如何部署应用程序呢?创建一个包含应用程序的定制模板。定制模板是一个包含 EAR 文件的 JAR 文件, config.xml 的相关部分将被合并到当前的 config.xml 中,以及模板中的一些元数据 info.xml 文件。在静寂脚本中,使用 add Template ? 命令添加模板。当必须更新域时,至少需要添加一个模板,否则对
28、域所做的修改将不会被持久保存!如果您没有自己的模板,使用 DefaultWebApp 模板是一种常用的技巧。 通过运行 “ 检查域配置 ” 部分中描述的测试,检查配置的正确性。 特殊的 Ant 任务 Apache Ant 是一种用于构建和部署应用程序的、价值无法估量的工具。 Ant 文件就是包含许多目标的 XML 文件。目标调用任务。 WebLogic 带有特殊的任务,比如 wlconfig 和 wldeploy 。 wlconfig Ant 任务有助于域的配置。 wldeploy Ant 任务有助于应用程序的部署。 WebLogic Server 安装还包括 Ant 。 . 通过执行 set
29、WLSEnv ( bat 或 sh )脚本安装环境时, Ant 是自动进行安装的。如果使用这个版本的 Ant , wlconfig 和 wldeploy 的任务定义就不是必需的。 Ant 文件的语言是 XML 。因此,语言的注释就是 XML 风格的注释。像回显这样的其他功能是特定于 Ant 的。 Wlconfig 任务包含嵌入的元素,比如 query 和 create 。 Query 元素用于创建新的 MBean 。 query 和 create 都支持 get 和 set 元素来获取和设置 MBean 属性。设置属性的语法是 。所有的属性值,不论其类型,都被包括在双引号中,并以字符串的形式传
30、入。考虑把 MBean 属性 StdoutDebugEnabled ( boolean 类型)的值设置为 true 。 同上,考虑把 MBea n 属性 StdoutSeverityLevel ( integer 类型)的值设置为 64 : 一旦查询了某个对象,就可以选择把该对象设置为一个 Ant 属性,在整个文件中都可用。例如,服务器被查询,并被设置到 cgServer 属性中。稍后,在编译文件中,就 会使用 cgServer 属性把资源定为服务器的目标。 注意 : wlconfig 当前不支持 invoke 命令。因此,例如,目标被设置为属性,而没有调用 addTarget 操作。 wld
31、eploy Ant 任务用于部署应用程序和解除对应用程序的部署。 Wldeploy 任务可以采取的动作有部署、解除部署、重新部署、取消、启动、停止和分配。 为了执行所包含的 Ant 文件,首先按照 “ 域创建 ” 部分中描述的步骤创建域,给这个域取一个有意义的名称,比如 SEMDomain-Ant ,作为配置 名称。 注意 : 因为在 Ant 文件中使用了域的名称,要么使用 SEMDomain-ANT 作为域名,要么修改 Ant 文件,使之与您的域名相匹配。启动 WebLogic server 实例,并使用 “ 数据库配置 ” 部分中描述的步骤来配置数据库。运行一个新命令或 shell 窗口,
32、然后执行 %WLS_HOME%/server/bin/setWLSEnv ( cmd 或 sh )文件来安装环境。使用下面的命令执行 Ant : ant -v -f sem_domain_ant_config.xml 按照 “ 检查域配置 ” 部分中描述的那样运行测试。 Ant 命令的 verbose (-v) 选项可以显示发给服务器的 MBean 命令。这种信息在调试和排除故障的过程中十分有价值。 Ant 文件鼓励以十分模块化的方式开发自动脚本。使用单独的目标创建和配置单个资源。使用 Ant 依赖性,所有目标都可以调用单独的 Ant 目标,进行完整的配置。 Ant 鼓励创建清晰的目标。在清晰的目标中,依赖性的顺序与所有目标相反。 结束语:选择和更多选择 本文描述了如何使用 WLShell 、 WLST 、静寂脚本和 Ant 任务对域进行配置。这些工具采用简单而功能强大的高级脚本语言。 WLShell 使用的是一种定制的脚本语言,而 WLST 则使用 Jython 。在创建域配置了脚本之后,要建立另一个同样的域就再简单不过了 只要执行脚本就可以做到。域配置的脚本化是实现域配置自动化的手段。
Copyright © 2018-2021 Wenke99.com All rights reserved
工信部备案号:浙ICP备20026746号-2
公安局备案号:浙公网安备33038302330469号
本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。