现在的位置: 首页 > 综合 > 正文

WebLogic Server应用部署模式【stage】讲解

2013年10月28日 ⁄ 综合 ⁄ 共 2619字 ⁄ 字号 评论关闭

熟悉Tomcat的朋友都知道,在Tomcat上部署应用非常简单,只要把应用包或目录放入webapps目录下就完事儿了。但是在WebLogicServer环境下,问题要复杂很多。首先,WebLogicServer是应用服务器,不象Tomcat一样只是个Web容器;其次,WebLogicServer的域管理模式决定了管理服务器与被管理服务器可能根本就不在同一台物理服务器上,所以WebLogicServer上部署应用至少有两个要考虑:

  • 需要部署的应用包(或展开式目录)如何分发与同步
  • 已部署的应用如何更新

为解决上述问题,WebLogic Server引入了一个概念,即应用部署模式。其包括三种模式:Stage、Nostage和External_Stage,在WebLogic Server的控制台中,我们可以设置缺省模式,如下图:

WebLogic Server应用部署模式讲解

说明:截图用的是WebLogic Server 10.3.2国际版,其中用了“临时模式”这个词,我个人觉得不太适合,还是用“部署模式”比较好理解。其中的“存放、不存放与外部存放”就是对应英文“Stage、Nostage与External_Stage”

不存放模式(Nostage)

不存放的东西是什么,这里指的是部署文件,那么不存放在哪里呢,这里指的是Stage目录,即:上图中的“临时目录名称”。默认是在被部署服务器文件夹下的stage目录,例如:在我机器上是D:\oracle\fmw\user_projects\domains\base_domain\servers\AdminServer\stage。

综合起来理解,Nostage就是指通过WebLogic Server管理控制台或命令行工具发出部署应用命令后,应用部署包不被传送到Stage目录。

那么这种模式存在的真正意义是什么呢,举例来说,如果在一个比较大WebLogicServer集群环境(例如:我碰到过12台服务器构成的集群)中,如果在其上部署一个应用或更新一个应用,那就意味着要将部署文件传送到12台服务器上,这显示是非常低效的。遇到这种情况,我们可以将应用包放在一个共享磁盘上,然后使用Nostage模式发布应用,这样就可以避免刚才所说的情况。还有一种情况就是如果我们使用展开目录方式发布应用,如果采用Nostage方式就可以在应用目录里直接改JSP文件了,无需重新部署就可以生效,当然对类文件或配置描述符文件的更改就得重新部署了,这比较类似于Tomcat的模式。

命令行举例:

java weblogic.Deployer -adminurl -user weblogic
-password weblogic -name mytestear -stage -targets mycluster
-deploy c:\bea\weblogic81\samples\server\medrecd\dist\physicianEar

存放模式(Stage)

有了上面Nostage知识的基础,我不用讲大家也可以想出来,Stage就是指应用发布时应用包会被传送到Stage目录。使用Stage模式的好处是如果需要将应用发布到集群或多服务器上,无需使用共享磁盘等技术,WebLogicServer会保证将应用包同步到所有需要部署到的服务器上。当然,这是以牺牲应用发布效率为代价的。

 这里需要注意的一点,管理员通过WebLogic Server控制台或命令行发布应用时,应用包会先传送到WebLogicServer的管理服务器(即:AdminServer),然后由管理服务器负责应用包的分发与同步。同时,管理服务器上也会有一个应用包的副本,哪怕应用并不需要部署到管理服务器,这是为了使应用服务器在应用发布前对其效验证的。

命令行举例:

java weblogic.Deployer -adminurl -user weblogic
-password weblogic -name mydeploymentname
-targets myserver1,myserver2,myserver3 -stage
-deploy c:\localfiles\myapp.ear

外部模式(External_Stage)

External_Stage原理上其实和Stage类似,只有一点不同,External_Stage模式下,管理服务器不负责应用包的传递与同步。这种模式其实是为第三方工具提供了一种干预方式,也就是说在应用部署时,由第三方工具负责先把发布到传送到Stage目录,然后再由管理服务器管理应用的发布,这时,应用服务其实只是负责发布包的验证(同样,管理服务器上需有部署文件)与部署激活。

命令行举例:

java weblogic.Deployer -adminurl -name weblogic
-password weblogic -external_stage -name myEARExternal
-deploy c:\myapps\myear

最佳实践

1. 当我们将应用以包(.WAR、EAR、RAR)的方式发布时,如何可以方便的修改包里的文件(如:JSP、HTML等)而无需重部署。

其实,这并不是推荐方式,如果有这种需求,应该使用展开目录的方式发布应用而非应用包,但是如果是特殊情况下必须这样做,可以到被部署应用的服务器目录下的\tmp\_WL_user目录下寻找,例如,在我的机器上:D:\oracle\fmw\user_projects\domains\base_domain\servers\AdminServer\tmp\_WL_user

WebLogic Server会为每个发布的应用建立一个文件夹,我们可以在里面找到应用包的展开形式目录,并对其中的文件进行修改,无需重部署就会生效,但需要注意一点就是,如果应用被更新了,这个目录下的文件也会被更新,这就意味着你的修改会丢失。

2. External_Stage模式下,避免管理服务器上需有部署文件

您可以使用 -noversion 选项取消“管理服务器上需有部署文件”这一要求,但 -noversion 选项会导致版本信息被忽略,从而致使您无法将 -noversion 选项用于受版本控制的应用程序。

3. 最便捷的应用发布方式

在域根目录下有个autodeploy目录,只要将部署文件放在里面就会被自动部署到管理服务器,当然,这种应用发布方式只适用于单机模式。对于autodeploy的话题以后将会详细讲述。

抱歉!评论已关闭.