| 随着开发人员认识到连续集成的好处,应用程序的创建过程正在变得越来越自动化。然而,自动化创建会经常忽略一个会产生许多错误的方面:环境的配置。
创建和配置域的任务涉及许多能够轻松实现自动化的手动步骤。在制作一个新组件时,配置需要扩展,一些参数需要为特定环境进行调优。所有这些还经常需要手动进行。
对于WebLogic时,配置参数存储在众所周知的config.xml文件中,域目录就是应用程序的执行环境。使它们的生成自动化将允许您:
· 加速生成一个新WebLogic 8.1域的任务
· 创建域时使错误的风险最小化
· 跟踪对配置设置的更改(以及更改的原因)
· 需要时恢复到以前的配置
· 启用配置设置验证的自动化
· 简化在一个大型组织中生成大量域的工作
· 容纳不同开发人员的环境时,能在不同开发人员或项目之间轻松共享配置更改
固有的问题
您已经开始使用WebLogic Server、Platform、Portal、Integration或Workshop 8.1开发应用程序了。您已经在调整域的配置、设置连接池、设置日志级别等等。任何时候需要更改配置时,您都要将这些设置通知给您的开发人员同事。然而,并不是所有的开发人员都会有规律地或正确地合并这些更改,结果是几周后,每位开发人员都有了他自己的域。这样,应用程序可能在某位开发人员的工作站上无法正常工作,而在另一台上则工作正常。
为了避免这种问题,一些人将整个域目录置于源控件中,但这会带来其他问题。第一个最明显的问题是,在创建测试环境时,必须手动复制大多数设置。其次,每次对开发域进行更改时,也需要将更改传递到测试环境。第三,对于一个新创建的域,很难标识或记住应该进行哪些更改。第四,存储整个域目录会占用源存储库的磁盘空间,提取和登记也需要时间。
只将config.xml放到源控件中不仅不能解决这些问题,还会引入其他问题。额外的文件,例如serializedIni.dat和boot.properties,需要存储在源控件中。此外,需要一个config模板文件来确定config.xml生成时所需要的参数,该文件需要手动复制模板文件中的更改,该文件无法被其自身测试。
最好的解决方法是在源控件中保持一个只包含更改的文本格式文件,该文件制作成一个缺省(“模板”)域,使用该文件自动化域的创建。
有两种方法可以使域的创建自动化。一个是使用wlconfig Ant任务;另一个是使用域配置向导。wlconfig Ant任务在8.1中作为一个轻松编写Java管理扩展(JMX)脚本的方法被引入。基于JMX的方法的问题是:为了能够更改配置,必须启动服务器,然后,为了使更改生效,需要关闭服务器。这会耗用几分钟的时间,从而减缓了整个创建和验证过程。
正确的解决方案
域配置向导在WebLogic Server的7.0版本中被引入,它是一个帮助创建WebLogic域的独立应用程序。您可能对图形用户界面版本比较熟悉,但是却对编写无声的脚本不熟悉。
域配置向导使用无声的脚本执行,不需要任何的人为干预。脚本包含指令,使用简单的命令对域进行配置(设置端口、创建Java数据库连接[JDBC]连接池、创建Java消息服务[JMS]队列等等)。一个Ant目标将会在无声模式下调用配置向导来执行该脚本。
使用该方法,只有两个文件需要在源控件中进行检查:无声的脚本文件和Ant创建文件。
现在让我们详细看一下这个过程。
首先,您需要编写一个脚本,该脚本将会被域配置向导用来创建和配置域。清单1中提供了这样的脚本的一个简单例子,它设置了服务器的监听端口,并且配置了一个JDBC连接池。您可以在目录bea/weblogic81/common/templates/silent_scripts中找到脚本的另一个例子。
这个简单的脚本应该被扩展用来执行配置任务,以往您可能需要使用WebLogic Server控制台执行这些任务。关于更详细内容,您可以参考文章Creating a Script for Silent-Mode Configuration(参见资源)。
注意,服务器的名称根据正使用的BEA域模板(wlw、wlp、wli等等)的不同而不同。Workshop域服务器的名称是cgServer。如果您正在使用不同的平台域模板,那么您将需要更改它。
其次,您需要编写Ant目标,该目标在无声模式下调用配置向导来执行脚本和创建空域目录。清单2中显示的目标假定common.lib.dir属性指向bea/weblogic81/common目录,server.lib.dir属性指向bea/weblogic81/server,其中bea/weblogic81是您正在使用的WebLogic组件的安装目录。
注意:确认指定了“failonerror=true”,这样如果配置向导无法成功创建域,创建将会失败。
作为最后一个步骤,为了测试每次建立中的配置更改,您应该在完全的创建中调用配置目标,并将两个文件置于源控件中。
将来,在更改域配置时,您必须做的所有工作就是编辑该无声脚本,并再次运行一个完整创建来验证更改。
调节特定的配置设置
开发人员经常需要特殊的配置设置或不同的域目录(例如,一个开发人员由于他的C:分区满了,因而需要使用一个特定的硬盘驱动器)。这可以通过在无声脚本中引入变量轻松地实现。
让我们看一个具体的例子。想像这样一种情况,尽管每个人都在使用源控件中相同的配置文件集生成脚本集,但开发人员需要使用不同的用户名来连接数据库。
创建一个包含对开发人员特定的用户名的buildsettings.properties文件:
JDBCUSER=olivier
在Ant脚本中,加载该属性文件:
<property file=
"buildsettings.properties"/>
在配置向导的无声脚本文件中,使用一个变量(令牌)代表JDBC连接池用户名,而不是硬编码值:
set mypool.Properties
"user=@ JDBCUSER@";
然后,将配置向导无声脚本模板复制到一个临时目录中,并用变量值替换令牌:
<copy file="/
createDevDomain.txt"
tofile="/
createDevDomain.txt"
filtering="true" />
最后,修改配置Ant目标,使其使用临时目录中的自定义无声脚本文件:
<java classname=
"com.bea.plateng.wizard.
WizardController"
fork="true" failonerror="true"
classpathref="config.path" >
<arg value="-mode=silent"/>
<arg value="-silent_script=
/createDevDomain.txt"/>
<arg value="-log=/
confgwiz.log"/>
<sysproperty key=
"platform.properties" value=
"platform.properties" />
</java>
由于不拥有源控件外的任何文件是一个好主意,所以buildsettings.properties文件应该重命名为用户特定的名称。如果该文件的名称能够从环境变量(如Windows中的或)中自动地获取,那也是一个很好的主意。
让我们假设我的是OGOURMENT。我只需要将buildsettings.properties文件重新命名为OGOURMENTbuildsettings.properties,并更改Ant项目来获取该属性文件:
<property environment="env"/>
<property file=
"buildsettings.
properties"/>
注意,在这种情况下,如果没有定义环境变量,那么它将后退到名为buildsettings.properties、包含缺省设置的文件。这样,您只需要为特殊情况创建属性文件。
我们刚才描述的技术可以推广到解决所有种类的自定义需求。关于其他的好处,请参阅侧栏上的“Create the JMS Queues Required by the Workshop Run Time”。
下一个逻辑步骤
在从一些简单文本文件自动化域的生成后,下一个逻辑步骤就是验证这些文件中的最新变化。为了做到这一点,您只需要创建另一个Ant目标,该目标将启动服务器,并使用HttpUnit执行一个基本的健全测试。该测试将使您了解自从上次成功创建引入退步后是否引入了任何配置更改。
只有在这之后,您才应该自动部署您的应用程序,并启动自动的退步测试集来验证代码中的更改。该技术应该能调整现实项目的约束,为您提供节省时间的最佳实践,您现在就可以使用它来简化WebLogic 8.1中的配置任务了。
|