iSCSI defines a server-client protocol for block-based data transmission whereas the client is denoted as initiator while the server is called target. This bundle represents the client denoted initiator for the rest of the documentation.
The most recent description of the framework is a TechReport.
The interface of the jSCSI initiator is easy similar to common byte-based interfaces well known from the java.io-package. The configuration can take place either over Java directly or over defined XML-files validated against given schemas. After connecting to any target, the initiator is able to read/write chunks of bytes directly out of Java to any target while offering other convenience methods fully compliant to the iSCSI RFC 3720.
The jSCSI-initiator represents a plain-java based adapter for accessing iSCSI-targets directly out of your Java environment. By leveraging from the concurrency-features of Java 5+, jSCSI provides easy, fail-safe and transparent Multi-Connection per Session as well as Multi-Session functionality as denoted in the figure below:
As clearly visible, jSCSI offers the ability to either open multiple sessions to one target as well as to handle multiple connections per session. It is important to note, that the multi-threaded ability of jSCSI is only utilized after login when accessing any target for read-/write-purposes.
The jSCSI-initiator was tested with the Linux ISCSI Enterprise Target as well as with the jSCSI-target. A Wireshark pcab with the IET can be found here whereas a Wireshark pcab with our own target can be found here.
jSCSI was created at the University of Konstanz at the Distributed Systems Group out of the necessity to provide an architecture for storing blocks directly out of Java without any hassle of filesystems.