...
The indexer is configured using Spring. Here is a sample configuration fragment showing two workers (saving RDF to disk, and syncing to a Jena Fuseki triplestore) and the framework for listening to events and connecting them with the workers:
No Format |
---|
<!-- Worker #1: Copy object RDF to a Fuseki triplestore using SPARQL Update --> <bean id="sparqlUpdate" class="org.fcrepo.indexer.SparqlIndexer"> <!-- base URL for triplestore subjects, PID will be appended --> <property name="prefix" value="http://localhost:${test.port:8080}/rest/objects/"/> <property name="queryBase" value="http://localhost:3030/test/query"/> <property name="updateBase" value="http://localhost:3030/test/update"/> <property name="formUpdates"> <value type="java.lang.Boolean">false</value> </property> </bean> <!-- Worker #2: Save object RDF to timestamped files on disk --> <bean id="fileSerializer" class="org.fcrepo.indexer.FileSerializer"> <property name="path" value="./target/test-classes/fileSerializer/"/> </bean> <!-- Main indexer class that processes events, gets RDF from the repository and calls the workers --> <bean id="indexerGroup" class="org.fcrepo.indexer.IndexerGroup"> <property name="repositoryURL" value="http://localhost:${test.port:8080}/rest/objects/" /> <property name="indexers"> <set> <ref bean="fileSerializer"/> <ref bean="sparqlUpdate"/> </set> </property> </bean> <!-- ActiveMQ queue to listen for events --> <bean id="destination" class="org.apache.activemq.command.ActiveMQTopic"> <constructor-arg value="fedora" /> </bean> <!-- Message listener container to connect the JMS queue to the indexer --> <bean id="jmsContainer" class="org.springframework.jms.listener.DefaultMessageListenerContainer"> <property name="connectionFactory" ref="connectionFactory"/> <property name="destination" ref="destination"/> <property name="messageListener" ref="indexerGroup" /> <property name="sessionTransacted" value="true"/> </bean> |
To use another triplestore, change the SparqlIndexer bean configuration. Here is the bean configuration to use with Sesame running on port 8081:
No Format |
---|
<!-- Worker #1: Copy object RDF to a Sesame triplestore using SPARQL Update -->
<bean id="sparqlUpdate" class="org.fcrepo.indexer.SparqlIndexer">
<!-- base URL for triplestore subjects, PID will be appended -->
<property name="prefix" value="http://localhost:${test.port:8080}/rest/objects/"/>
<property name="queryBase" value="http://localhost:8081/openrdf-sesame/repositories/test"/>
<property name="updateBase" value="http://localhost:8081/openrdf-sesame/repositories/test/statements"/>
<property name="formUpdates">
<value type="java.lang.Boolean">true</value>
</property>
</bean>
|
Extending the Indexer
To implement a new kind of indexer:
...