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.
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 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>
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 .
Implementation of ExecutionFailureStrategy using a space as persistent store to keep BulkItem s and the exception generated by associated BulkDataPersister as an SpaceStorageExecutionFailure .
| Property | Usage | Mandatory | Default |
| spacestorage-executionfailurestrategy-url | url of the space which will persist information | Yes |
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>
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.