货物:找出已安装容器的状态

时间:2011-04-06 00:42:57

标签: java cargo

我正在尝试使用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())。

1 个答案:

答案 0 :(得分: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);

到目前为止。