Early work by two of the current authors on Java MPI bindings is reported in. In these papers we compared various approaches to parallel programming in Java, including sockets and MPI programming. A comparable approach to creating full Java
MPI interfaces is used by JCI, the Java-to-C interface generator. In JCI, Java wrappers are automatically generated from the C MPI header. This eases the implementation work, but does not lead to a fully object-oriented API.
MPIJ is a completely Java-based implementation of MPI which runs as part of the Distributed Object Group Metacomputing Architecture (DOGMA). Being closely modelled on the MPI-2 C++ bindings, MPIJ implements a large subset of MPI functionality. MPIJ communication uses native marshalling of primitive Java types. This technique allows MPIJ to achieve communications speeds comparable with native MPI implementations. jmpi is an MPI environment built upon JPVM, a Java-based implementation of PVM. jmpi, offers a full Java API to MPI 1.1 as well as features such as thread safety and multiple communication end-points per task. jmpi is a pure Java MPI environment, but is complicated by the need to call JPVM methods. Another recently announced Java MPI interface, called JavaWMPI, is built upon the Windows MPI environment WMPI. JavaWMPI has a very similar in structure to mpiJava, but the syntax of the interface is less object-oriented and a procedural method is used to perform polymorphism between Java datatypes.
MPI Software Technology, Inc. has also announced their intention to deliver a commercial Java interface to MPI called JMPI. Java implementations of the related PVM message-passing environment have been reported by Yalamanchilli et. al. and The MPI Forum. Many of the above-mentioned groups, as part of the Java Grande forum activities, have recently published a position paper in an attempt to standardise on a single API.