`

java webservice sdk virtualbox控制

 
阅读更多
	private static Logger log = Logger.getLogger(VBoxControlUtil.class);
	private IMachine machine;
	private VirtualBoxManager vbm;
	private ISession session;
	private String vboxName;

	public VBoxControlUtil(String vmname) {
		log.info("begin connect :"+ vmname);
		vboxName = vmname;
		vbm = VirtualBoxManager.createInstance(null);
		vbm.connect(SystemContent.VBOX_URL,"","");
		IVirtualBox vbox = vbm.getVBox();
		machine = vbox.findMachine(vmname);
		session = vbm.getSessionObject();
		log.info("conect sucess : " + vmname);
	}

	public synchronized void disconnect(VirtualBoxManager manager) {
		try {
			manager.disconnect();
		} catch (VBoxException e) {
		}
	}

	public synchronized boolean isConnected(VirtualBoxManager manager) {
		try {
			manager.getVBox().getVersion();
			return true;
		} catch (VBoxException e) {
			return false;
		}
	}

	@SuppressWarnings({ "unchecked", "rawtypes" })
	public synchronized long startVm() {
		if (null == machine) {
			log.error("Cannot find machine name is : " + vboxName);
			return -1;
		}
		MachineState state = machine.getState();
		if (MachineState.Running == state || MachineState.PoweredOff == state) {
			long rs = stopVm();
			if(rs == -1){
				return -1;
			}
		}
		IProgress progress;
		String env = "";
		long result = 0;
		try {
			progress = machine.launchVMProcess(session, "gui", env);
			if (!waitProgressCompletion(progress)) {
				log.warn("Cannot run Vbox!");
				return -1;
			}
		} catch (Exception e) {
			e.printStackTrace();
			log.error(" start virtualbox is error : " + e.getMessage());
			return -1;
		}
		// 运行进程
		IConsole iCon = session.getConsole();
		IGuest iGuest = iCon.getGuest();
		IGuestSession igs = iGuest.createSession("Administrator", "mima",
				"", "");
		List lArgs = new ArrayList();
		lArgs.add("/K c:\\bin\\update.bat "+SystemContent.PROJECT_HOST+" "+SystemContent.SOCKET_PORT);
		List lFlags = new ArrayList();
		lFlags.add(ProcessCreateFlag.WaitForStdOut);
		lFlags.add(ProcessCreateFlag.WaitForStdErr);
		IGuestProcess igp = igs.processCreate("c:\\windows\\system32\\cmd.exe",
				lArgs, null, lFlags, (long) 120000);
		List lWaitFlags = new ArrayList();
		lWaitFlags.add(ProcessWaitForFlag.Start);
		ProcessWaitResult rlt = igp.waitForArray(lWaitFlags, (long) 120 * 1000);
		if (rlt == ProcessWaitResult.Start) {
			ProcessStatus ps = igp.getStatus();
			if (ps == ProcessStatus.Started) {
				log.info("runProcess is success");
			}
		}
		igs.close();
		return result;
	}

	public synchronized long stopVm() {
		if (null == machine) {
			log.error("Cannot find machine: " + vboxName);
			return -1;
		}
		long result = 0;
		MachineState state = machine.getState();
		try {
			if (MachineState.PoweredOff != state) {
				if(MachineState.Running == state){
					if(session.getState() == SessionState.Locked){
						session.unlockMachine();
					}
					machine.lockMachine(session, LockType.Shared);
				}
				IProgress progress = session.getConsole().powerDown();
				progress.waitForCompletion(10000);
				result = progress.getResultCode();
				if (0 != result) {
					log.error("machine " + vboxName + " error: "
							+ getVBProcessError(progress));
					return -1;
				} else {
					log.info("machine " + vboxName + " stopped");
				}
			}
			while(session.getState() == SessionState.Locked){
				Thread.sleep(500);
			}
			machine.lockMachine(session, LockType.Shared);
			ISnapshot iSnap = machine.getCurrentSnapshot();
			IConsole iCon = session.getConsole();
			IProgress iProg = iCon.restoreSnapshot(iSnap);
			if (!waitProgressCompletion(iProg)) {
				log.warn("Cannot restoreSnapshot VM!");
			}
			log.info("restoreSnapshot " + vboxName + "sucessed");
		} catch (Exception e) {
			e.printStackTrace();
			log.error("restoreSnapshot is error : " + e.getMessage());
			return -1;
		} finally {
			session.unlockMachine();
		}
		return result;
	}

	private String getVBProcessError(IProgress progress) {
		if (0 == progress.getResultCode()) {
			return "";
		}

		StringBuilder sb = new StringBuilder("");
		IVirtualBoxErrorInfo errInfo = progress.getErrorInfo();
		while (null != errInfo) {
			sb.append(errInfo.getText());
			sb.append("\n");
			errInfo = errInfo.getNext();
		}
		return sb.toString();
	}

	private boolean waitProgressCompletion(IProgress iProg) {
		iProg.waitForCompletion(10000); // give the process 10 secs
		if (iProg.getResultCode() != 0)
			return false;
		return true;
	}

 

 

分享到:
评论

相关推荐

    C#调用JavaWebService

    调用WebService,最简单的办法当然是直接添加WEB引用,然后自动产生代理类,但是在调用JAVA的WebService时并没有这么简单,特别是对于SoapHeader的处理,通过C#添加Web引用方式访问JavaWebService的方法,除了string...

    java webService接口开发案例

    Java WebService接口开发是将Java应用程序暴露为网络服务的一种方式,允许不同系统间的数据交换和交互。本案例将深入探讨如何使用Java实现Web服务的创建、发布和调用。 一、理解WebService WebService是一种基于...

    delphi调用Java webservice实例

    标题 "Delphi调用Java WebService实例" 涉及的是在Delphi编程环境中如何与Java WebService进行交互的技术。Delphi是一款强大的Windows应用程序开发工具,而Java WebService则是一种基于标准的,跨平台的远程调用技术...

    java Webservice

    Java WebService是一种基于标准的、平台无关的通信方式,它允许不同系统间的应用程序进行交互,主要依赖于SOAP(Simple Object Access Protocol)协议和WSDL(Web Services Description Language)。本教程将带你...

    java 利用webservice传输文件

    在“java 利用webservice传输文件”的场景中,JACOB可能被用来执行以下任务: 1. **文件操作**:Windows系统有许多内置的COM组件,如Scripting.FileSystemObject,可用于读写文件、创建目录等。通过JACOB,Java程序...

    .net调用java WebService

    ### .NET调用Java WebService的关键知识点 #### 一、背景与原理介绍 在实际的软件开发过程中,不同技术栈之间的交互变得越来越普遍。对于.NET应用程序来说,有时需要调用由Java开发的WebService。这种跨平台的服务...

    VirtualBox SDK

    SDK文档主要面向开发者,提供了编程接口和API(Application Programming Interface)的详细说明,使开发者能够在应用程序中整合或控制VirtualBox的功能。 在内容结构上,文档首先介绍了VirtualBox的模块化设计,...

    调用 java webservice 的问题

    调用Java WebService的问题在IT领域中颇为常见,尤其是在跨平台、跨语言的环境中,如C#调用Java WebService。以下将详细解析这一过程中的关键知识点,包括WebService的架构原理、工具选择(如Axis2)、数据类型转换...

    java webservice

    Java WebService是一种基于标准的、平台无关的通信方式,它允许不同系统间的应用程序进行交互。在Java中,WebService主要通过SOAP(Simple Object Access Protocol)协议进行数据交换,使用WSDL(Web Services ...

    c#调用Java webService的专题(一)

    本文将深入探讨如何使用C#调用Java WebService,这是实现.NET与Java平台间互操作性的一个重要方式。我们将首先理解WebService的基本概念,然后详细讲解C#中如何通过.NET Framework的SOAP客户端代理类来调用Java ...

    java webservice 详细开发示例介绍

    ### Java WebService 详细开发示例介绍 #### 一、引言 随着互联网技术的发展,分布式系统的构建变得越来越重要。WebService作为一种实现系统间通信的重要手段,被广泛应用于各种场景之中。本文将详细介绍Java中...

    Java WebService 简单实例 方式一(生成类文件方式)

    ### Java WebService 简单实例 方式一(生成类文件方式) #### 一、概述 在本篇文章中,我们将详细介绍如何通过生成类文件的方式来创建一个简单的 Java WebService 应用程序。这种方式非常适合初学者理解和实践 ...

    Java WebService入门实例

    Java WebService 是一种基于标准协议(如SOAP,WSDL)的跨平台、跨语言的通信机制,用于构建可互操作的分布式系统。本篇将详细介绍Java WebService的入门实例,包括其工作原理以及如何创建和测试一个简单的...

    java webservice实例教程PPT

    java webservice实例教程ppt,共15讲,java webservice实例教程适合对象:想要学习SOA面向服务编程思想,学习Webservice技术,希望学习系统间通信设计的Java设计开发人员。java webservice实例教程适合于各个层次的...

    javawebservice例子.pdf

    Java WebService是一个基于标准的,用于构建分布式应用程序的开放平台,它允许不同系统间的应用程序通过网络交换数据和服务。本例子将介绍如何使用Apache Axis来创建和消费Java WebService。 首先,确保你拥有J2SE ...

    java Webservice 简单实例

    Java WebService 简单实例教程 在Java开发中,WebService是一种常见的用于应用程序间通信的技术。它基于标准的XML(可扩展标记语言)和WSDL(Web服务描述语言)进行数据交换,允许不同平台和语言的应用程序之间共享...

    Java webservice cxf客户端调用demo和服务端

    Java WebService CXF客户端调用和服务端的实现是企业级应用程序中常见的通信方式,它基于标准的SOAP(Simple Object Access Protocol)协议,提供了一种在分布式环境中交换信息的方法。CXF是一个开源框架,它简化了...

    java调用json参数的webservice

    在探讨Java调用带有JSON参数的WebService之前,我们首先需要了解几个关键的技术概念:Java、JSON以及WebService。 Java是一种广泛使用的编程语言,它具有面向对象、跨平台、多线程以及健壮性等特点。Java在企业级...

    java调用webservice.zip

    java调用webservicejava调用webservice.zipjava调用webservice.zipjava调用webservice.zipjava调用webservice.zipjava调用webservice.zipjava调用webservice.zipjava调用webservice.zipjava调用webservice.zipjava...

    Java Webservice Axis2 Client(含soapheader验证)

    总之,Java Webservice Axis2 Client的开发涉及到生成客户端代码、设置SOAP Header、调用服务和处理响应等多个步骤。了解这些概念和API对于构建安全、可靠的Web服务客户端至关重要。在实际项目中,确保遵循最佳实践...

Global site tag (gtag.js) - Google Analytics