2015-10-18 80 views
0

我使用的XenServer 6.5的XenServer的Java API啓動VM

在Java中,我使用SDK庫

<dependency> 
    <groupId>net.java.dev.vcc.thirdparty</groupId> 
    <artifactId>xen-api</artifactId> 
    <version>6.2.0-3.1</version> 
</dependency> 

然後,我創建我的實例與模板。

VM template = VM.getByNameLabel(connection, templateName).iterator() 
       .next(); 
VM vm = template.createClone(connection, instanceName); 
vm.setIsATemplate(connection, false); 
vm.removeFromOtherConfig(connection, "disks"); 
vm.setNameLabel(connection, instanceName); 
vm.setMemoryStaticMin(connection, new Long(256)); 
vm.setMemoryDynamicMin(connection, new Long(256)); 
vm.setMemoryDynamicMax(connection, new Long(256)); 
vm.setMemoryStaticMax(connection, new Long(256)); 
vm.setVCPUsAtStartup(connection, new Long(1)); 

我創建一個實例後,我嘗試啓動它。

VM vm = VM.getByNameLabel(connection, name).iterator().next(); 
vm.start(connection, false, false); 
System.out.println(vm.getPowerState(connection)); 

但它返回

The server failed to handle your request, due to an internal error. The given message may give details useful for debugging the problem. 
    at com.xensource.xenapi.Types.checkResponse(Types.java:1609) 
    at com.xensource.xenapi.Connection.dispatch(Connection.java:395) 
    at com.xensource.xenapi.VM.start(VM.java:3118) 
    at com.apo.region.vm.XenConnectionsManager.startVM(XenConnectionsManager.java:79) 
    at com.apo.region.controller.VMController.list(VMController.java:36) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:606) 
    at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:221) 
    at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:137) 
    at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:110) 
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandleMethod(RequestMappingHandlerAdapter.java:776) 
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:705) 
    at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85) 
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:959) 
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:893) 
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:967) 
    at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:858) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:624) 
    at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:843) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:731) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122) 
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:505) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103) 
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:957) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:423) 
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1079) 
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:620) 
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:316) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 
    at java.lang.Thread.run(Thread.java:745) 

我在互聯網上搜索,發現 的創造功能沒有對兩個布爾參數:

vm.start(connection); 

但我嘗試不同的版本的Maven:

vm.start(connection, false, false); 

而錯誤信息沒有太多的信息。我錯過了任何步驟?

回答

0

我真的很抱歉回答這麼晚,但我剛剛看到昨天的問題,我希望在回答你之前測試一些東西。
關於內存問題,任何內存設置都是以字節爲單位的,因爲這個參數很長(爲了允許巨大的內存配置)。只有在兩個內存(靜態和動態)中將新VM設置爲512字節,少於Spectrum !
考慮到這一點,我的假設是你的內存限制太低,因爲內存限制(特別是Windows)。在此blog中,可以看到與其他虛擬機管理程序相關的guest虛擬機操作系統的最小/最大內存(但我認爲在Xenserver中是相同的)。
無論如何,這個片段正在爲我工​​作,使用相同的maven依賴,和同樣的xenserver - 6.5 - 與你一樣。
有關vm.start(con,false,false)的更多信息,您可以下載Xenserver 6.5 SDK並查看與VM相關的javadoc。第二個參數是允許在暫停模式下啓動,第三個參數是強制啓動操作。

 try 
     { 
      Connection con = new Connection(new URL(url)); 
      Session.loginWithPassword(con, user, pass); 
      String templateName = "template-test"; 
      String instanceName = "testVM"; 
      VM template = VM.getByNameLabel(con, templateName).iterator().next(); 
      VM vm = template.createClone(con, instanceName); 
      vm.setNameLabel(con, instanceName); 
      //This numbers are upper than required minimum for Windows 7 
      //My Guest OS 
      vm.setMemoryStaticMin(connection, 1073741824L); 
      vm.setMemoryDynamicMin(connection, 4294967296L); 
      vm.setMemoryDynamicMax(connection, 1073741824L);    
      vm.setMemoryStaticMax(connection, 4294967296L); 
      vm.setVCPUsAtStartup(con, 1L); 
      vm.provision(con); 
      VM vm2 = VM.getByNameLabel(con, instanceName).iterator().next(); 
      vm2.start(con, false, false); 
      System.out.println(vm2.getPowerState(con)); 
     } 
     catch (Exception e) 
     { 
      e.printStackTrace(); 
     }