org.eclipse.emf.cdo.server

## Interface IStoreAccessor

- All Superinterfaces:
    InternalCDOBranchManager.BranchLoader, InternalCDOCommitInfoManager.CommitInfoLoader, IQueryHandlerProvider
  All Known Subinterfaces:
    IDBStoreAccessor, ILissomeStoreAccessor, IMongoDBStoreAccessor, IStoreAccessor.Raw, IStoreAccessor.Raw2, IStoreAccessor.UnitSupport
  All Known Implementing Classes:
    LongIDStoreAccessor, StoreAccessor, StoreAccessorBase

      public interface IStoreAccessor
      extends IQueryHandlerProvider, InternalCDOBranchManager.BranchLoader, InternalCDOCommitInfoManager.CommitInfoLoader

  Represents a connection to a physical data storage back-end.
  Author:
    Eike Stepper

- - ### Nested Class Summary

    Nested Classes
    Modifier and Type | Interface and Description
    --- | ---
    `static interface` | `IStoreAccessor.CommitContext` Represents the state of a single, logical commit operation which is driven through multiple calls to several methods on the `IStoreAccessor` API.
    `static interface` | `IStoreAccessor.DurableLocking` An extension interface for `store accessors` that support durable locking.
    `static interface` | `IStoreAccessor.DurableLocking2` An extension interface for `store accessors` that support durable locking.
    `static interface` | `IStoreAccessor.QueryResourcesContext` Represents the query execution state of a `resources query`.
    `static interface` | `IStoreAccessor.QueryXRefsContext` Represents the query execution state of a `XRefs query`.
    `static interface` | `IStoreAccessor.Raw` An extension interface for `store accessors` that support raw data access as needed by `repository synchronizers` or `server importers`.
    `static interface` | `IStoreAccessor.Raw2` An extension interface for `store accessors` that support raw data access as needed by `repository synchronizers` or `server importers`.
    `static interface` | `IStoreAccessor.UnitSupport` An extension interface for `store accessors` that support units.

    - ### Nested classes/interfaces inherited from interface org.eclipse.emf.cdo.spi.common.branch.InternalCDOBranchManager.BranchLoader

      `InternalCDOBranchManager.BranchLoader.BranchInfo, InternalCDOBranchManager.BranchLoader.SubBranchInfo`

  - ### Field Summary

    - ### Fields inherited from interface org.eclipse.emf.cdo.spi.common.branch.InternalCDOBranchManager.BranchLoader

      `NEW_BRANCH, NEW_LOCAL_BRANCH`

  - ### Method Summary

    All Methods Instance Methods Abstract Methods
    Modifier and Type | Method and Description
    --- | ---
    `void` | `commit(OMMonitor monitor)` Flushes to the back-end and makes available the data for others.
    `IStoreChunkReader` | `createChunkReader(InternalCDORevision revision, EStructuralFeature feature)`
    `InternalSession` | `getSession()` Returns the session this accessor is associated with.
    `IStore` | `getStore()` Returns the store this accessor is associated with.
    `ITransaction` | `getTransaction()` Returns the transaction this accessor is associated with if `isReader()` returns `false`, `null` otherwise.
    `void` | `handleLobs(long fromTime, long toTime, CDOLobHandler handler)`
    `void` | `handleRevisions(EClass eClass, CDOBranch branch, long timeStamp, boolean exactTime, CDORevisionHandler handler)` Passes all revisions of the store to the `handler` if all of the following conditions are met: The `eClass` parameter is `null` or equal to `revision.getEClass()`.
    `boolean` | `isReader()` Returns `true` if this accessor has been configured for read-only access to the back-end, `false` otherwise.
    `void` | `loadLob(byte[] id, java.io.OutputStream out)` Serializes the content of the large object identified by the given `ID` to the given stream.
    `EPackage[]` | `loadPackageUnit(InternalCDOPackageUnit packageUnit)` Demand loads a given package proxy that has been created on startup of the repository.
    `void` | `queryLobs(java.util.List<byte[]> ids)` Determines which of the large objects identified by the given `IDs` are known in the backend represented by this `IStoreAccessor` by removing the unknown IDs from the passed collection.
    `void` | `queryResources(IStoreAccessor.QueryResourcesContext context)`
    `void` | `queryXRefs(IStoreAccessor.QueryXRefsContext context)`
    `java.util.Set<CDOID>` | `readChangeSet(OMMonitor monitor, CDOChangeSetSegment... segments)` Returns a set of CDOIDs that have at least one revision in any of the passed branches and time ranges.
    `java.util.Collection<InternalCDOPackageUnit>` | `readPackageUnits()`
    `CDOID` | `readResourceID(CDOID folderID, java.lang.String name, CDOBranchPoint branchPoint)` Returns the `CDOID` of the resource node with the given folderID and name if a resource with this folderID and name exists in the store, `null` otherwise.
    `InternalCDORevision` | `readRevision(CDOID id, CDOBranchPoint branchPoint, int listChunk, CDORevisionCacheAdder cache)` Reads a revision from the back-end that was valid at the given timeStamp in the given branch.
    `InternalCDORevision` | `readRevisionByVersion(CDOID id, CDOBranchVersion branchVersion, int listChunk, CDORevisionCacheAdder cache)` Reads a revision with the given version in the given branch from the back-end.
    `void` | `release()`
    `void` | `rollback()` Note: `write(InternalCommitContext, OMMonitor)` and `rollback()` could be called from different threads.
    `void` | `write(InternalCommitContext context, OMMonitor monitor)` Called before committing.
    `void` | `writePackageUnits(InternalCDOPackageUnit[] packageUnits, OMMonitor monitor)`

    - ### Methods inherited from interface org.eclipse.emf.cdo.server.IQueryHandlerProvider

      `getQueryHandler`

    - ### Methods inherited from interface org.eclipse.emf.cdo.spi.common.branch.InternalCDOBranchManager.BranchLoader

      `createBranch, loadBranch, loadBranches, loadSubBranches`

    - ### Methods inherited from interface org.eclipse.emf.cdo.spi.common.commit.InternalCDOCommitInfoManager.CommitInfoLoader

      `loadCommitData, loadCommitInfos`

- - ### Method Detail

    - #### getStore

          IStore getStore()

      Returns the store this accessor is associated with.

    - #### getSession

          InternalSession getSession()

      Returns the session this accessor is associated with.
      Since:
        3.0

    - #### getTransaction

          ITransaction getTransaction()

      Returns the transaction this accessor is associated with if `isReader()` returns `false`, `null` otherwise.
      Since:
        2.0

    - #### isReader

          boolean isReader()

      Returns `true` if this accessor has been configured for read-only access to the back-end, `false` otherwise.
      Since:
        2.0

    - #### createChunkReader

          IStoreChunkReader createChunkReader(InternalCDORevision revision,
                                              EStructuralFeature feature)

      Since:
        2.0

    - #### readPackageUnits

          java.util.Collection<InternalCDOPackageUnit> readPackageUnits()

      Since:
        2.0

    - #### loadPackageUnit

          EPackage[] loadPackageUnit(InternalCDOPackageUnit packageUnit)

      Demand loads a given package proxy that has been created on startup of the repository.

      This method must only load the given package, not possible contained packages.

      Since:
        2.0

    - #### readRevision

          InternalCDORevision readRevision(CDOID id,
                                           CDOBranchPoint branchPoint,
                                           int listChunk,
                                           CDORevisionCacheAdder cache)

      Reads a revision from the back-end that was valid at the given timeStamp in the given branch.
      Since:
        4.0

    - #### readRevisionByVersion

          InternalCDORevision readRevisionByVersion(CDOID id,
                                                    CDOBranchVersion branchVersion,
                                                    int listChunk,
                                                    CDORevisionCacheAdder cache)

      Reads a revision with the given version in the given branch from the back-end.
      Since:
        4.0

    - #### handleRevisions

          void handleRevisions(EClass eClass,
                               CDOBranch branch,
                               long timeStamp,
                               boolean exactTime,
                               CDORevisionHandler handler)

      Passes all revisions of the store to the `handler` if all of the following conditions are met:
      - The `eClass` parameter is `null` or equal to `revision.getEClass()`.
      - The `branch` parameter is `null` or equal to `revision.getBranch()`.
      - One of the following conditions is met:
        - The `timeStamp` parameter is `INVALID`.
        - The `exactTime` parameter is `true` and the `timeStamp` parameter is `UNSPECIFIED` or equal to `revision.getTimeStamp()`.
        - The `exactTime` parameter is `false` and the `timeStamp` parameter is between `revision.getTimeStamp()` and `revision.getRevised()`.
      Since:
        4.0

    - #### readChangeSet

          java.util.Set<CDOID> readChangeSet(OMMonitor monitor,
                                             CDOChangeSetSegment... segments)

      Returns a set of CDOIDs that have at least one revision in any of the passed branches and time ranges. DetachedCDORevisions must also be considered!
      Since:
        4.0

    - #### readResourceID

          CDOID readResourceID(CDOID folderID,
                               java.lang.String name,
                               CDOBranchPoint branchPoint)

      Returns the `CDOID` of the resource node with the given folderID and name if a resource with this folderID and name exists in the store, `null` otherwise.
      Since:
        3.0

    - #### queryResources

          void queryResources(IStoreAccessor.QueryResourcesContext context)

      Since:
        2.0

    - #### queryXRefs

          void queryXRefs(IStoreAccessor.QueryXRefsContext context)

      Since:
        3.0

    - #### queryLobs

          void queryLobs(java.util.List<byte[]> ids)

      Determines which of the large objects identified by the given `IDs` are known in the backend represented by this `IStoreAccessor` by removing the unknown IDs from the passed collection.

      The identifier of a `large object` is the SHA-1 digest of the content of this large object.

      Usage context: This method is only called in the context of a commit operation of a client transaction if that transaction contains additions of or changes to large objects.

      Parameters:
        `ids` - the collection of large object IDs that the unknown IDs are supposed to be removed from.
      Since:
        4.0

    - #### loadLob

          void loadLob(byte[] id,
                       java.io.OutputStream out)
                throws java.io.IOException

      Serializes the content of the large object identified by the given `ID` to the given stream.

      The identifier of a `large object` is the SHA-1 digest of the content of this large object.

      Parameters:
        `id` - the ID of the large object whose content is to be written to the stream.
      Throws:
        `java.io.IOException` - if the stream could not be written to.
      Since:
        4.0

    - #### handleLobs

          void handleLobs(long fromTime,
                          long toTime,
                          CDOLobHandler handler)
                   throws java.io.IOException

      Throws:
        `java.io.IOException`
      Since:
        4.0

    - #### writePackageUnits

          void writePackageUnits(InternalCDOPackageUnit[] packageUnits,
                                 OMMonitor monitor)

      Since:
        2.0

    - #### write

          void write(InternalCommitContext context,
                     OMMonitor monitor)

      Called before committing. An instance of this accessor represents an instance of a back-end transaction. Could be called multiple times before commit it called. `commit(OMMonitor)` or `rollback()` will be called after any numbers of `write(InternalCommitContext, OMMonitor)`.

      Note: `write(InternalCommitContext, OMMonitor)` and `commit(OMMonitor)` could be called from different threads.

      Since:
        3.0

    - #### commit

          void commit(OMMonitor monitor)

      Flushes to the back-end and makes available the data for others.

      Note: `write(InternalCommitContext, OMMonitor)` and `commit(OMMonitor)` could be called from different threads.

      Note: Implementors should detect if dirty write occurred. In this case it should throw an exception.

           if (revision.getVersion() != revisionDelta.getOriginVersion())
           {
             throw new ConcurrentModificationException("Trying to update object " + revisionDelta.getID()
                 + " that was already modified");
           }

      Since:
        2.0

    - #### rollback

          void rollback()

      Note: `write(InternalCommitContext, OMMonitor)` and `rollback()` could be called from different threads.
      Since:
        2.0

    - #### release

          void release()

Copyright (c) 2004-2019 Eike Stepper (Loehne, Germany) and others.
All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse Public License v1.0 which accompanies this distribution, and is available at http://www.eclipse.org/legal/epl-v10.html