API を呼び出して、営業時間外に vApp を展開解除し、後で再び起動するだけです。
VApp をアンデプロイしようとすると、断続的なエラーが発生します。(後で完全なスタック トレースを示します)。
私が何をしているのかを知らせるために、最初に VApp.shutdown() を呼び出しています。これは常に成功を返すようです。Vapp.undeploy(UndeployPowerActionType.DEFAULT) 呼び出しを呼び出す前に、最大 10 分間待機することがあります。それでもほとんどの場合、機能しません。その後、再度実行すると、かなりの頻度で動作します (結果を確認すると、Vapp は実際にアンデプロイされています)。または、それでも動作しない場合は、もう一度呼び出すと動作します。
スタック トレースは次のようになります.. (配列のインデックスが -5 や -12 などの異なる数値で範囲外になることがあります。ただし、スタック トレースは常に次のようになります...)
2014-07-17 13:10:33 ERROR [main] ControlModule:75 - アンデプロイでエラーが発生しました java.lang.ArrayIndexOutOfBoundsException: Array index out of range: -2 at com.sun.xml.bind.v2.util. com.sun.xml.bind.v2.util.CollisionCheckStack.push(CollisionCheckStack.java:71) の CollisionCheckStack.findDuplicate(CollisionCheckStack.java:133) com.sun.xml.bind.v2.runtime.XMLSerializer.pushObject( XMLSerializer.java:494) com.sun.xml.bind.v2.runtime.XMLSerializer.childAsXsiType(XMLSerializer.java:609) com.sun.xml.bind.v2.runtime.property.SingleElementNodeProperty.serializeBody(SingleElementNodeProperty. java:113) com.sun.xml.bind.v2.runtime.ElementBeanInfoImpl$1.serializeBody(ElementBeanInfoImpl.java:120) com.sun.xml.bind.v2.runtime.ElementBeanInfoImpl$1.serializeBody(ElementBeanInfoImpl.java:149) com.sun.xml.bind.v2.runtime.ElementBeanInfoImpl.serializeBody(ElementBeanInfoImpl.java:269) で com.sun.xml.bind.v2.runtime.ElementBeanInfoImpl.serializeRoot(ElementBeanInfoImpl.java:276) で.sun.xml.bind.v2.runtime.ElementBeanInfoImpl.serializeRoot(ElementBeanInfoImpl.java:35) com.sun.xml.bind.v2.runtime.XMLSerializer.childAsRoot(XMLSerializer.java:472) com.sun.xml .bind.v2.runtime.MarshallerImpl.write(MarshallerImpl.java:301) at com.sun.xml.bind.v2.runtime.MarshallerImpl.marshal(MarshallerImpl.java:230) at javax.xml.bind.helpers.AbstractMarshallerImpl .marshal(AbstractMarshallerImpl.java:106) at com.vmware.vcloud.sdk.JAXBUtil.marshal(JAXBUtil.java:199) at com.vmware.vcloud.sdk.AbstractVapp.createVappUnDeployParamBody(AbstractVapp.java:299) at com. VMware.com.ipt.ebsa.skyscape.client.module の vcloud.sdk.AbstractVapp.undeploy(AbstractVapp.java:318) com.ipt.ebsa.skyscape.client.manager の ControlModule.controlVApp(ControlModule.java:70)。 com.ipt.ebsa.skyscape.client.CloudManager.UndeployVApp(CloudManager.java:197) の VMManager.controlVApp(VMManager.java:294) com.ipt.ebsa.skyscape.client.RajVAppTest.stopAndUndeployVApp(RajVAppTest.java: 178) com.ipt.ebsa.skyscape.client.RajVAppTest.testUndeployVApp0(RajVAppTest.java:121) で、sun.reflect.NativeMethodAccessorImpl.invoke0(ネイティブ メソッド) で、sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:94) でSun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:55) で、java.lang.reflect.Method.invoke(Method.java:619) で、org.junit で。runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:47) の org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) の org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod) .java:44) org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17) で org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26) で org. junit.runners.ParentRunner.runLeaf(ParentRunner.java:271) org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:70) org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50) org .junit.runners.ParentRunner$3.run(ParentRunner.java:238) org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63) org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236) で org.junit.runners.ParentRunner.access$000(ParentRunner.java:53) で org.junit.runners.ParentRunner$2.evaluate(ParentRunner) .java:229) org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50) で org.eclipse で org.junit.runners.ParentRunner.run(ParentRunner.java:309)。 jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467) at org.eclipse.jdt.internal. junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197) 2014-07-17 13:10:33 DEBUG [main] ControlModule:77 - vapp 'TEST_RAJ2' のアンデプロイが完了しました 2014-07-17 13:10:33 DEBUG [main] VMManager :296 - controlVApp 終了
私が何か間違ったことをしているかどうか誰かに教えてもらえますか? Vapp のデプロイを解除するために、再試行するだけで最終的には機能するのが通常の方法ですか。
その場合、再試行を続ける必要がある場合、この例外を検出できます。それが発生した場合は、最終的に失敗してあきらめる前に、特定の回数再試行しますか?
または、Vapp がアンデプロイされているかどうかを検出する別の方法はありますか?
undeploy() ではなく 'shutdown() を呼び出すほうがうまくいきますか? 私の経験では、そのほうが一貫しているように思えます。ただし、結果としてコンソールに表示される vApp は、「シャットダウン」ではなく「部分的に実行中」と表示されます。結局のところ、vAPP を必要としない期間はクラウド ホスティング パートナーからの課金を停止してもらいたいだけなので、これは問題ないかもしれません。vAPP をシャットダウンすると、実際にこの目的を達成できると思いますか? クラウド ホスティング パートナーについて確認する必要があります。
どんな助けでも大歓迎です。
ありがとう、