/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.jena.fuseki.server;
import org.apache.jena.atlas.lib.FileOps ;
import org.apache.jena.atlas.lib.StrUtils ;
import org.apache.jena.fuseki.Fuseki ;
import org.apache.jena.query.Dataset ;
import org.apache.jena.tdb.StoreConnection ;
import org.apache.jena.tdb.TDB ;
import org.apache.jena.tdb.TDBFactory ;
import org.apache.jena.tdb.base.block.FileMode ;
import org.apache.jena.tdb.base.file.Location ;
import org.apache.jena.tdb.setup.StoreParams ;
import org.apache.jena.tdb.transaction.DatasetGraphTransaction ;
public class SystemState {
private static String SystemDatabaseLocation ;
// Testing may reset this.
public static Location location ;
private static Dataset dataset = null ;
private static DatasetGraphTransaction dsg = null ;
public static Dataset getDataset() {
init() ;
return dataset ;
}
public static DatasetGraphTransaction getDatasetGraph() {
init() ;
return dsg ;
}
private static boolean initialized = false ;
private static void init() {
init$() ;
}
/** Small footprint database. The system database records the server state.
* It should not be performance critical, mainly being used for system admin
* functions.
* <p>Direct mode so that it is not competing for OS file cache space.
* <p>Small caches -
*/
private static final StoreParams systemDatabaseParams = StoreParams.builder()
.fileMode(FileMode.direct)
.blockSize(1024)
.blockReadCacheSize(50)
.blockWriteCacheSize(20)
.node2NodeIdCacheSize(500)
.nodeId2NodeCacheSize(500)
.nodeMissCacheSize(100)
.build() ;
public /* for testing */ static void init$() {
if ( initialized )
return ;
initialized = true ;
if ( location == null )
location = Location.create(FusekiServer.dirSystemDatabase.toString()) ;
if ( ! location.isMem() )
FileOps.ensureDir(location.getDirectoryPath()) ;
// Force it into the store connection as a low footprint
if ( StoreConnection.getExisting(location) != null )
Fuseki.serverLog.warn("System database already in the StoreConnection cache") ;
StoreConnection.make(location, systemDatabaseParams) ;
dataset = TDBFactory.createDataset(location) ;
dsg = (DatasetGraphTransaction)(dataset.asDatasetGraph()) ;
dsg.getContext().set(TDB.symUnionDefaultGraph, false) ;
}
public static String PREFIXES = StrUtils.strjoinNL
("BASE <http://example/base#>",
"PREFIX ja: <http://jena.hpl.hp.com/2005/11/Assembler#>",
"PREFIX fu: <http://jena.apache.org/fuseki#>",
"PREFIX fuseki: <http://jena.apache.org/fuseki#>",
"PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>",
"PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>",
"PREFIX tdb: <http://jena.hpl.hp.com/2008/tdb#>",
"PREFIX sdb: <http://jena.hpl.hp.com/2007/sdb#>",
"PREFIX list: <http://jena.apache.org/ARQ/list#>",
"PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>",
"PREFIX apf: <http://jena.apache.org/ARQ/property#>",
"PREFIX afn: <http://jena.apache.org/ARQ/function#>",
"") ;
}