1

我有一个名为HelloWorld已安装但尚未部署的应用程序。它的状态是Installed,像这样:

在此处输入图像描述

当我尝试将它部署在目标服务器上时,例如AdminServer,它会导致创建一个名为的新应用程序 helloworld.war ,该应用程序已部署在 AdminServer该应用程序上,而原始HelloWorld应用程序仍处于Installed状态。应用程序helloworld.war是处于状态的应用程序Active...快照:

在此处输入图像描述

这是我用来部署已安装应用程序的代码:

File warFilePath = new File("c:/helloworld.war"); // war file path on AdminServer machine

Target adminServerTarget = deployManager.getTarget("AdminServer");
WebLogicTargetModuleID targetModuleID = deployManager.createTargetModuleID(
        "HelloWorld", ModuleType.WAR, adminServerTarget);
WebLogicTargetModuleID[] targetModuleIDs = new WebLogicTargetModuleID[1];
targetModuleIDs[0] = targetModuleID;

ProgressObject redeployProcessObject =
    deployManager.redeploy(targetModuleIDs, warFilePath, null /*no deployment plan*/ );

不过,有两个令人惊讶的事实。

首先,在 WebLogic 版本 9.x 到 10.3 上运行此代码时。3效果很好。

其次,当从 WLST 提示符运行此代码时,使用jython即使在版本 10.3 上它也能很好地工作。4(我可以附上确切的命令,尽管它们与java相同,除了语法采用)......

我的问题是,如何让它在 10.3.4 上也能正常工作?

4

1 回答 1

0

我应该以为没有人会回答这个问题... :)

无论如何,我找到了解决方案。我应该使用deploy而不是redeployDeploymentOptions其中的名称是现有的应用程序名称 ( HelloWorld):

      ProgressObject redeployProcessObject = null;
      try {
          final DeploymentOptions options = new DeploymentOptions();
          options.setName(applicationName);
          redeployProcessObject = deployManager.deploy(
              targetModuleIDs, warFilePath, null /*no deployment plan*/, options);
      } catch (TargetException e) {
          final String message =
                  String.format("Deployment of application %s on target %s failed: %s",
                          applicationName, allTargets, e.getMessage());
          _log.error(message, e);
      }

根据文档redeploy仅用更新版本替换当前应用程序文件和计划。而deploy将文件(从 AdminServer)分发到目标并启动应用程序。

此外,在深入研究了 WebLogic 的 jython 脚本和 jar 之后,我发现这正是redeploy在 WLST 中调用时所做的事情。

于 2012-02-06T09:45:16.233 回答