2011-04-06 22 views
0

我試圖使用Cargo來管理與容器相同機器上的webapp的容器。到目前爲止,我已經能夠做大部分事情,但是當我第一次啓動我的管理器應用程序時,發現容器的狀態時,我一直陷入困境。當我第一次創建Container實例時,container.getState()總是返回State.UNKNOWN。問題是如果嘗試啓動已啓動的容器,則會創建額外的JVM,如果嘗試停止當前未運行的容器,則應用程序會掛起。我的方法如下:Cargo:找出已安裝的容器的狀態

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())。

回答

0

我最終使用的「解決方案」是使用Cargo的內部API對容器執行ping操作。由於我的應用程序中的容器安裝了貨物,因此我會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); 

它到目前爲止工作。