[libvirt-users] java binding and virtualbox-ose

Bryan Kearney bkearney at redhat.com
Mon Nov 15 18:43:40 UTC 2010


On 11/15/2010 04:58 AM, Andrea Turli wrote:
> Matthias,
>
> On 11/14/2010 11:47 PM, Matthias Bolte wrote:
>> 2010/11/14 Andrea Turli<andrea.turli at eng.it>:
>>> I'm trying to connect to vbox hypervisor on an Ubuntu 10.04 machine
>>> through libvirt java binding (libvirt-java-0.4.6) by simply invoking:
>>>
>>> Connect conn = new Connect("vbox:///session", false);
>>> but I got this exception:
>>>
>>> libvir: warning : Failed to find the interface: Is the daemon running ?
>>> libvir: Remote error : unable to connect to
>>> '/var/run/libvirt/libvirt-sock': Connection refused
>>> libvir: warning : Failed to find a node driver: Is the libvirtd
>>> daemon running ?
>>> libvir: Remote error : unable to connect to
>>> '/var/run/libvirt/libvirt-sock': Connection refused
>>> libvir: warning : Failed to find a secret storage driver: Is the
>>> daemon running ?
>>> org.libvirt.LibvirtException: Failed to find a secret storage driver:
>>> Is the daemon running ?
>>> at org.libvirt.ErrorHandler.processError(ErrorHandler.java:28)
>>> at org.libvirt.Connect.<init>(Connect.java:195)
>>> at VBOX.main(VBOX.java:32)
>>>
>> This is a bit tricky and took me a moment to understand.
> Thank you for your time.
>> libvirt's error handling can report warnings. This feature is not used
>> often in libvirt, basically only in the virConnectOpen* functions to
>> report missing subdrivers.
>>
>> The Java bindings now have two problems:
>>
>> 1) The error processing in the bindings is done unconditional, it
>> always checks for an error even if the called function succeeded. Also
>> this results in an unnecessary call to the JNA interface for each
>> successful libvirt call.
>>
>> 2) The error processing raises an exception for all error, even for
>> errors with level VIR_ERR_WARNING.
>>
>> This results in the exception you see. The call to virConnectOpen
>> succeeds but libvirt reports a warning about missing sudrivers and the
>> bindings turn this into an exception.
>>
>> You can apply this workaround to the Java bindings code:
>>
>>
>> diff --git a/src/main/java/org/libvirt/ErrorHandler.java
>> b/src/main/java/org/libvirt/ErrorHandler.java
>> index e30291b..de66518 100644
>> --- a/src/main/java/org/libvirt/ErrorHandler.java
>> +++ b/src/main/java/org/libvirt/ErrorHandler.java
>> @@ -25,7 +25,11 @@ public class ErrorHandler {
>> if (errorCode> 0) {
>> Error error = new Error(vError);
>> libvirt.virResetLastError();
>> - throw new LibvirtException(error);
>> +
>> + /* FIXME: Don't throw exceptions for VIR_ERR_WARNING
>> level errors */
>> + if (error.getLevel() == Error.ErrorLevel.VIR_ERR_ERROR) {
>> + throw new LibvirtException(error);
>> + }
>> }
>> }
>> }
>>
> I've applied this patch and it worked for me. So, do you think we should
> expect this fix in the next release? if yes, is it already scheduled?

The next release has not been scheduled, but I have applied the patch 
upstream.

-- bk




More information about the libvirt-users mailing list