企业级软件是复杂的,但是几乎毫无疑问,为这些应用程序提供服务和资源的底层软件更加复杂。后一类软件可以分为几种类型,其中的一类就是Java应用服务器。当然,本文讨论的服务器是BEA WebLogic Application Server。
在本文中,我会讨论如何使用WebLogic Server的脚本语言和代码生成来简化脚本的创建。
使用脚本语言的好处
为了提高效率,系统管理员会创建一些脚本使其能快速地执行重复的任务。这些脚本能执行配置和控制的任务。在WebLogic Server中,这些脚本用来做诸如启动和停止服务器,或者配置服务器某个方面之类的事情。
BEA WebLogic Server现在有好几种不同的脚本语言,其中的两种和WebLogic Server一起发布,还有一种称作WLShell的是开放源代码程序。与WebLogic Server一起发布的两种语言是weblogic.Admin 和 WLAnt。weblogic.Admin实用程序通过解释命令帮您完成一系列的管理性任务。weblogic.Admin语言的语法实际上是专利的。WLAnt语言是一个Ant任务集,该任务完成一些和weblogic.Admin类似的工作。WLShell语言是另一种要学的语法,它也完成类似的工作,但是增加了一个用来执行命令和与域交互的交互式shell。
和任何一种编程语言一样,在我们熟练它之前都有一个学习曲线。这个学习的过程包括语言的基础知识和如何高效地使用这门语言来达到最好的效果。在学了语言的基础之后,您必须学会如何将其应用到WebLogic Server域中。让我们简要地看一下如何分别将每种脚本语言应用到WebLogic Server的域实体和服务器中。
WebLogic Server 域
BEA WebLogic Server有很多组件,这些组件为运行在服务器上的应用程序提供运行时服务和资源。WebLogic Server域中的组件有服务器、集群(clusters)、JDBC 连接池、JMS服务器和JMS队列。每种脚本语言分别被应用于这些对象。例如,编写一个脚本以创建一个WebLogic Server,以及设置一些属性,在清单 1中列出了用每种语言编写的脚本。(注意: 为简洁起见省略了一些语句。)
清单1
For WLShell:
mkdir /Server/MedRecServer
cd /Server/MedRecServer
set JavaCompiler "javac"
set ListenPort 7001
set IIOPEnabled "false"
set InstrumentStackTraceEnabled "false"
For WLAnt:
-<create name="MedRecServer" type="Server">
<set attribute="JavaCompiler" value="javac" />
<set attribute="ListenPort" value="7001" />
<set attribute="IIOPEnabled" value="false" />
<set attribute="InstrumentStackTraceEnabled" value="false" />
</create>
For weblogic.Admin:
CREATE -mbean mydomain:Name=MedRecServer,Type=Server
SET -mbean mydomain:Name=MedRecServer,Type=Server
-property JavaCompiler "javac"
SET -mbean mydomain:Name=MedRecServer,Type=Server
-property ListenPort "7001"
SET -mbean mydomain:Name=MedRecServer,Type=Server
-property IIOPEnabled "false"
SET -mbean mydomain:Name=MedRecServer,Type=Server
-property InstrumentStackTraceEnabled "false"
您应该已经看到,为完成相同的任务,每种语言都有不同的语法,但是对不同类型的WebLogic Server实体而言,每种语言概念上都是以相同的方式工作的。编写和维护这些脚本在某种程度上是很浪费时间的,您必须对它们的语法非常熟悉。另一方面,您可能需要借助脚本来创建整个的新域。编写这样一个庞大的脚本将会是一个相当费时而且容易出错的过程。
但是,我们可以使用代码生成(code-generation)来简化这个过程,它可以使您:
- 快速创建可重用的管理代码片断
- 缩短这些语言的学习曲线
- 缩短将这些语言应用于WebLogic Server域的学习曲线
- 以您选择的语言生成脚本
conf2admin 简介
conf2admin是一个处理config.xml并以某种脚本语言的形式产生输出的实用程序。当前的实现包括对weblogic.Admin的支持,但Ant和WLShell的支持还在计划中。conf2admin的主要特征是:
- 处理脱机的配置
- 以您选择的脚本语言来生成脚本
- 生成一个撤销(undo)文件
- 伸出一个在域中部署应用程序的脚本
- 从输出中排除某些WebLogic Server实体
BEA WebLogic Server域配置文件是一个XML格式的文件,它描述了服务器、集群和应用程序等的配置。conf2admin实用程序通过如下的方式工作:它对config.xml文档进行XSLT转换,并且它有一些XSL模板,这些模板为创建和设置WebLogic Server域实体上的值产生必要的命令。
图 1 阐述了conf2admin的基本概念。在继续我们的主题之前,让我们简要地看一下conf2admin背后的核心技术——扩展样式表转换语言(Extensible Stylesheet Language Transformations,XSLT)。

XSLT
XSLT是一种基于XML的转换语言,它将模板与XML文档中类似标记的元素和属性进行匹配。conf2admin中的模板与BEA WebLogic Server域配置的元素相匹配。这些模板的输出是一个脚本代码,此脚本可以用weblogic.Admin或者其他脚本解释器来执行。下面的代码片断给出了一个模板的例子。
<xsl:template match="//Server">
<!?specify contents of template here ?
</xsl:template>
要与基于XML的配置文件协同工作,XSLT是一个很好的选择。我们可以用XML解析器轻易地对文档进行解析,也有对模板进行解析的解析器。编写一个XSLT模板非常简单。在这里我不会深入地探讨XSLT规范,而是关注与代码生成相关的样式表部分。
将conf2admin用于Medrec
我们将把conf2admin实用程序用于WebLogic Server MedRec例子的域配置文件。MedRec例子和BEA WebLogic Server 一起发布,它包括多种WebLogic Server资源。根据您的BEA WebLogic Server的版本,MedRec域配置文件可能有细微的差别。我们将运行conf2admin并关注产生的 MedRecServer 和 JDBCConnectionPool 资源。这两个资源在域配置文件中由实体表示成如清单 2 中所示的样子。
清单 2
<Server JavaCompiler="javac" ListenPort="7001"
Name="MedRecServer" IIOPEnabled="false" InstrumentStackTraceEnabled="false">
<ExecuteQueue Name="default" ThreadCount="15" />
<SSL Name="MedRecServer" Enabled="true" ListenPort="7002" />
</Server>
<JDBCConnectionPool CapacityIncrement="1"
DriverName="com.pointbase.jdbc.jdbcUniversalDriver"
InitialCapacity="1" MaxCapacity="10" Name="MedRecPool" Password="MedRec"
Properties="user=MedRec" RefreshMinutes="0" ShrinkPeriodMinutes="15"
ShrinkingEnabled="true" Targets="MedRecServer" TestConnectionsOnRelease="false"
TestConnectionsOnReserve="false" URL="jdbc:pointbase:server://localhost/demo" />
当对MedRec config.xml文件运行conf2admin程序时,结果文件由多行生成的代码所组成,清单 3中示例的两个代码片断的功能是处理服务器和JDBCConnectionPool。
清单3
CREATE -mbean mydomain:Name=MedRecServer,Type=Server
SET -mbean mydomain:Name=MedRecServer,Type=Server
-property JavaCompiler "javac"
SET -mbean mydomain:Name=MedRecServer,Type=Server
-property ListenPort "7001"
SET -mbean mydomain:Name=MedRecServer,Type=Server
-property IIOPEnabled "false"
SET -mbean mydomain:Name=MedRecServer,Type=Server
-property InstrumentStackTraceEnabled "false"
从输出中您可以看到其中生成了一条创建服务器的CREATE命令。另外还有4条SET命令,每一条都表示设置服务器上的一个属性。清单 4列出了JDBCConnectionPool的类似结果。
清单4
CREATE -mbean mydomain:Name=MedRecPool,Type=JDBCConnectionPool
SET -mbean mydomain:Name=MedRecPool,Type=JDBCConnectionPool
-property CapacityIncrement "1"
SET -mbean mydomain:Name=MedRecPool,Type=JDBCConnectionPool
-property DriverName "com.pointbase.jdbc.jdbcUniversalDriver"
SET -mbean mydomain:Name=MedRecPool,Type=JDBCConnectionPool
-property InitialCapacity "1"
SET -mbean mydomain:Name=MedRecPool,Type=JDBCConnectionPool
-property MaxCapacity "10"
SET -mbean mydomain:Name=MedRecPool,Type=JDBCConnectionPool
-property Password "foobar"
SET -mbean mydomain:Name=MedRecPool,Type=JDBCConnectionPool
-property Properties "user=MedRec"
SET -mbean mydomain:Name=MedRecPool,Type=JDBCConnectionPool
-property RefreshMinutes "0"
SET -mbean mydomain:Name=MedRecPool,Type=JDBCConnectionPool
-property ShrinkPeriodMinutes "15"
SET -mbean mydomain:Name=MedRecPool,Type=JDBCConnectionPool
-property ShrinkingEnabled "true"
SET -mbean mydomain:Name=MedRecPool,Type=JDBCConnectionPool
-property TestConnectionsOnRelease "false"
SET -mbean mydomain:Name=MedRecPool,Type=JDBCConnectionPool
-property TestConnectionsOnReserve "false"
SET -mbean mydomain:Name=MedRecPool,Type=JDBCConnectionPool
-property URL "jdbc:pointbase:server://localhost/demo"
conf2admin实用程序将配置文件里的元素进行匹配,在这个例子中是服务器和JDBCConnectionPool元素,并且实例化一个生成CREATE命令的模板。样式表并不对它查找的个别元素进行命名,而是仅仅对它找到的元素进行匹配。接下来,在生成CREATE命令的模板中,conf2admin开始处理属性并产生SET命令来设置新创建的服务器或JDBCConnectionPool实体的属性。这个处理流程直到整个文档处理完为止。
conf2admin实用程序也会产生一些注释块,来指明产生的代码在config.xml文件里的出处。在MedRecServer的例子中,注释块如下所示:
#================================================
#==
#== Creating MBean of type Server
#==
#== Origin: /[1]/Domain[1]/Server[1]
#==
#================================================
注释中的origin以XPath表达式的形式表示在文档中的位置。中括号中的数字是元素的下标,因为有些情况下会有好几个特殊的类型。
一旦生成了输出,您就可以以批处理模式将这个输出文件作为weblogic.Admin解释器的输入。conf2admin的文档描述了如何对其进行配置以生成对脚本命令进行独立解释的命令。默认设置下将会生成在weblogic.Admin批处理模式中使用的命令。
结束语
本文介绍了BEA WebLogic Server中的可用脚本语言,以及如何使用代码生成来快速创建管理脚本。虽然看起来功能强大,但使用XSLT来生成代码还有许多局限。对于重复处理的部分没有友好的循环接口,相反,您必须递规调用模板直到完成整个过程。在模板中也没有真正的流程控制的概念。
相关链接
以下链接为您提供本文所讨论的技术和概念的更多细节。
原文出处 http://www.sys-con.com/story/?storyid=43036&DE=1
|