随着开发人员认识到连续集成的好处,应用程序的创建过程正在变得越来越自动化。然而,自动化创建会经常忽略一个会产生许多错误的方面:环境的配置。
创建和配置域的任务涉及许多能够轻松实现自动化的手动步骤。在制作一个新组件时,配置需要扩展,一些参数需要为特定环境进行调优。所有这些还经常需要手动进行。
对于WebLogic时,配置参数存储在众所周知的config.xml文件中,域目录就是应用程序的执行环境。使它们的生成自动化将允许您:
· 加速生成一个新WebLogic8.1域的任务
· 创建域时使错误的风险最小化
· 跟踪对配置设置的更改(以及更改的原因)
· 需要时恢复到以前的配置
· 启用配置设置验证的自动化
· 简化在一个大型组织中生成大量域的工作
· 容纳不同开发人员的环境时,能在不同开发人员或项目之间轻松共享配置更改
固有的问题
您已经开始使用WebLogic Server、Platform、Portal
为了避免这种问题,一些人将整个域目录置于源控件中,但这会带来其他问题。第一个最明显的问题是,在创建测试环境时,必须手动复制大多数设置。其次,每次对开发域进行更改时,也需要将更改传递到测试环境。第三,对于一个新创建的域,很难标识或记住应该进行哪些更改。第四,存储整个域目录会占用源存储库的磁盘空间,提取和登记也需要时间。
只将config.xml放到源控件中不仅不能解决这些问题,还会引入其他问题。额外的文件,例如serializedIni.dat和boot.properties
最好的解决方法是在源控件中保持一个只包含更改的文本格式文件,该文件制作成一个缺省(“模板”)域,使用该文件自动化域的创建。
有两种方法可以使域的创建自动化。一个是使用wlconfig Ant任务;另一个是使用域配置向导。wlconfigAnt任务在8.1
正确的解决方案
域配置向导在WebLogic Server的7.0版本中被引入,它是一个帮助创建WebLogic
域配置向导使用无声的脚本执行,不需要任何的人为干预。脚本包含指令,使用简单的命令对域进行配置(设置端口、创建Java数据库连接[JDBC]
使用该方法,只有两个文件需要在源控件中进行检查:无声的脚本文件和Ant创建文件。
现在让我们详细看一下这个过程。
首先,您需要编写一个脚本,该脚本将会被域配置向导用来创建和配置域。javascript:openWindow1();>清单1
这个简单的脚本应该被扩展用来执行配置任务,以往您可能需要使用WebLogic Server控制台执行这些任务。关于更详细内容,您可以参考文章Creating a Script for Silent-Mode Configuration
注意,服务器的名称根据正使用的BEA域模板(wlw
其次,您需要编写Ant目标,该目标在无声模式下调用配置向导来执行脚本和创建空域目录。javascript:openWindow2();>清单中显示的目标假定common.lib.dir属性指向bea/weblogic81/common
注意:确认指定了“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">
<argvalue="-mode=silent"/>
<argvalue="-silent_script=
/createDevDomain.txt"/>
<argvalue="-log=/
confgwiz.log"/>
<syspropertykey=
"platform.properties"value=
"platform.properties"/>
</java>
由于不拥有源控件外的任何文件是一个好主意,所以buildsettings.properties文件应该重命名为用户特定的名称。如果该文件的名称能够从环境变量(如Windows中的
让我们假设我的是OGOURMENT
<propertyenvironment="env"/>
<property file=
"buildsettings.
properties"/>
注意,在这种情况下,如果没有定义环境变量,那么它将后退到名为buildsettings.properties、包含缺省设置的文件。这样,您只需要为特殊情况创建属性文件。
我们刚才描述的技术可以推广到解决所有种类的自定义需求。关于其他的好处,请参阅侧栏上的“javascript:openWindow3();>Create theJMS Queues Required by the Workshop Run Time
下一个逻辑步骤在从一些简单文本文件自动化域的生成后,下一个逻辑步骤就是验证这些文件中的最新变化。为了做到这一点,您只需要创建另一个Ant目标,该目标将启动服务器,并使用HttpUnit
只有在这之后,您才应该自动部署您的应用程序,并启动自动的退步测试集来验证代码中的更改。该技术应该能调整现实项目的约束,为您提供节省时间的最佳实践,您现在就可以使用它来简化WebLogic 8.1中的配置任务了。
关于作者
Olivier Gourment已经在IT