vmware vijava 클 라 이언 트 호출 이상

판권 소유.전재 가 필요 하 시 면 작성 자 및 출처 정 보 를 보관 하 십시오.http://blog.csdn.net/jmppok/article/details/41542963
vmware 가상 화 플랫폼 을 사용 할 때 VIJAVA 를 통 해 VCenter 의 Task 정 보 를 얻 고 30 회 이상 호출 하면 'java. rmi. Remote Exception: VI SDK invoke exception: com. vmware. vim 25. InvalidState' 이상 을 던 집 니 다.
호출 코드:
ServiceInstance si = new ServiceInstance(new URL("https://192.168.0.100/sdk"), "administrator", "123456", true);
int i=1;
		  	while(true)
		  	{
				TaskManager taskMgr = si.getTaskManager();
	
			    TaskFilterSpec tfs = new TaskFilterSpec();
			    tfs.setEventChainId(new int[]{2951});
			    
			    try{
				    TaskHistoryCollector thc = taskMgr.createCollectorForTasks(tfs);
					
				    TaskInfo[] tasks = null; 
				    while(true)
				    {
				    	tasks = thc.readNextTasks(50);
				        if(tasks==null)
				        {
				          break;
				        }
				    
				        for(TaskInfo t : tasks)
				        {
				        	System.out.println(t.key + " " + t.changeTag + " " + t.eventChainId + " " + t.getProgress() );
				        	
				        }
				    }
				    
			    }catch(Exception e)
			    {
			    	e.printStackTrace();
			    }
			    System.out.println("--------------------------------------------------"+i);
			    Thread.sleep(100);
			    i++;
			    
		  	}

30 회 실행 후 이상 던 지기:
WARN : java.rmi.RemoteException: VI SDK invoke exception:com.vmware.vim25.InvalidState
	at com.vmware.vim25.ws.WSClient.invoke(WSClient.java:122)
	at com.vmware.vim25.ws.VimStub.createCollectorForTasks(VimStub.java:1666)
	at com.vmware.vim25.mo.TaskManager.createCollectorForTasks(TaskManager.java:75)
	at com.lenovo.itcloud.vm.vmware.VmTaskManager.getTaskInfo(VmTaskManager.java:155)
	at com.lenovo.itcloud.vm.vmware.VmTaskManager.run(VmTaskManager.java:100)
	at java.util.TimerThread.mainLoop(Timer.java:555)
	at java.util.TimerThread.run(Timer.java:505)

해결 방법:
매번 Task History Collector 를 사용 한 후 destory Collector () 방법 을 사용 하여 소각 해 야 합 니 다.
thc.destroyCollector();

좋은 웹페이지 즐겨찾기