The modularity of jSCSI is represented by its module structure. Fully mavenized, the functionality are split into different modules depending on each other.
The denoted figure represents the project structure of jSCSI:
- All common functionalities for parsing are handles over a commons-bundle. These functionalities include the parsing of PDUs as well as common exceptions. The centralized handling of such functionalities guarantee a similar behavior of the target and the initiator including application which depend on those.
- The initiator is handled over a depending module. Its applicability as library depending on the commons-bundle offers easy access to (nearly) any target instance. All functionality necessary to work with iSCSI-targets is provided by this bundle.
- Examples of utilization of such functionalities is provided by the initiator extensions: At the moment the initiator offer ways to implement a storage pool similar to those provided via ZFS or LVM. Another example is an eclipse-plugin for visualization of blocks.
- Besides the initiator and its implementing services, jSCSI offers a target as well. The current implementation works as demon thread as well as library leveraging from the common functionalities from the commons-bundle.
- The target itself has the ability to act as a base for further implementations similar to the initiator. At the moment, the target extensions include (only) a SCSI-layer provided by Cleversafe.
The presented overall structure is reflected by the maven bundles. Detailed information about the utilization, the technical implementation as well as documentation is provided by the websites of the bundles initiator, target and commons.
Please note, that parts of the project are neither supported nor further developed. Since jSCSI acts as a base for student projects as well as for other projects, the following projects are concluded and frozen.
The design and implementation of the storage pool was a bachelors project by Bastian Lemke. The idea was to implement a jSCSI-based layer for combining targets similar to the volume manager provided by ZFS or LVM as shown in the following figure.
A detailed description is available as bachelor thesis of Bastian Lemke (unfortunately in German only).
Another application for the initiator is the visualization of blocks. Resulting in an Eclipse plugin, block access pattern are visualized like denoted in the following figure.
A detailed description is available as InfoVis Poster.
Since jSCSI acted as component within the Dispersed Storage from Cleversafe, Clefersafe contributed a SCSI-layer to jSCSI. This layer maps SCSI-commands to Java offering native support for SCSI-devices. More information about the Dispersed Storage can be found under the website of the WSJ Cleversafe won with their approach.