[zeromq-dev] Java API is not notifed of C++ assert failures.

Martin Sustrik sustrik at fastmq.com
Mon Mar 30 10:40:31 CEST 2009

Hi Vladimir,

> My spec can be summarized as follows. I have an iterative process; for each
> iteration (1) distribute a large amount of computation amongst a set of
> machies; (2) the computation has a small amount of dependencies, so I need a
> more sophisticated load balancing algorithm than the round robin algorithm
> in the butterfly example; (3) the number of machines can increase and
> decrease at each iteration, and the load balancing algorithm should respond
> to such events.
> To achieve this, I want to use existing components as much as possible. I do
> not have the resources to re-invent everything. On the other hand, I do not
> expect to find all the features I need in one product, so I am willing to
> build some functionality myself. I do not mind that 0MQ is designed to be a
> queing system and I may not be using it in the conventional way.

Ok, clear. Understood.

> Same thing for the JNI interace into 0MQ. I have modified a few of the
> project files in the following way:
> Jzmq.java - I moved this class from the default package to the org.zeromq
> package; this entailed creating the org/zeromq directory structure in the
> libjzmq directory and moving the file to that directory.

Moving jzmq to org.zeromq package makes sense. I've created a ticket for 
it (ZMQ-226). It'll get into the trunk only post 0.6 release though.

> I also explicitly
> loaded both libzmq and jzmq libraries since Windows does not always find the
> dependent libraries.

Hm. Have you seen it make any difference? libzmq is a standard DLL (not 
a Java one) so it should be found on system path.

Does doing it this way mean that the library is looked for on java 
classpath? And if so, is it a right thing to do?

> Finally, I modified the signatures of all exposed
> functions to match the modified signatures of the C++ wrapper (see below).
> Jzmq.cpp - to allow execution of send and receive on different application
> threads, I modified the context_t structure to contain an array of pointers
> to an api_thread_t instead of one pointer to an api_thread_t. Now construct
> takes one more argument - the number of application threads that is used to
> allocate the memory for the array of thread proxies. To all other functions
> I added the api_thread_id used to perform the operation on.

Ack. We'll add something like this to the API later on, however, I would 
prefer encapsulating each API thread into a separate object rather then 
passing ID to each method. It looks somehow more neat.

> As a result of changing the directory structure I also needed to change the
> libjzmq.vcproj file. I am attaching all modified files in case you want to
> put them in SVN. You may wish to add comments, assertions, etc.

As to be able to use your code you have to submit it under MIT license.

> These changes seem to be consistent with your implementation philosophy (app
> designer is in control). One has to be very careful which api thread ids one
> uses when doing all these operations, but now I indeed get all replies:
> 17:48:21,069  INFO Process:89 - Sending: sim 0
> 17:48:21,069  INFO Process:114 - Received: dispatcher echo: sim
> 0
> 17:48:23,072  INFO Process:89 - Sending: sim 1
> 17:48:23,072  INFO Process:114 - Received: dispatcher echo: sim
> 1
> 17:48:25,085  INFO Process:89 - Sending: sim 2
> 17:48:25,085  INFO Process:114 - Received: dispatcher echo: sim
> 2
> 17:48:27,088  INFO Process:89 - Sending: sim 3
> 17:48:27,108  INFO Process:114 - Received: dispatcher echo: sim
> 3

Nice :)


More information about the zeromq-dev mailing list