Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Excerpt

DSpace 2.0 storage mechanism provides convenient way to store DSpace contents in various storage solutions. It is based on set of interfaces for which various implementations are possible and some beta releases already exist (Jackrabbit, Fedora, etc). DSpace 2.0 is in its early stages of development and DSpace 1.x releases yet can not take advantage of this new mechanism. To fix this, it is necessary to port DSpace 2.0 storage interfaces to 1.x. I propose implementing this backport. – Andrius Blažinskas

Relevant modules

...

/classes

Module/class name Module name

Description/Comments

Source code

dspace-api

DSpace API

http://scm.dspace.org/svn/repo/dspace/trunk/dspace-api

dspace-xmlui

XMLUI (Manakin)

http://scm.dspace.org/svn/repo/dspace/trunk/dspace-xmlui

Image Removed

storage-api Yet

non existant module. Will constitute Constitute of DSpace 2 storage interfaces. Will be referenced from dspace-api (dspace-xmlui?). Depending on backporting strategy used, this module may also include additional storage related classes. Currently parts of it (interfaces) located at xmlui and other modules which will use new storage mechanism.

http://scm.dspace.org/svn/repo/

dspace2

modules/

core

dspace-storage/trunk/api

/src/main/java/org/dspace/servicesImage Removed

(/mixins)

storage-default legacy

Yet non existant module. Module will implement storage-api interfaces. Will probably contain classes from dspace-api, such as: DatabaseManager, TableRow, TableRowIterator, BitstreamStorageManager and other code. Some of the affected classes located at Basically it will be the shim allowing modules to access DSpaceObjects (in dspace-api) using new storage-api.

-

dspace-services

DSpace services module. DSpace services framework will be used to manage and gain access to storage-api implementations.

http://scm.dspace.org/svn/repo/modules/dspace-services/

ProvidedStorageService

Class which acts as a mediator between caller and storage service implementations. However, its usage is questionable.

http://scm.dspace.org/svn/repo/modules/dspace-storage/trunk/

dspace-api

impl/src/main/java/org/dspace/

storageImage Removed

services/storage/ProvidedStorageService.java

Development plan

...

  • Analysis of dspace-api
  • Analysis of dspace-services module (http://scm.dspace.org/svn/repo/modules/dspace-services/trunkImage Removed)Analysis of current situation in
  • Better dspace-api (identifying storage related Java classes and references to them)
  • Iterated code refactoring and development:
    1. Identify code fragments which potentialy constitute particular storage-service method in dspace-api
    2. Move these code fragments to storage-default module under particular storage-service interface method name
    3. Retain the relation of dspace-api with storage-default from newly created method perspective through use of storage-api interfaces and perform all neccesary tasks to ensure separated code interoperability
  • Thorough testing of separation, whether the system work the same way it worked before backport (unit tests could be helpfull here)
  • dspace-xmlui relation to storage-service interfaces
  • ...

List of storage-api classes/methods

Classes and methods to be ported. List will evolve.

Interface/Class name

Method name

Description/Comments

StorageBase

boolean exists(String entityId)

 

StorageEntity getEntity(String entityId)

 

List<StorageEntity> getEntities(String location)

 

List<String> getEntityLocations(String entityId)

StorageWriteable

String createEntity(StorageEntity storageEntity)

 

boolean deleteEntity(String entityId)

 

void saveMetaProperties(String entityId, StorageProperty... properties)

 

void removeMetaProperties(String entityId, String... names)

 

boolean addEntityLocation(String entityId, String location)

 

void removeEntityLocation(String entityId, String location)

StorageVersionable

List<StorageVersion> getVersions(String reference)

 

StorageEntity getVersion(String reference, String versionName)

StorageCopyable

String copyEntity(String reference, String path, boolean recursive, String newName)

StorageVersionableWriteable

StorageEntity restoreVersion(String reference, String versionName, String label)

 

void setVersionLabel(String reference, String versionName, String label)

StorageSearchable

Is this one needed?

SimpleStorageService

Is this one needed?

Any others?

 

 

Backporting strategies

Changes pending...

Proposed solution

One possible solution could be basically treating dspace-api module as a some sort of dspace-legacy implementation and dspace-legacy module itself will basically be a proxy to a dspace-api. It is advantageous that in this case other modules can be started being recoded to use storage-api without actually breaking whole system. Conceptually, such solution probably is bad, however it is a good "temporary" measure helping in moving DSpace to using storage-api.

Image Added

Elements in red are yet to be implemented.

Evolution of storage-api

Changes pending...

References

GSOC 2010 proposal: Backport of DSpace 2 Storage Services API for DSpace 1.x, http://ab.labt.lt/gsoc/2010/dspace/proposal1.htmlImage Removed