Mirror uses an implementation of BulkDataPersister to deal with incoming information. It might be interesting to be able to use several BulkDataPersister with a single Mirror. This project aims to provide this feature. Instead of using a concrete BulkDataPersister you will configure CompositeBulkDataPersister and it will forward concurrently method execution to a number of configurable BulkDataPersister using a thread pool.

This approach introduces a possible inconsistency if delegated BulkDataPersister s do not all succeed / fail. To overcome this pluggable a ExecutionFailureStrategy component should be provided.

Configuration

Space Schema

space-config.external-data-source.init-properties-file property allows to specify a property file which will be used to configure a BulkDataPersister implementation.

Property Usage Mandatory Default
delegate-classnames fully qualified class names of BulkDataPersister implementations Yes
delegate-classname-delimiter delimiter character between class names. No ;
executionfailurestrategy-classname ExecutionFailureStrategy implementation No null
CompositeBulkDataPersister supported properties

Spring

CompositeBulkDataPersister can be configured using spring injection concepts.

<bean id="dataSource1" class="fr.fastconnect.gigaspaces.datasource.test.DataSource1" />
<bean id="dataSource2" class="fr.fastconnect.gigaspaces.datasource.test.DataSource2" />

<bean id="compositeBulkPersister" class="fr.fastconnect.gigaspaces.datasource.CompositeBulkDataPersister">
    <constructor-arg>
        <list>
            <ref bean="dataSource1" />
            <ref bean="dataSource2" />
        </list>
    </constructor-arg>
</bean>

<os-core:space id="testMirror" url="/./mirror-service" schema="mirror" external-data-source="compositeBulkPersister" />

Eventually you can set an ExecutionFailureStrategy

<os-core:space id="backupSpace" url="/./backup" />

<bean id="compositeBulkPersister" class="fr.fastconnect.gigaspaces.datasource.CompositeBulkDataPersister">
    ...
    <property name="executionFailureStrategy">
        <ref bean="executionFailureStrategy">
    </property>
</bean>

ExecutionFailureStrategy interface

When one of configured BulkDataPersister fails associated information are forwarded to a configurable ExecutionFailureStrategy . This interface defines a method whose implementation is responsible to handle those failures.

See ExecutionFailureStrategy interface .

SpaceStorageExecutionFailureStrategy implementation

Implementation of ExecutionFailureStrategy using a space as persistent store to keep BulkItem s and the exception generated by associated BulkDataPersister as an SpaceStorageExecutionFailure .

Configuration

Space Schema
Property Usage Mandatory Default
spacestorage-executionfailurestrategy-url url of the space which will persist information Yes
SpaceStorageExecutionFailureStrategy supported properties
Spring

SpaceStorageExecutionFailureStrategy can be configured using spring injection concepts.

<os-core:space id="backupSpace" url="/./backup" />

<bean class="fr.fastconnect.gigaspaces.datasource.strategy.SpaceStorageExecutionFailureStrategy">
    <constructor-arg ref="backupSpace" />
</bean>

Unrecoverable Exception

It might happen that the ExecutionFailureStrategy itself fails by throwing an exception. CompositeBulkDataPersister#handleUnrecoverableException will be called under following circumstances:

Default implementation dump all BulkItem s in a file named unrecoverable-exception- BulkPersisterClassName using ObjectOutputStream . This method might be overloaded if needed.