On Tue, 2008-11-18 at 16:51 +0000, Daniel P. Berrange wrote: > On Tue, Nov 18, 2008 at 11:06:10AM -0500, David Lively wrote: > > The attached patch (against libvirt-java) implements Java bindings for > > libvirt domain events. This version provides a libvirt EventImpl > > running in its own Java Thread, and provides per-Connect synchronization > > that makes using the bindings thread-safe. (Note the Domain, Network, > > StoragePool, and StorageVol methods also synchronize on their Connect > > object, as required by libvirt. I have similar changes for > > NodeDevice.java that need to be made when that code is checked in.) > > I don't particularly like the event loop code because it is adding a huge > pile of non-portable JNI code that won't work on Windows, which lacks > pipe() and poll(). Java already provides a portable pure Java API for > building a poll() like event loop in form of NIO. > > http://www.xhaus.com/alan/python/jynio/select.html Yeah, Daniel V and I had briefly considered this, and rejected it on the basis of "it's complicated" and (more importantly) some negative feedback I hear from our Java folks on the java.nio Select mechanism. But I agree the java.nio Select mechanism should greatly decrease the amount of JNI code in the Java EventImpl. I need to look over the docs again, but I think it's "just" a matter of implementing a SelectableChannel on top of a fd. (That JNI code will presumably be very different in Win32 and Unix, but it should be a relatively small amount of JNI code in comparison to my current impl.) So I'll look over the java.nio Select documentation and start thinking about a more portable approach ... (and also talk more with our Java folks about their Select gripes). Dave > The addition of the 'synchronized' annotatioons is something we need > regardless of the rest of the patch, since our API contract dictates > that only a single thread is allowed to use a single virConnectPtr > at once. > > > This version of the patch also implements and uses an enum class > > (DomainEvent.Type), as suggested by Tóth István. > > > > IMPORTANT: THIS PATCH WILL BREAK THINGS UNLESS THE NEXT [PATCH 2/2] IS > > APPLIED TO libvirt FIRST. Also, libvirt must be compiled WITH_PTHREADS > > for Java events to work. > > Daniel -- Libvir-list mailing list Libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list