You are viewing an old version of this page. View the current version.
Compare with Current
View Page History
« Previous
Version 11
Next »
- The Publisher developer creates an OSGI bundle containing mainly an implementation of a PublisherAccessProvider (PAP) interface with the code specific to the target repository – e.g. Elasticsearch, Solr.
- The developer must implement PAP methods like processAddUpdate and processDelete for publishing documents coming from connectors.
- When loading this bundle, Aspire also loads another bundle called by the Publisher Framework too, with classes common for all publishers – e.g. PublisherControllerImpl class.
- The developer's bundle contains also the DXF file for the specific configuration parts while the the Publisher Framework bundle contains the DXF file with general configuration that can be utilized by all publishers.
- When an Aspire crawl starts, the Publisher Framework PublisherControllerImpl object is the first point where all documents coming from connectors arrive and are then propagated to other Publisher Framework objects; mainly PAP, to be published with the help of Publisher Framework connection objects.
- PublisherControllerImpl holds one PublisherInfo object created by PAP when the specific publisher is loaded.
- PublisherInfo contains values of all configuration parameters provided by the user in DXF form.
- When loaded, the publisher contains one instance of PublisherControllerImpl class and one instance of PublisherInfo class shared among all threads.
- PublisherControllerImpl holds one instance of PAP class shared among all the publishing threads.
- PublisherControllerImpl handles connection pool of PublisherRepositoryConnection implementation objects.
- Connection objects are created by the PublisherConnectionController implementation.
- PublisherInfo provides the PublisherConnectionController implementation object.
- Connection objects must be able to authenticate to the target repository with provided credentials.
- PAP uses connection objects when writing data into target repositories.
- Some very common connection classes are provided by the Publisher Framework, like HttpClient for REST. Others must be provided by the developer.
- PublisherControllerImpl also handles batching.
- Batches are the mean for grouping documents into larger units before sending them to the target repository.
- The batch normally requests connection object from the pool and releases this connection object after the batch close method is issued.
- More threads can participate on the same batch – hence connections must be thread safe.
- PublisherControllerImpl creates Aspire standard ComponentBatch objects based on information in coming jobs.
- PublisherBatch objects are then created by ComponentBatch objects to be passed to PAP methods.
Batching
Batches are configured in the connector configuration and the Publisher Framework respects this. If no batching is defined, the Publisher Framework creates a one-time batch with only one document included.
On the publisher level, a developer can choose among certain batch types: BUFFER/ STREAM/ NONE
- For STREAM batch type, the Publisher Framework gets connection from the pool on batch start and keeps sending this connection to PAP methods in the course of the whole batch.
- The connection is released when closing the batch.
- For BUFFER batch type the connection is claimed from the pool at the beginning of batch close, passed to PAP endBatch method and released afterwards.
- This means that the developer should buffer all documents in the course of batch. For this purpose, so called batch data buffer is available in PublisherBatch object.
- The Publisher Framework also supports "so called" multi server batches.
- Batch factory creates this kind of batch when more URL's are provided in the configuration.
- The purpose of this is to support the ability to publish documents to more servers.
- Broadcasting and round robin are supported.
- There is a BatchAdapter object available in PublisherBatch.
- This object can be used for reporting error and other messages to the Aspire framework.
![](/download/attachments/707319758/batching.png?version=1&modificationDate=1542307754000&api=v2)
Transformers are used for transforming AspireObjects coming in jobs into some String format representation of an object required by the target repository. For example, when publishing to Elasticsearch, you need to create a JSON structure of the Aspire document.
The Publisher Framework supports XML, JSON and simple String transformers
- Transformers are configured by specifying transform file – Groovy script for JSON or XSLT template for XML transformer.
- Transform files are typically provided by the developer of the specific publisher.
- For example, the Elasticsearch publisher bundle is pre-packed with transform.groovy script.
- In run-time, users can configure the publisher with their own transform file.
- Transformer functionality can be used by calling the PublisherInfo.transform(AspireObject doc) method, which produces a string result of the transformation.
Note: For more low-level handling of the transformation process, use the PublisherInfo.getTransformerFactory method to create transformers and use streams passed as parameters to transformers.
![](/download/attachments/707319758/transformers.png?version=1&modificationDate=1542307754000&api=v2)
HttpClient
HttpClient is provided by the HttpConnection object. When developing a publisher for REST-based target repositories, consider using this class.
- HttpClient was primarily developed for writing AspireObject documents.
- If required, HttpClient uses transformers for converting AspireObjects before writing.
- HttpClient supports REST-based API and can execute GET, PUT, POST, DELETE methods.
- HttpClient also supports streaming.
- This can be used in batching. For example, Elasticsearch publisher writes single documents to the HttpClient stream first. Then on batch close, this stream is posted to the Elasticsearch.
- HttpClient can be configured by the HttpProperties object.
- HttpClient configuration is flexible enough to accept changes even after the object is constructed.
- This opens possibilities for reconfiguring already created and possibly already pooled objects.
- For example, we can modify a URL parameter value in created by the HttpClient because we need different URLs for normal bulk POST and other actions such as index clean.
- HttpClient supports retry logic configured by specific parameters.
- HttpClient can be configured by HttpErrorHandler.
- If this handler is provided, the developer can get information about possible connection errors or other Http errors and react accordingly – either by throwing an exception or by continuing with retry logic.
![](/download/attachments/707319758/HttpClient.png?version=1&modificationDate=1542307754000&api=v2)
Delete By Query
If a document with action “deleteByQuery” arrives in a publisher, the Publisher Framework takes appropriate action.
- The query document is first automatically transformed by the configured transformer.
- You must support the transformation in a transformation script.
- For example, in JSON, introduce a section with “if (action == "deleteByQuery")” command.
- If this section is left empty, the document is not considered transformed.
- In the PAP class implement, delete by query logic in the method processDeleteByQuery by interpreting the syntax of “deleteByQuery” document.
- When arriving in PAP.processDeleteByQuery(DeleteByQuery) the DeleteByQuery object (the object where the original “deleteByQuery” document is wrapped) can be translated by the supported Visitor objects into some meaningful string representation.
- The prepared visitor classes support delete by query format created by ArchiveExtractor utility (QueryForArchiveDefaultVisitorImpl).
- For example, in the Elasticsearch publisher, you can create part of an Elasticsearch API command to get all documents with the same “parentId” published previously; therefore, handling all the documents of the archive.
![](/download/attachments/707319758/deleteByQuery.png?version=1&modificationDate=1542307754000&api=v2)
Simple File
The Simple File publisher is a part of the Publisher Framework.
![](/download/attachments/707319758/simpleFile.png?version=1&modificationDate=1542307754000&api=v2)