org.springframework.batch.item.data

## Class AbstractNeo4jItemReader<T>

- java.lang.Object
- - org.springframework.batch.item.ItemStreamSupport
  - - org.springframework.batch.item.support.AbstractItemStreamItemReader<T>
    - - org.springframework.batch.item.support.AbstractItemCountingItemStreamItemReader<T>
      - - org.springframework.batch.item.data.AbstractPaginatedDataItemReader<T>
        - - org.springframework.batch.item.data.AbstractNeo4jItemReader<T>

- All Implemented Interfaces:
    ItemReader<T>, ItemStream, ItemStreamReader<T>, org.springframework.beans.factory.InitializingBean
  Direct Known Subclasses:
    Neo4jItemReader

      public abstract class AbstractNeo4jItemReader<T>
      extends AbstractPaginatedDataItemReader<T>
      implements org.springframework.beans.factory.InitializingBean

  Restartable `ItemReader` that reads objects from the graph database Neo4j via a paging technique.

  It executes cypher queries built from the statement fragments provided to retrieve the requested data. The query is executed using paged requests of a size specified in `AbstractPaginatedDataItemReader.setPageSize(int)`. Additional pages are requested as needed when the `AbstractItemCountingItemStreamItemReader.read()` method is called. On restart, the reader will begin again at the same number item it left off at.

  Performance is dependent on your Neo4J configuration (embedded or remote) as well as page size. Setting a fairly large page size and using a commit interval that matches the page size should provide better performance.

  This implementation is thread-safe between calls to `AbstractItemCountingItemStreamItemReader.open(org.springframework.batch.item.ExecutionContext)`, however you should set `saveState=false` if used in a multi-threaded environment (no restart available).

  Since:
    3.07
  Author:
    Michael Minella

- - ### Field Summary

    Fields
    Modifier and Type | Field and Description
    --- | ---
    `protected org.apache.commons.logging.Log` | `logger`

    - ### Fields inherited from class org.springframework.batch.item.data.AbstractPaginatedDataItemReader

      `page, pageSize, results`

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `AbstractNeo4jItemReader()`

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `void` | `afterPropertiesSet()` Checks mandatory properties
    `protected java.lang.String` | `generateLimitCypherQuery()`
    `protected java.util.Map<java.lang.String,java.lang.Object>` | `getParameterValues()`
    `protected org.neo4j.ogm.session.SessionFactory` | `getSessionFactory()`
    `protected java.lang.Class<T>` | `getTargetType()`
    `void` | `setMatchStatement(java.lang.String matchStatement)` An optional match fragment of the cypher query.
    `void` | `setOrderByStatement(java.lang.String orderByStatement)` A list of properties to order the results by.
    `void` | `setParameterValues(java.util.Map<java.lang.String,java.lang.Object> parameterValues)` Optional parameters to be used in the cypher query.
    `void` | `setReturnStatement(java.lang.String returnStatement)` The return statement of the cypher query.
    `void` | `setSessionFactory(org.neo4j.ogm.session.SessionFactory sessionFactory)` Establish the session factory for the reader.
    `void` | `setStartStatement(java.lang.String startStatement)` The start segment of the cypher query.
    `void` | `setTargetType(java.lang.Class<T> targetType)` The object type to be returned from each call to `AbstractItemCountingItemStreamItemReader.read()`
    `void` | `setWhereStatement(java.lang.String whereStatement)` An optional where fragment of the cypher query.

    - ### Methods inherited from class org.springframework.batch.item.data.AbstractPaginatedDataItemReader

      `doClose, doOpen, doPageRead, doRead, jumpToItem, setPageSize`

    - ### Methods inherited from class org.springframework.batch.item.support.AbstractItemCountingItemStreamItemReader

      `close, getCurrentItemCount, isSaveState, open, read, setCurrentItemCount, setMaxItemCount, setSaveState, update`

    - ### Methods inherited from class org.springframework.batch.item.ItemStreamSupport

      `getExecutionContextKey, setExecutionContextName, setName`

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Field Detail

    - #### logger

          protected org.apache.commons.logging.Log logger

  - ### Constructor Detail

    - #### AbstractNeo4jItemReader

          public AbstractNeo4jItemReader()

  - ### Method Detail

    - #### setParameterValues

          public void setParameterValues(java.util.Map<java.lang.String,java.lang.Object> parameterValues)

      Optional parameters to be used in the cypher query.
      Parameters:
        `parameterValues` - the parameter values to be used in the cypher query

    - #### getParameterValues

          protected final java.util.Map<java.lang.String,java.lang.Object> getParameterValues()

    - #### setStartStatement

          public void setStartStatement(java.lang.String startStatement)

      The start segment of the cypher query. START is prepended to the statement provided and should not be included.
      Parameters:
        `startStatement` - the start fragment of the cypher query.

    - #### setReturnStatement

          public void setReturnStatement(java.lang.String returnStatement)

      The return statement of the cypher query. RETURN is prepended to the statement provided and should not be included
      Parameters:
        `returnStatement` - the return fragment of the cypher query.

    - #### setMatchStatement

          public void setMatchStatement(java.lang.String matchStatement)

      An optional match fragment of the cypher query. MATCH is prepended to the statement provided and should not be included.
      Parameters:
        `matchStatement` - the match fragment of the cypher query

    - #### setWhereStatement

          public void setWhereStatement(java.lang.String whereStatement)

      An optional where fragment of the cypher query. WHERE is prepended to the statement provided and should not be included.
      Parameters:
        `whereStatement` - where fragment of the cypher query

    - #### setOrderByStatement

          public void setOrderByStatement(java.lang.String orderByStatement)

      A list of properties to order the results by. This is required so that subsequent page requests pull back the segment of results correctly. ORDER BY is prepended to the statement provided and should not be included.
      Parameters:
        `orderByStatement` - order by fragment of the cypher query.

    - #### getSessionFactory

          protected org.neo4j.ogm.session.SessionFactory getSessionFactory()

    - #### setSessionFactory

          public void setSessionFactory(org.neo4j.ogm.session.SessionFactory sessionFactory)

      Establish the session factory for the reader.
      Parameters:
        `sessionFactory` - the factory to use for the reader.

    - #### setTargetType

          public void setTargetType(java.lang.Class<T> targetType)

      The object type to be returned from each call to `AbstractItemCountingItemStreamItemReader.read()`
      Parameters:
        `targetType` - the type of object to return.

    - #### getTargetType

          protected final java.lang.Class<T> getTargetType()

    - #### generateLimitCypherQuery

          protected java.lang.String generateLimitCypherQuery()

    - #### afterPropertiesSet

          public void afterPropertiesSet()
                                  throws java.lang.Exception

      Checks mandatory properties
      Specified by:
        `afterPropertiesSet` in interface `org.springframework.beans.factory.InitializingBean`
      Throws:
        `java.lang.Exception`
      See Also:
        `InitializingBean.afterPropertiesSet()`