/*******************************************************************************
* Copyright (c) 2007 Cambridge Semantics Incorporated.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Cambridge Semantics Incorporated
*******************************************************************************/
package org.openanzo.client;
import java.util.Dictionary;
import org.openanzo.exceptions.AnzoException;
import org.openanzo.jdbc.container.CoreDBConfiguration;
import org.openanzo.jdbc.container.RDBQuadStore;
import org.openanzo.ontologies.persistence.ClientPersistenceFactory;
import org.openanzo.ontologies.persistence.ClientPersistenceRoot;
import org.openanzo.rdf.Constants;
import org.openanzo.rdf.NamedGraph;
import org.openanzo.rdf.URI;
/**
* Manages persistence of client state: replication marker, trackers and transaction queues.
*
* @author Joe Betz <jpbetz@cambridgesemantics.com>
*
*/
class ClientPersistence {
static final URI storageUri = Constants.valueFactory.createURI("http://openanzo.org/reserved/localStorage");
protected final ClientPersistenceRoot clientStore;
protected final RDBQuadStore quadStore;
protected final TransactionPersistence transactionPersistence;
@SuppressWarnings("unchecked")
ClientPersistence(Dictionary properties) throws AnzoException {
// this quad store is for the statements
quadStore = createRdbQuadStore("_c", properties);
// this persistent quad store if for the transaction queue and replica graph table
RDBQuadStore transactionQueueStore = createRdbQuadStore("_t", properties);
this.transactionPersistence = new TransactionPersistence(transactionQueueStore);
this.clientStore = ClientPersistenceFactory.createClientPersistenceRoot(storageUri, new NamedGraph(storageUri, quadStore));
}
private RDBQuadStore createRdbQuadStore(String postfix, Dictionary<Object, Object> properties) throws AnzoException {
CoreDBConfiguration configuration = CoreDBConfiguration.createConfiguration(properties);
String containerName = configuration.getContainerName();
String tmpContainerName = containerName + postfix;
configuration.setContainerName(tmpContainerName);
RDBQuadStore quadStore = RDBQuadStore.createQuadStore(configuration, true);
quadStore.connect();
return quadStore;
}
public void clear() {
quadStore.clear();
transactionPersistence.clear();
}
public void drop() {
RDBQuadStore clientStore = quadStore;
clientStore.clearDatabase();
RDBQuadStore transactionStore = (RDBQuadStore) transactionPersistence.quadStore;
transactionStore.clearDatabase();
}
}