JSOR native interoperability (Linux only)

You can use JSOR to communicate between a Java™ application and a native application such as a remote database server. There is also limited support for native applications that want to use the fork() function.

Note: The RDMA implementation is deprecated and will likely be removed in a future release of IBM® SDK, Java Technology Edition, Version 8. A possible alternative is the open source Libfabric library.
You must first ensure that the native application is using the RSockets protocol, by using one of the following methods:
  • Preload the existing native application that uses the TCP/IP protocol for communication with the native RSockets preloading library
  • Write the native application by using RSockets APIs, then link against the RSockets native library.
This diagram shows JSOR native interoperability. Two sides of a communication channel are linked by an RDMA conduit. On the Java side, a Java client or server application is at the top of the stack. To interact with the RDMA conduit, the application uses the following components in turn: the JSOR feature in the product, the JSOR library, and the User Verbs library. On the native side, a native client or server application is at the top of the stack. This application can use either the TCP/IP protocol or the RSockets protocol. If the application uses the TCP/IP protocol, it interacts with the RDMA conduit by using the following components in turn: the RSockets preload library, and the RSockets library sitting on top of the User Verbs library. If the native application uses the RSockets protocol, it interacts with the RDMA conduit in the same way, except that is does not need to use the RSockets preload library.

Dynamic preloading is an operating-system-specific facility where regular TCP/IP socket calls are intercepted and replaced by the equivalent RDMA socket calls for talking to remote applications through the RDMA path. This remote application could be a JSOR-enabled Java application. Because JSOR is derived from the RSockets protocol, the protocol matches and communication is seamless. For more information about using RSockets for native interoperability, see Enabling JSOR communication between a Java application and a native application (Linux only).

Support for the fork() function

On a native server system you can enable fork support by setting the environment variable RDMAV_FORK_SAFE=1. When enabled, the RSockets pre-loading library converts a plain socket into an RDMA socket only when the first data transfer call is made. On the client system you must set the system property -Dcom.ibm.net.rdma.nativeForkCompatibility=true. When set, the client connects and synchronizes with the native server before switching to RDMA mode. For more information about this property, see -Dcom.ibm.net.rdma.nativeForkCompatibility (Linux only).