Updated Branches: refs/heads/develop aa4de7ac8 -> 6f23021eb
allow configuring KiWi with a configuration object, deprecated old constructors Project: http://git-wip-us.apache.org/repos/asf/incubator-marmotta/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-marmotta/commit/484a5255 Tree: http://git-wip-us.apache.org/repos/asf/incubator-marmotta/tree/484a5255 Diff: http://git-wip-us.apache.org/repos/asf/incubator-marmotta/diff/484a5255 Branch: refs/heads/develop Commit: 484a5255d3fb8cc26ceec364dc4c8af5edb1f147 Parents: 25f18e9 Author: Sebastian Schaffert <[email protected]> Authored: Fri May 17 11:08:05 2013 +0200 Committer: Sebastian Schaffert <[email protected]> Committed: Fri May 17 11:08:05 2013 +0200 ---------------------------------------------------------------------- .../marmotta/kiwi/config/KiWiConfiguration.java | 57 +++++++++++ .../marmotta/kiwi/persistence/KiWiPersistence.java | 75 +++++++-------- .../org/apache/marmotta/kiwi/sail/KiWiStore.java | 8 ++- .../services/triplestore/SesameServiceImpl.java | 6 +- .../src/main/resources/config-defaults.properties | 3 + .../main/resources/config-descriptions.properties | 3 +- 6 files changed, 111 insertions(+), 41 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-marmotta/blob/484a5255/libraries/kiwi/kiwi-triplestore/src/main/java/org/apache/marmotta/kiwi/config/KiWiConfiguration.java ---------------------------------------------------------------------- diff --git a/libraries/kiwi/kiwi-triplestore/src/main/java/org/apache/marmotta/kiwi/config/KiWiConfiguration.java b/libraries/kiwi/kiwi-triplestore/src/main/java/org/apache/marmotta/kiwi/config/KiWiConfiguration.java index ca3a05c..510abb8 100644 --- a/libraries/kiwi/kiwi-triplestore/src/main/java/org/apache/marmotta/kiwi/config/KiWiConfiguration.java +++ b/libraries/kiwi/kiwi-triplestore/src/main/java/org/apache/marmotta/kiwi/config/KiWiConfiguration.java @@ -33,20 +33,53 @@ import org.apache.marmotta.kiwi.persistence.KiWiDialect; */ public class KiWiConfiguration { + /** + * A unique name for identifying this instance of KiWiPersistence. Can be used in case there are several + * instances running in the same environment. + */ private String name; private String jdbcUrl; private String dbUser; private String dbPassword; + + /** + * The default context to use when no explicit context is given in createStatement. The KiWi triple store + * does not support null values for the context of a triple, so this URL must be set to an appropriate value + */ + private String defaultContext; + + /** + * The context to use for storing all inferred triples. The value set here will override all contexts + * given to addInferredTriple, because KiWi always stores all inferred triples in the same context. + */ + private String inferredContext; + + + /** + * The SQL dialect to use + */ private KiWiDialect dialect; + /** + * A flag indicating if the query logging (Tomcat JDBC SlowQueryReport) is enabled or not. + */ + private boolean queryLoggingEnabled = false; + public KiWiConfiguration(String name, String jdbcUrl, String dbUser, String dbPassword, KiWiDialect dialect) { + this(name, jdbcUrl, dbUser, dbPassword, dialect, null, null); + } + + public KiWiConfiguration(String name, String jdbcUrl, String dbUser, String dbPassword, KiWiDialect dialect, String defaultContext, String inferredContext) { this.dbPassword = dbPassword; this.dbUser = dbUser; this.dialect = dialect; this.jdbcUrl = jdbcUrl; this.name = name; + this.defaultContext = defaultContext; + this.inferredContext = inferredContext; } + public String getDbPassword() { return dbPassword; } @@ -66,4 +99,28 @@ public class KiWiConfiguration { public String getName() { return name; } + + public boolean isQueryLoggingEnabled() { + return queryLoggingEnabled; + } + + public void setQueryLoggingEnabled(boolean queryLoggingEnabled) { + this.queryLoggingEnabled = queryLoggingEnabled; + } + + public String getDefaultContext() { + return defaultContext; + } + + public void setDefaultContext(String defaultContext) { + this.defaultContext = defaultContext; + } + + public String getInferredContext() { + return inferredContext; + } + + public void setInferredContext(String inferredContext) { + this.inferredContext = inferredContext; + } } http://git-wip-us.apache.org/repos/asf/incubator-marmotta/blob/484a5255/libraries/kiwi/kiwi-triplestore/src/main/java/org/apache/marmotta/kiwi/persistence/KiWiPersistence.java ---------------------------------------------------------------------- diff --git a/libraries/kiwi/kiwi-triplestore/src/main/java/org/apache/marmotta/kiwi/persistence/KiWiPersistence.java b/libraries/kiwi/kiwi-triplestore/src/main/java/org/apache/marmotta/kiwi/persistence/KiWiPersistence.java index 70950eb..e4206a2 100644 --- a/libraries/kiwi/kiwi-triplestore/src/main/java/org/apache/marmotta/kiwi/persistence/KiWiPersistence.java +++ b/libraries/kiwi/kiwi-triplestore/src/main/java/org/apache/marmotta/kiwi/persistence/KiWiPersistence.java @@ -18,6 +18,7 @@ package org.apache.marmotta.kiwi.persistence; import org.apache.marmotta.kiwi.caching.KiWiCacheManager; +import org.apache.marmotta.kiwi.config.KiWiConfiguration; import org.apache.marmotta.kiwi.model.rdf.KiWiNode; import org.apache.marmotta.kiwi.model.rdf.KiWiResource; import org.apache.marmotta.kiwi.model.rdf.KiWiUriResource; @@ -51,34 +52,31 @@ public class KiWiPersistence { private static int KIWI_ID = 0; /** - * A unique name for identifying this instance of KiWiPersistence. Can be used in case there are several - * instances running in the same environment. - */ - private String name; - - - /** * The connection pool for managing JDBC connections */ private DataSource connectionPool; - /** - * The SQL dialect to use - */ - private KiWiDialect dialect; - private PoolProperties poolConfig; private KiWiCacheManager cacheManager; private KiWiGarbageCollector garbageCollector; + /** + * The KiWi configuration for this persistence. + */ + private KiWiConfiguration configuration; + + @Deprecated public KiWiPersistence(String name, String jdbcUrl, String db_user, String db_password, KiWiDialect dialect) { - this.name = name; - this.dialect = dialect; + this(new KiWiConfiguration(name,jdbcUrl,db_user,db_password,dialect)); + } + + public KiWiPersistence(KiWiConfiguration configuration) { + this.configuration = configuration; // init JDBC connection pool - initConnectionPool(jdbcUrl, db_user, db_password); + initConnectionPool(); // init EHCache caches initCachePool(); @@ -95,7 +93,7 @@ public class KiWiPersistence { } public KiWiDialect getDialect() { - return dialect; + return configuration.getDialect(); } public KiWiCacheManager getCacheManager() { @@ -104,17 +102,17 @@ public class KiWiPersistence { private void initCachePool() { - cacheManager = new KiWiCacheManager(name); + cacheManager = new KiWiCacheManager(configuration.getName()); } - private void initConnectionPool(String jdbcUrl, String db_user, String db_password) { + private void initConnectionPool() { poolConfig = new PoolProperties(); poolConfig.setName("kiwi-" + (++KIWI_ID)); - poolConfig.setUrl(jdbcUrl); - poolConfig.setDriverClassName(dialect.getDriverClass()); - poolConfig.setUsername(db_user); - poolConfig.setPassword(db_password); + poolConfig.setUrl(configuration.getJdbcUrl()); + poolConfig.setDriverClassName(configuration.getDialect().getDriverClass()); + poolConfig.setUsername(configuration.getDbUser()); + poolConfig.setPassword(configuration.getDbPassword()); poolConfig.setDefaultTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED); poolConfig.setCommitOnReturn(true); /* @@ -123,17 +121,18 @@ public class KiWiPersistence { */ // interceptors -/* - poolConfig.setJdbcInterceptors( - "org.apache.tomcat.jdbc.pool.interceptor.ConnectionState;" + - "org.apache.tomcat.jdbc.pool.interceptor.StatementFinalizer;" + - "org.apache.tomcat.jdbc.pool.interceptor.SlowQueryReport" - ); -*/ - poolConfig.setJdbcInterceptors( - "org.apache.tomcat.jdbc.pool.interceptor.ConnectionState;" + - "org.apache.tomcat.jdbc.pool.interceptor.StatementFinalizer" - ); + if(configuration.isQueryLoggingEnabled()) { + poolConfig.setJdbcInterceptors( + "org.apache.tomcat.jdbc.pool.interceptor.ConnectionState;" + + "org.apache.tomcat.jdbc.pool.interceptor.StatementFinalizer;" + + "org.apache.tomcat.jdbc.pool.interceptor.SlowQueryReport" + ); + } else { + poolConfig.setJdbcInterceptors( + "org.apache.tomcat.jdbc.pool.interceptor.ConnectionState;" + + "org.apache.tomcat.jdbc.pool.interceptor.StatementFinalizer" + ); + } if(log.isDebugEnabled()) { poolConfig.setSuspectTimeout(30); @@ -196,14 +195,14 @@ public class KiWiPersistence { log.info("creating new KiWi database ..."); ScriptRunner runner = new ScriptRunner(connection.getJDBCConnection(), false, false); - runner.runScript(new StringReader(dialect.getCreateScript(scriptName))); + runner.runScript(new StringReader(configuration.getDialect().getCreateScript(scriptName))); } else { int version = connection.getDatabaseVersion(); - String updateScript = dialect.getMigrationScript(version,scriptName); + String updateScript = configuration.getDialect().getMigrationScript(version,scriptName); if(updateScript != null && updateScript.length() > 0) { - log.info("upgrading existing KiWi database from version {} to version {}", version, dialect.getVersion()); + log.info("upgrading existing KiWi database from version {} to version {}", version, configuration.getDialect().getVersion()); ScriptRunner runner = new ScriptRunner(connection.getJDBCConnection(), false, false); runner.runScript(new StringReader(updateScript)); @@ -264,7 +263,7 @@ public class KiWiPersistence { } ScriptRunner runner = new ScriptRunner(connection.getJDBCConnection(), false, false); - runner.runScript(new StringReader(dialect.getDropScript(scriptName))); + runner.runScript(new StringReader(configuration.getDialect().getDropScript(scriptName))); if(log.isDebugEnabled()) { @@ -298,7 +297,7 @@ public class KiWiPersistence { */ public KiWiConnection getConnection() throws SQLException { if(connectionPool != null) { - return new KiWiConnection(this,dialect,cacheManager); + return new KiWiConnection(this,configuration.getDialect(),cacheManager); } else { throw new SQLException("connection pool is closed, database connections not available"); } http://git-wip-us.apache.org/repos/asf/incubator-marmotta/blob/484a5255/libraries/kiwi/kiwi-triplestore/src/main/java/org/apache/marmotta/kiwi/sail/KiWiStore.java ---------------------------------------------------------------------- diff --git a/libraries/kiwi/kiwi-triplestore/src/main/java/org/apache/marmotta/kiwi/sail/KiWiStore.java b/libraries/kiwi/kiwi-triplestore/src/main/java/org/apache/marmotta/kiwi/sail/KiWiStore.java index 3c71e2c..b6db0fc 100644 --- a/libraries/kiwi/kiwi-triplestore/src/main/java/org/apache/marmotta/kiwi/sail/KiWiStore.java +++ b/libraries/kiwi/kiwi-triplestore/src/main/java/org/apache/marmotta/kiwi/sail/KiWiStore.java @@ -18,6 +18,7 @@ package org.apache.marmotta.kiwi.sail; import com.google.common.collect.MapMaker; +import org.apache.marmotta.kiwi.config.KiWiConfiguration; import org.apache.marmotta.kiwi.model.caching.IntArray; import org.apache.marmotta.kiwi.persistence.KiWiDialect; import org.apache.marmotta.kiwi.persistence.KiWiPersistence; @@ -101,8 +102,13 @@ public class KiWiStore extends NotifyingSailBase { } + @Deprecated public KiWiStore(String name, String jdbcUrl, String db_user, String db_password, KiWiDialect dialect, String defaultContext, String inferredContext) { - this(new KiWiPersistence(name,jdbcUrl,db_user,db_password,dialect), defaultContext, inferredContext); + this(new KiWiConfiguration(name,jdbcUrl,db_user,db_password,dialect, defaultContext, inferredContext)); + } + + public KiWiStore(KiWiConfiguration configuration) { + this(new KiWiPersistence(configuration), configuration.getDefaultContext(), configuration.getInferredContext()); } http://git-wip-us.apache.org/repos/asf/incubator-marmotta/blob/484a5255/platform/marmotta-core/src/main/java/org/apache/marmotta/platform/core/services/triplestore/SesameServiceImpl.java ---------------------------------------------------------------------- diff --git a/platform/marmotta-core/src/main/java/org/apache/marmotta/platform/core/services/triplestore/SesameServiceImpl.java b/platform/marmotta-core/src/main/java/org/apache/marmotta/platform/core/services/triplestore/SesameServiceImpl.java index b29036f..9c60ab4 100644 --- a/platform/marmotta-core/src/main/java/org/apache/marmotta/platform/core/services/triplestore/SesameServiceImpl.java +++ b/platform/marmotta-core/src/main/java/org/apache/marmotta/platform/core/services/triplestore/SesameServiceImpl.java @@ -18,6 +18,7 @@ package org.apache.marmotta.platform.core.services.triplestore; import edu.emory.mathcs.backport.java.util.concurrent.locks.ReentrantReadWriteLock; +import org.apache.marmotta.kiwi.config.KiWiConfiguration; import org.apache.marmotta.platform.core.api.config.ConfigurationService; import org.apache.marmotta.platform.core.api.triplestore.NotifyingSailProvider; import org.apache.marmotta.platform.core.api.triplestore.SesameService; @@ -148,7 +149,10 @@ public class SesameServiceImpl implements SesameService { String dbUser = configurationService.getStringConfiguration("database.user"); String dbPass = configurationService.getStringConfiguration("database.password"); - store = new KiWiStore("lmf", jdbcUrl, dbUser, dbPass, dialect, configurationService.getDefaultContext(), configurationService.getInferredContext()); + KiWiConfiguration configuration = new KiWiConfiguration("lmf", jdbcUrl, dbUser, dbPass, dialect, configurationService.getDefaultContext(), configurationService.getInferredContext()); + configuration.setQueryLoggingEnabled(configurationService.getBooleanConfiguration("database.debug.slowqueries",false)); + + store = new KiWiStore(configuration); tsail = new KiWiTransactionalSail(store); http://git-wip-us.apache.org/repos/asf/incubator-marmotta/blob/484a5255/platform/marmotta-core/src/main/resources/config-defaults.properties ---------------------------------------------------------------------- diff --git a/platform/marmotta-core/src/main/resources/config-defaults.properties b/platform/marmotta-core/src/main/resources/config-defaults.properties index 6a5dcc8..4fadcf2 100644 --- a/platform/marmotta-core/src/main/resources/config-defaults.properties +++ b/platform/marmotta-core/src/main/resources/config-defaults.properties @@ -158,6 +158,9 @@ database.password = # the database mode (create, update or validate) database.mode = +# report slow queries in the log (not thread safe) +database.debug.slowqueries = false + # Hibernate-specific configuration for H2 database.h2.driver = org.h2.Driver database.h2.url = jdbc:h2:/tmp/kiwi/db/kiwi;MVCC=true;DB_CLOSE_ON_EXIT=FALSE;DB_CLOSE_DELAY=10 http://git-wip-us.apache.org/repos/asf/incubator-marmotta/blob/484a5255/platform/marmotta-core/src/main/resources/config-descriptions.properties ---------------------------------------------------------------------- diff --git a/platform/marmotta-core/src/main/resources/config-descriptions.properties b/platform/marmotta-core/src/main/resources/config-descriptions.properties index 913ba5b..e260dda 100644 --- a/platform/marmotta-core/src/main/resources/config-descriptions.properties +++ b/platform/marmotta-core/src/main/resources/config-descriptions.properties @@ -162,7 +162,8 @@ database.password.type = java.lang.String("password") database.mode.description = the database mode (create, update, validate or off) database.mode.type = java.lang.Enum("create"|"update"|"validate"|"off") - +database.debug.slowqueries.description = enable reporting of slow database queries (produces additional overhead and is not thread safe) +database.debug.slowqueries.type = java.lang.Boolean ############################################################################### # LMF importer configuration
