0

我正在尝试使用Cargo在与容器相同的机器上管理来自 webapp 的容器。到目前为止,我已经能够做大部分事情,但是当我第一次启动我的管理器应用程序时,我在找出容器的状态时遇到了困难。当我第一次创建Container实例时,container.getState()总是返回State.UNKNOWN。问题是,如果我尝试启动一个已经启动的容器,则会创建一个额外的 JVM,如果我尝试停止一个当前未运行的容器,我的应用程序就会挂起。我的方法如下:

ConfigurationFactory configurationFactory = new DefaultConfigurationFactory();
LocalConfiguration configuration = (LocalConfiguration) configurationFactory.createConfiguration(containerId, ContainerType.INSTALLED, ConfigurationType.STANDALONE, CARGO_CONFIGURATION_DIRECTORY);
DefaultContainerFactory containerFactory = new DefaultContainerFactory();
InstalledLocalContainer container = (InstalledLocalContainer) containerFactory.createContainer(containerId, ContainerType.INSTALLED, configuration);
assert container.getState() == State.UNKNOWN;

有没有办法找出容器的实际状态是什么?我能找到的关于容器状态的唯一信息(在实际启动/停止容器之前)是它是否已安装(通过ZipURLInstaller.isAlreadyInstalled())。

4

1 回答 1

0

我最终使用的“解决方案”是使用 Cargo 的内部 API ping 容器。因为我的应用程序中的容器是随 Cargo 一起安装的,所以我 ping Cargo 在它安装的每个容器中部署的“Cargo Ping 组件”应用程序。

import org.codehaus.cargo.container.internal.util.HttpUtils;
import org.codehaus.cargo.container.spi.util.ContainerUtils;
...
URL cargoPingUrl = ContainerUtils.getCPCURL(getConfiguration());
return new HttpUtils().ping(cargoPingUrl);

到目前为止它有效。

于 2011-04-06T00:56:20.697 回答