sdb.cmd.ModStore Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of jena-sdb Show documentation
Show all versions of jena-sdb Show documentation
SDB is a persistence layer for use with Apache Jena that uses an SQL database to store triples/quads.
/*
* 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 sdb.cmd;
import java.sql.SQLException;
import java.util.List;
import jena.cmd.ArgDecl;
import jena.cmd.CmdArgModule;
import jena.cmd.CmdGeneral;
import jena.cmd.ModBase;
import jena.cmd.TerminationException;
import org.apache.jena.query.Dataset ;
import org.apache.jena.rdf.model.Model ;
import org.apache.jena.sdb.SDBException ;
import org.apache.jena.sdb.SDBFactory ;
import org.apache.jena.sdb.Store ;
import org.apache.jena.sdb.StoreDesc ;
import org.apache.jena.sdb.sql.MySQLEngineType ;
import org.apache.jena.sdb.sql.SAPStorageType ;
import org.apache.jena.sdb.sql.SDBConnection ;
import org.apache.jena.sdb.sql.SDBExceptionSQL ;
import org.apache.jena.sdb.store.DatasetStore ;
import org.apache.jena.sdb.store.LayoutType ;
import org.apache.jena.sdb.store.StoreFactory ;
import org.apache.jena.shared.NotFoundException ;
import org.apache.jena.util.FileManager ;
/** Construction of a store from a store description,
* possibly modified by command line arguments.
*/
public class ModStore extends ModBase
{
// -------- This ...
protected final ArgDecl argDeclSDBdesc = new ArgDecl(true, "sdb", "store");
// ---- modified by these .... makes a connection description
protected final ArgDecl argDeclJdbcURL = new ArgDecl(true, "jdbc");
protected final ArgDecl argDeclJdbcDriver = new ArgDecl(true, "jdbcDriver", "jdbcdriver");
protected final ArgDecl argDeclDbHost = new ArgDecl(true, "dbHost", "dbhost");
protected final ArgDecl argDeclDbName = new ArgDecl(true, "dbName", "db");
protected final ArgDecl argDeclDbType = new ArgDecl(true, "dbType", "dbtype");
protected final ArgDecl argDeclDbUser = new ArgDecl(true, "dbUser", "user");
protected final ArgDecl argDeclDbPassword = new ArgDecl(true, "dbPassword", "password", "pw");
// Store modifiers
protected final ArgDecl argDeclLayout = new ArgDecl(true, "layout");
protected final ArgDecl argDeclMySQLEngine = new ArgDecl(true, "engine");
protected final ArgDecl argDeclSAPStorage = new ArgDecl(true, "storage");
// protected String driverName = null; // JDBC class name
StoreDesc storeDesc = null ;
SDBConnection connection = null ;
boolean connectionAttempted = false ;
Store store = null ;
Dataset dataset = null ;
Model model = null ;
List loadFiles = null ;
boolean formatFirst = false ;
public ModStore()
{
SDBConnection.logSQLExceptions = true ;
}
@Override
public void registerWith(CmdGeneral cmdLine)
{
final boolean AddUsage = false ;
cmdLine.getUsage().startCategory("Store and connection") ;
cmdLine.add(argDeclSDBdesc,
"--sdb=", "Store and connection description") ;
cmdLine.add(argDeclLayout,
"--layout=NAME", "Database schema") ;
// Connection-level
cmdLine.add(argDeclJdbcURL);
if ( AddUsage )
cmdLine.getUsage().addUsage("--jdbc", "JDBC URL") ;
cmdLine.add(argDeclJdbcDriver);
if ( AddUsage )
cmdLine.getUsage().addUsage("--jdbcDriver=", "JDBC driver class name") ;
cmdLine.add(argDeclDbHost);
if ( AddUsage )
cmdLine.getUsage().addUsage("--dbHost=", "DB Host") ;
cmdLine.add(argDeclDbName);
if ( AddUsage )
cmdLine.getUsage().addUsage("--dbName=", "Database name") ;
cmdLine.add(argDeclDbType);
if ( AddUsage )
cmdLine.getUsage().addUsage("--dbType=", "Database type") ;
cmdLine.add(argDeclDbUser);
if ( AddUsage )
cmdLine.getUsage().addUsage("--dbUser=", "Database user") ;
cmdLine.add(argDeclDbPassword);
if ( AddUsage )
cmdLine.getUsage().addUsage("--dbPassword", "Daatbase user password") ;
// Store
cmdLine.add(argDeclMySQLEngine) ;
if ( AddUsage )
cmdLine.getUsage().addUsage("--engine=", "MySQL engine type") ;
// cmdLine.add(argDeclLoad) ;
// if ( AddUsage )
// cmdLine.getUsage().addUsage("--load=", "Datafile to load (permanent : for in-memory stores only) ") ;
//
// cmdLine.add(argDeclFormat) ;
// if ( AddUsage )
// cmdLine.getUsage().addUsage("--format", "Format first(permanent : for in-memory stores only) ") ;
}
@Override
public void processArgs(CmdArgModule cmdLine)
{
if (! cmdLine.contains(argDeclSDBdesc))
{
System.err.println("No store description");
throw new TerminationException(1);
}
String f = cmdLine.getArg(argDeclSDBdesc).getValue() ;
try {
storeDesc = StoreDesc.read(f) ;
if ( storeDesc.getLayout() == null )
{
System.err.println("No layout or unrecognized layout");
throw new TerminationException(1);
}
} catch (SDBException ex)
{
System.err.println("Failed to read the store description");
System.err.println(ex.getMessage()) ;
throw new TerminationException(1) ;
}
catch (NotFoundException ex)
{
System.err.println(f+" : Store description not found");
throw new TerminationException(1) ;
}
// Overrides.
if (cmdLine.contains(argDeclDbHost))
storeDesc.connDesc.setHost(cmdLine.getArg(argDeclDbHost).getValue());
if (cmdLine.contains(argDeclDbName))
storeDesc.connDesc.setName(cmdLine.getArg(argDeclDbName).getValue()) ;
if (cmdLine.contains(argDeclDbType))
storeDesc.connDesc.setType(cmdLine.getArg(argDeclDbType).getValue()) ;
if (cmdLine.contains(argDeclDbUser))
storeDesc.connDesc.setUser(cmdLine.getArg(argDeclDbUser).getValue()) ;
if (cmdLine.contains(argDeclDbPassword))
storeDesc.connDesc.setPassword(cmdLine.getArg(argDeclDbPassword).getValue()) ;
if (cmdLine.contains(argDeclMySQLEngine))
storeDesc.engineType = MySQLEngineType.convert(cmdLine.getArg(argDeclMySQLEngine).getValue());
if (cmdLine.contains(argDeclSAPStorage))
storeDesc.storageType = SAPStorageType.convert(cmdLine.getArg(argDeclSAPStorage).getValue());
if (cmdLine.contains(argDeclLayout))
{
String layoutName = cmdLine.getArg(argDeclLayout).getValue() ;
storeDesc.setLayout(LayoutType.fetch(layoutName)) ;
if ( storeDesc.getLayout() == null )
{
System.err.println("Don't recognize layout name '"+layoutName+"'") ;
throw new TerminationException(2) ;
}
}
//storeDesc.connDesc.initJDBC() ;
if ( false )
{
//System.out.println("URL = " + storeDesc.connDesc.URL);
System.out.println("Type = " + storeDesc.connDesc.getType());
System.out.println("Host = " + storeDesc.connDesc.getHost());
System.out.println("Database = " + storeDesc.connDesc.getName());
System.out.println("User = " + storeDesc.connDesc.getUser());
System.out.println("Password = " + storeDesc.connDesc.getPassword());
// if ( storeDesc.connDesc.getArgStr() != null )
// System.out.println("Args = " + storeDesc.connDesc.getArgStr());
System.out.println("Layout = " + storeDesc.getLayout().getName()) ;
//System.out.println("Name = " + argModelName);
SDBConnection.logSQLExceptions = true ;
SDBConnection.logSQLStatements = true ;
}
if (cmdLine.contains(argDeclJdbcDriver))
{
String driverName = cmdLine.getArg(argDeclJdbcDriver).getValue();
storeDesc.connDesc.setDriver(driverName) ;
}
}
public Store getStore()
{
if ( store == null )
{
store = StoreFactory.create(storeDesc, getConnection()) ;
if ( formatFirst )
getStore().getTableFormatter().format() ;
}
return store ;
}
public boolean hasStore() { return store != null ; }
public StoreDesc getStoreDesc()
{
return storeDesc ;
}
public void setDbName(String dbName)
{
// used by truncate and format.
storeDesc.connDesc.setName(dbName) ;
}
public Dataset getDataset()
{
if ( dataset == null )
{
dataset = DatasetStore.create(getStore()) ;
initData(dataset.getDefaultModel()) ;
}
return dataset ;
}
// public Model getModel()
// {
// if ( model == null )
// {
// model = SDBFactory.connectDefaultModel(getStore()) ;
// initData(model) ;
// }
// return model ;
// }
private void initData(Model model)
{
if ( loadFiles != null )
{
for ( String s : loadFiles )
FileManager.get().readModel(model, s) ;
}
loadFiles = null ;
}
// public Graph getGraph()
// {
// return getModel().getGraph() ;
// }
public boolean isConnected() { return connection != null ; }
public SDBConnection getConnection()
{
if ( ! isConnected() && ! connectionAttempted )
try {
connection = SDBFactory.createConnection(storeDesc.connDesc) ;
} finally { connectionAttempted = true ; }
return connection ;
}
boolean hsqlDetech = false ;
boolean isHSQL = false ;
public boolean isHSQL()
{
if ( !hsqlDetech )
{
try {
isHSQL = getConnection().getSqlConnection().getMetaData().getDatabaseProductName().contains("HSQL") ;
} catch (SQLException ex)
{ throw new SDBExceptionSQL(ex) ; }
}
return isHSQL ;
}
public void closedown()
{
if ( store != null )
store.close() ;
}
}