Quantcast
Channel: VMware Communities : Popular Discussions - VIX API
Viewing all articles
Browse latest Browse all 34639

Problem about using JNI to call Vix API?

$
0
0

Hi All,

 

I used JNI to call Vix API base on Fedora 7 OS. Bug I have a problem when running the program. Here is the exception message:

"Exception in thread "main" java.lang.UnsatisfiedLinkError: vixHostConnect

        at VixNative.vixHostConnect(Native Method)

        at VixNative.main(VixNative.java:79)"[/b]. It seems the java code can't wrap to the c function Java_VixNative_vixHostConnect[/b].

 

here is the code:

//VixNative.java

public class VixNative {

      

     public native static int vixHostConnect(

               String hostName,

               String userName,

               String password,

               int portNumber

     );

      

     public native static void vixHostDisconnect(

               int handle

     );

      

     public native static void vixHostRegisterVM(

               int hostHandle,

               String configFile

     );

      

     public native static void vixHostUnregisterVM(

               int hostHandle,

               String configFile

     );

      

     public native static int vixVMOpen(

               int hostHandle,

               String configFile

     );

      

     public native static void vixVMPowerOn(

               int vmHandle

     );

      

     public native static void vixVMPowerOff(

               int vmHandle

     );

      

     public native static void vixVMSuspend(

               int vmHandle

     );

      

     public native static void vixVMReset(

               int vmHandle

     );

      

     public native static void vixVMWaitForToolsInGuest(

               int vmHandle

     );

      

     public native static int vixGetProperties(

               int vmHandle

     );

      

     public native static String vixGetErrorText(

               int err,

               String locale

     );

      

     public native static void vixVMLoginGuest(

               int vmHandle,

               String userName,

               String password

     );

      

     static{

          System.loadLibrary("VixNative");

     }

      

      

     public static void main(String[] args) {

          try{

               int hostHandle = 0;

               int vmHandle = 0;

               hostHandle = VixNative.vixHostConnect("192.168.1.10", "root", "jcmuser", 904);

               vmHandle = VixNative.vixVMOpen(hostHandle, "/root/Documents/Test/VirtualMachines/SupportCases/WinXP Professional/CaseDir_60/SCase_50004/CurrentImage/Windows XP Professional.vmx");

               VixNative.vixVMPowerOn(vmHandle);

               VixNative.vixVMWaitForToolsInGuest(vmHandle);

               VixNative.vixVMLoginGuest(vmHandle, "user", "123");

               //VixNative.VixVMPowerOff(vmHandle);     

          }

          catch(Exception e){

               System.out.println(e.getMessage());

          }

           

     }

      

}

 

//VixNative.c

 

#include "vix.h"

#include "VixNative.h"

 

#include <stdio.h>

 

#ifndef __VixNative__

#define __VixNative__

 

#ifdef __cplusplus

extern "C"

{

#endif

 

JNIEXPORT jint JNICALL Java_VixNative_vixHostConnect (JNIEnv * env, jclass cl, jstring hostName, jstring userName, jstring password, jint portNumber){

     VixHandle hostHandle = VIX_INVALID_HANDLE;

 

     VixHandle jobHandle = VIX_INVALID_HANDLE;

 

     VixError err = VIX_OK;

 

     const char *cHostName = env->GetStringUTFChars(hostName, 0);

 

     const char *cUserName = env->GetStringUTFChars(userName, 0);

 

     const char *cPassword = env->GetStringUTFChars(password, 0);

     jobHandle = VixHost_Connect(

 

          VIX_API_VERSION,

 

          VIX_SERVICEPROVIDER_VMWARE_SERVER,

 

          cHostName, // *hostName,

 

          portNumber, // hostPort,

 

          cUserName, // *userName,

 

          cPassword, // *password,

 

          0, // options,

 

          VIX_INVALID_HANDLE, // propertyListHandle,

 

          NULL, // *callbackProc,

 

          NULL);

 

     err = VixJob_Wait(

 

          jobHandle,

 

          VIX_PROPERTY_JOB_RESULT_HANDLE,

 

          &hostHandle,

 

          VIX_PROPERTY_NONE);

 

     Vix_ReleaseHandle(jobHandle);

 

     if(VIX_OK != err){

 

          hostHandle = 0;

 

     }

 

      

 

     return hostHandle;

}

 

JNIEXPORT void JNICALL Java_VixNative_vixHostDisconnect (JNIEnv* env, jclass cl, jint hostHandle){

     VixHost_Disconnect(hostHandle);

}

 

JNIEXPORT void JNICALL Java_VixNative_vixHostRegisterVM (JNIEnv* env, jclass cl, jint hostHandle, jstring configFile){

     VixHandle jobHandle = VIX_INVALID_HANDLE;

 

     VixError err = VIX_OK;

 

     const char *cConfigFile = env->GetStringUTFChars(configFile, 0);

 

     jobHandle = VixHost_RegisterVM(

 

          hostHandle,

 

          cConfigFile,

 

          NULL,

 

          NULL);

 

     err = VixJob_Wait(

 

          jobHandle,

 

          VIX_PROPERTY_NONE);

 

     Vix_ReleaseHandle(jobHandle);

}

 

JNIEXPORT void JNICALL Java_VixNative_vixHostUnregisterVM (JNIEnv* env, jclass cl, jint hostHandle, jstring configFile){

     VixHandle jobHandle = VIX_INVALID_HANDLE;

 

     VixError err = VIX_OK;

 

     const char *cConfigFile = env->GetStringUTFChars(configFile, 0);

 

     jobHandle = VixHost_UnregisterVM(

 

          hostHandle,

 

          cConfigFile,

 

          NULL,

 

          NULL);

 

     err = VixJob_Wait(

 

          jobHandle,

 

          VIX_PROPERTY_NONE);

 

     Vix_ReleaseHandle(jobHandle);

}

 

JNIEXPORT jint JNICALL Java_VixNative_vixVMOpen (JNIEnv* env, jclass cl, jint hostHandle, jstring configFile){

     VixHandle jobHandle = VIX_INVALID_HANDLE;

 

     VixHandle vmHandle = VIX_INVALID_HANDLE;

 

     VixError err = VIX_OK;

 

     const char *cConfigFile = env->GetStringUTFChars(configFile, 0);

 

     jobHandle = VixVM_Open(

 

          hostHandle,

 

          cConfigFile,

 

          NULL,

 

          NULL);

 

     err = VixJob_Wait(

 

          jobHandle,

 

          VIX_PROPERTY_JOB_RESULT_HANDLE,

 

          &vmHandle,

 

          VIX_PROPERTY_NONE);

 

     Vix_ReleaseHandle(jobHandle);

 

     if(VIX_OK != err){

 

          vmHandle = 0;

 

     }

 

     return vmHandle;

}

 

JNIEXPORT void JNICALL Java_VixNative_vixVMPowerOn (JNIEnv* env, jclass cl, jint vmHandle){

     VixHandle jobHandle = VIX_INVALID_HANDLE;

 

     VixError err = VIX_OK;

 

     jobHandle = VixVM_PowerOn(vmHandle,VIX_HOSTOPTION_USE_EVENT_PUMP,VIX_INVALID_HANDLE,NULL,NULL);

 

        err = VixJob_Wait(jobHandle, VIX_PROPERTY_NONE);

 

        Vix_ReleaseHandle(jobHandle);

}

 

JNIEXPORT void JNICALL Java_VixNative_vixVMPowerOff (JNIEnv* env, jclass cl, jint vmHandle){

     VixHandle jobHandle = VIX_INVALID_HANDLE;

 

     VixError err = VIX_OK;

 

     jobHandle = VixVM_PowerOff(

 

          vmHandle,

 

          VIX_VMPOWEROP_NORMAL,

 

          NULL, // *callbackProc,

 

          NULL);

 

        err = VixJob_Wait(jobHandle, VIX_PROPERTY_NONE);

 

        Vix_ReleaseHandle(jobHandle);

}

 

JNIEXPORT void JNICALL Java_VixNative_vixVMSuspend (JNIEnv* env, jclass cl, jint vmHandle){

     VixHandle jobHandle = VIX_INVALID_HANDLE;

 

     VixError err = VIX_OK;

 

     jobHandle = VixVM_Suspend(

 

          vmHandle,

 

          VIX_VMPOWEROP_NORMAL,

 

          NULL, // *callbackProc,

 

          NULL);

 

        err = VixJob_Wait(jobHandle, VIX_PROPERTY_NONE);

 

        Vix_ReleaseHandle(jobHandle);

}

 

JNIEXPORT void JNICALL Java_VixNative_vixVMReset (JNIEnv* env, jclass cl, jint vmHandle){

     VixHandle jobHandle = VIX_INVALID_HANDLE;

 

     VixError err = VIX_OK;

 

     jobHandle = VixVM_Reset(

 

          vmHandle,

 

          VIX_VMPOWEROP_NORMAL,

 

          NULL, // *callbackProc,

 

          NULL);

 

        err = VixJob_Wait(jobHandle, VIX_PROPERTY_NONE);

 

        Vix_ReleaseHandle(jobHandle);

}

 

JNIEXPORT void JNICALL Java_VixNative_vixVMWaitForToolsInGuest (JNIEnv* env, jclass cl, jint vmHandle){

     VixHandle jobHandle = VIX_INVALID_HANDLE;

 

     VixError err = VIX_OK;

 

     jobHandle = VixVM_WaitForToolsInGuest(

 

          vmHandle,

 

          300,

 

          NULL,

 

          NULL);

 

     err = VixJob_Wait(jobHandle, VIX_PROPERTY_NONE);

 

     Vix_ReleaseHandle(jobHandle);

}

 

JNIEXPORT jint JNICALL Java_VixNative_vixGetProperties (JNIEnv* env, jclass cl, jint vmHandle){

     VixHandle jobHandle = VIX_INVALID_HANDLE;

 

     VixError err = VIX_OK;

 

     VixHandle vmState = VIX_INVALID_HANDLE;

 

     jobHandle = Vix_GetProperties(

 

          vmHandle,

 

          VIX_PROPERTY_JOB_RESULT_HANDLE,

 

          &vmState,

 

          VIX_PROPERTY_NONE);

 

        Vix_ReleaseHandle(jobHandle);

 

     return vmState;

}

 

JNIEXPORT jstring JNICALL Java_VixNative_vixGetErrorText (JNIEnv* env, jclass cl, jint err, jstring cLocale){

     const char * cLocale = env->GetStringUTFChars(locale, 0);

 

     jstring errText = env->NewStringUTF(Vix_GetErrorText(err, cLocale));

 

     return errText;

}

 

JNIEXPORT void JNICALL Java_VixNative_vixVMLoginGuest (JNIEnv* env, jclass cl, jint vmHandle, jstring userName, jstring password){

     VixHandle jobHandle = VIX_INVALID_HANDLE;

 

     VixError err = VIX_OK;

     const char *cUserName = env->GetStringUTFChars(userName, 0);

 

     const char *cPassword = env->GetStringUTFChars(password, 0);

     jobHandle = VixVM_LoginInGuest(vmHandle, cUserName, cPassword, 0, NULL, NULL);

     err = VixJob_Wait(jobHandle, VIX_PROPERTY_NONE);

     Vix_ReleaseHandle(jobHandle);

}

 

#ifdef __cplusplus

}

#endif

 

#endif /* __VixNative__ */

 

I used the following command to compile the c code. I copied all files which are needed  to current directory.

gcc -shared -o libVixNative.so VixNative.c /usr/lib/libvmware-vix.so.0[/b]

 

I thought it may be the compile command problem. Because the java code can load the VixNative library, but can't find the c functions.

 

Could any body help me?

 

Thanks.


Viewing all articles
Browse latest Browse all 34639

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>