You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@marmotta.apache.org by ss...@apache.org on 2013/12/18 10:27:05 UTC

git commit: improvements for MARMOTTA-388

Updated Branches:
  refs/heads/develop 92205ec47 -> c5cf84e71


improvements for MARMOTTA-388


Project: http://git-wip-us.apache.org/repos/asf/marmotta/repo
Commit: http://git-wip-us.apache.org/repos/asf/marmotta/commit/c5cf84e7
Tree: http://git-wip-us.apache.org/repos/asf/marmotta/tree/c5cf84e7
Diff: http://git-wip-us.apache.org/repos/asf/marmotta/diff/c5cf84e7

Branch: refs/heads/develop
Commit: c5cf84e711e952292fbb4110309f647aa4e8771a
Parents: 92205ec
Author: Sebastian Schaffert <ss...@apache.org>
Authored: Wed Dec 18 10:26:59 2013 +0100
Committer: Sebastian Schaffert <ss...@apache.org>
Committed: Wed Dec 18 10:26:59 2013 +0100

----------------------------------------------------------------------
 .../marmotta/kiwi/caching/KiWiCacheManager.java | 87 +++++++++++---------
 .../marmotta/kiwi/config/KiWiConfiguration.java | 56 +++++++++++++
 .../kiwi/persistence/KiWiPersistence.java       | 24 ++++--
 .../apache/marmotta/kiwi/sail/KiWiStore.java    |  5 ++
 .../backend/kiwi/KiWiStoreProvider.java         | 34 ++++++--
 .../main/resources/config-defaults.properties   |  6 ++
 .../resources/config-descriptions.properties    | 10 +++
 .../core/logging/CacheLoggingModule.java        |  2 +-
 .../core/services/cache/CachingServiceImpl.java | 23 +++---
 .../src/main/resources/jgroups-marmotta.xml     |  2 +-
 10 files changed, 187 insertions(+), 62 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/marmotta/blob/c5cf84e7/libraries/kiwi/kiwi-triplestore/src/main/java/org/apache/marmotta/kiwi/caching/KiWiCacheManager.java
----------------------------------------------------------------------
diff --git a/libraries/kiwi/kiwi-triplestore/src/main/java/org/apache/marmotta/kiwi/caching/KiWiCacheManager.java b/libraries/kiwi/kiwi-triplestore/src/main/java/org/apache/marmotta/kiwi/caching/KiWiCacheManager.java
index b68d7a9..400fa75 100644
--- a/libraries/kiwi/kiwi-triplestore/src/main/java/org/apache/marmotta/kiwi/caching/KiWiCacheManager.java
+++ b/libraries/kiwi/kiwi-triplestore/src/main/java/org/apache/marmotta/kiwi/caching/KiWiCacheManager.java
@@ -26,9 +26,9 @@ import org.infinispan.configuration.global.GlobalConfiguration;
 import org.infinispan.configuration.global.GlobalConfigurationBuilder;
 import org.infinispan.distribution.ch.SyncConsistentHashFactory;
 import org.infinispan.eviction.EvictionStrategy;
+import org.infinispan.lifecycle.ComponentStatus;
 import org.infinispan.manager.DefaultCacheManager;
 import org.infinispan.manager.EmbeddedCacheManager;
-import org.infinispan.remoting.transport.Address;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -62,21 +62,30 @@ public class KiWiCacheManager {
     // default configuration: distributed cache, 100000 entries, 300 seconds expiration, 60 seconds idle
     private Configuration defaultConfiguration;
 
-    private boolean clustered;
+    private boolean clustered, embedded;
 
+    private KiWiConfiguration kiWiConfiguration;
+
+    /**
+     * Create a new cache manager with its own automatically created Infinispan instance.
+     *
+     * @param config
+     */
     public KiWiCacheManager(KiWiConfiguration config) {
 
         this.clustered = config.isClustered();
+        this.kiWiConfiguration = config;
 
         if(clustered) {
             globalConfiguration = new GlobalConfigurationBuilder()
                     .transport()
                         .defaultTransport()
-                        .clusterName(config.getName())
+                        .clusterName(config.getClusterName())
                         .machineId("instance-" + config.getDatacenterId())
                         .addProperty("configurationFile", "jgroups-kiwi.xml")
                     .globalJmxStatistics()
                         .jmxDomain("org.apache.marmotta.kiwi")
+                        .allowDuplicateDomains(true)
                     .build();
 
 
@@ -101,6 +110,7 @@ public class KiWiCacheManager {
             globalConfiguration = new GlobalConfigurationBuilder()
                     .globalJmxStatistics()
                         .jmxDomain("org.apache.marmotta.kiwi")
+                        .allowDuplicateDomains(true)
                     .build();
 
             defaultConfiguration = new ConfigurationBuilder()
@@ -118,12 +128,29 @@ public class KiWiCacheManager {
 
 
         cacheManager = new DefaultCacheManager(globalConfiguration, defaultConfiguration, true);
-        if(log.isInfoEnabled()) {
-            log.info("Members in Apache Marmotta KiWi cache cluster:");
-            for(Address a : cacheManager.getMembers()) {
-                log.info(" - {}",a);
-            }
-        }
+
+        log.info("initialised cache manager ({})", globalConfiguration.isClustered() ? "cluster name: "+globalConfiguration.transport().clusterName() : "single host");
+
+        this.embedded = true;
+    }
+
+    /**
+     * Create a cache manager from an existing Infinispan cache manager.
+     *
+     * @param cacheManager
+     * @param kiWiConfiguration
+     */
+    public KiWiCacheManager(EmbeddedCacheManager cacheManager, KiWiConfiguration kiWiConfiguration) {
+        this.cacheManager = cacheManager;
+        this.globalConfiguration = cacheManager.getCacheManagerConfiguration();
+        this.defaultConfiguration = cacheManager.getDefaultCacheConfiguration();
+        this.kiWiConfiguration = kiWiConfiguration;
+
+        this.clustered = kiWiConfiguration.isClustered();
+
+        log.info("initialised cache manager ({})", globalConfiguration.isClustered() ? "cluster name: "+globalConfiguration.transport().clusterName() : "single host");
+
+        this.embedded = false;
     }
 
     /**
@@ -154,7 +181,7 @@ public class KiWiCacheManager {
         if(!cacheManager.cacheExists(TRIPLE_CACHE)) {
             Configuration tripleConfiguration = new ConfigurationBuilder().read(defaultConfiguration)
                     .eviction()
-                        .maxEntries(100000)
+                        .maxEntries(kiWiConfiguration.getTripleCacheSize())
                     .expiration()
                         .lifespan(60, TimeUnit.SECONDS)
                         .maxIdle(30, TimeUnit.SECONDS)
@@ -166,28 +193,6 @@ public class KiWiCacheManager {
 
 
     /**
-     * Return the triple id -> triple cache from the cache manager. This cache is used for speeding up the
-     * construction of query results.
-     *
-     * @return
-     */
-    public Cache getQueryCache() {
-        if(!cacheManager.cacheExists(TRIPLE_CACHE)) {
-            Configuration tripleConfiguration = new ConfigurationBuilder().read(defaultConfiguration)
-                    .eviction()
-                        .maxEntries(100000)
-                    .expiration()
-                        .lifespan(5, TimeUnit.MINUTES)
-                        .maxIdle(60, TimeUnit.SECONDS)
-                    .build();
-            cacheManager.defineConfiguration(TRIPLE_CACHE, tripleConfiguration);
-        }
-        return cacheManager.getCache(TRIPLE_CACHE);
-    }
-
-
-
-    /**
      * Return the uri -> KiWiUriResource cache from the cache manager. This cache is used when constructing new
      * KiWiUriResources to avoid a database lookup.
      *
@@ -197,7 +202,7 @@ public class KiWiCacheManager {
         if(!cacheManager.cacheExists(URI_CACHE)) {
             Configuration uriConfiguration = new ConfigurationBuilder().read(defaultConfiguration)
                     .eviction()
-                        .maxEntries(50000)
+                        .maxEntries(kiWiConfiguration.getUriCacheSize())
                     .build();
             cacheManager.defineConfiguration(URI_CACHE, uriConfiguration);
         }
@@ -215,7 +220,7 @@ public class KiWiCacheManager {
         if(!cacheManager.cacheExists(BNODE_CACHE)) {
             Configuration bnodeConfiguration = new ConfigurationBuilder().read(defaultConfiguration)
                     .eviction()
-                        .maxEntries(5000)
+                        .maxEntries(kiWiConfiguration.getBNodeCacheSize())
                     .build();
             cacheManager.defineConfiguration(BNODE_CACHE, bnodeConfiguration);
         }
@@ -233,7 +238,7 @@ public class KiWiCacheManager {
         if(!cacheManager.cacheExists(LITERAL_CACHE)) {
             Configuration literalConfiguration = new ConfigurationBuilder().read(defaultConfiguration)
                     .eviction()
-                        .maxEntries(10000)
+                        .maxEntries(kiWiConfiguration.getLiteralCacheSize())
                     .build();
             cacheManager.defineConfiguration(LITERAL_CACHE, literalConfiguration);
         }
@@ -249,7 +254,7 @@ public class KiWiCacheManager {
         if(!cacheManager.cacheExists(NAMESPACE_URI_CACHE)) {
             Configuration nsuriConfiguration = new ConfigurationBuilder().read(defaultConfiguration)
                     .eviction()
-                        .maxEntries(1000)
+                        .maxEntries(kiWiConfiguration.getNamespaceCacheSize())
                     .expiration()
                         .lifespan(1, TimeUnit.HOURS)
                     .build();
@@ -266,7 +271,7 @@ public class KiWiCacheManager {
         if(!cacheManager.cacheExists(NAMESPACE_PREFIX_CACHE)) {
             Configuration nsprefixConfiguration = new ConfigurationBuilder().read(defaultConfiguration)
                     .eviction()
-                        .maxEntries(1000)
+                        .maxEntries(kiWiConfiguration.getNamespaceCacheSize())
                     .expiration()
                         .lifespan(1, TimeUnit.HOURS)
                     .build();
@@ -359,6 +364,12 @@ public class KiWiCacheManager {
      * Shutdown this cache manager instance. Will shutdown the underlying EHCache cache manager.
      */
     public void shutdown() {
-        cacheManager.stop();
+        if(embedded && cacheManager.getStatus() == ComponentStatus.RUNNING) {
+            log.warn("shutting down cache manager ...");
+            if(cacheManager.getTransport() != null) {
+                cacheManager.getTransport().stop();
+            }
+            cacheManager.stop();
+        }
     }
 }

http://git-wip-us.apache.org/repos/asf/marmotta/blob/c5cf84e7/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 0a06aa0..b94fc9b 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
@@ -97,6 +97,10 @@ public class KiWiConfiguration {
 
     private int literalCacheSize = 100000;
 
+    private int tripleCacheSize = 100000;
+
+    private int namespaceCacheSize = 500;
+
     private int datacenterId = 0;
 
 
@@ -108,6 +112,9 @@ public class KiWiConfiguration {
     private boolean clustered = false;
 
 
+    private String clusterName = "Marmotta";
+
+
     public KiWiConfiguration(String name, String jdbcUrl, String dbUser, String dbPassword, KiWiDialect dialect) {
         this(name, jdbcUrl, dbUser, dbPassword, dialect, null, null);
     }
@@ -312,6 +319,36 @@ public class KiWiConfiguration {
         this.uriCacheSize = uriCacheSize;
     }
 
+
+    /**
+     * The maximum size of the triple cache used for looking up triples by id
+     * @return
+     */
+    public int getTripleCacheSize() {
+        return tripleCacheSize;
+    }
+
+    /**
+     * The maximum size of the triple cache used for looking up triples by id
+     */
+    public void setTripleCacheSize(int tripleCacheSize) {
+        this.tripleCacheSize = tripleCacheSize;
+    }
+
+    /**
+     * The maximum size of the namespace cache used for looking up namespaces by prefix and uri
+     */
+    public int getNamespaceCacheSize() {
+        return namespaceCacheSize;
+    }
+
+    /**
+     * The maximum size of the namespace cache used for looking up namespaces by prefix and uri
+     */
+    public void setNamespaceCacheSize(int namespaceCacheSize) {
+        this.namespaceCacheSize = namespaceCacheSize;
+    }
+
     /**
      * The datacenter ID of this server for generating unique database IDs. If not given, a random value will
      * be generated.
@@ -362,4 +399,23 @@ public class KiWiConfiguration {
     public void setClustered(boolean clustered) {
         this.clustered = clustered;
     }
+
+
+    /**
+     * Return the name of the cluster. This name is e.g. used by the Infinispan cache to identify other cache members
+     * in the same cluster,
+     *
+     * @return
+     */
+    public String getClusterName() {
+        return clusterName;
+    }
+
+    /**
+     * Change the name of the cluster. This name is e.g. used by the Infinispan cache to identify other cache members
+     * in the same cluster,
+     */
+    public void setClusterName(String clusterName) {
+        this.clusterName = clusterName;
+    }
 }

http://git-wip-us.apache.org/repos/asf/marmotta/blob/c5cf84e7/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 aa70ad0..6ca027b 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
@@ -25,6 +25,7 @@ import org.apache.marmotta.kiwi.persistence.util.ScriptRunner;
 import org.apache.marmotta.kiwi.sail.KiWiValueFactory;
 import org.apache.tomcat.jdbc.pool.DataSource;
 import org.apache.tomcat.jdbc.pool.PoolProperties;
+import org.infinispan.manager.EmbeddedCacheManager;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -78,10 +79,11 @@ public class KiWiPersistence {
      */
     private boolean         maintenance;
 
-    private boolean         droppedDatabase = false;
-
     private boolean         initialized = false;
 
+    // in case the cache manager comes from outside, it is passed over here
+    private EmbeddedCacheManager infinispan;
+
     @Deprecated
     public KiWiPersistence(String name, String jdbcUrl, String db_user, String db_password, KiWiDialect dialect) {
         this(new KiWiConfiguration(name,jdbcUrl,db_user,db_password,dialect));
@@ -92,11 +94,18 @@ public class KiWiPersistence {
         this.maintenance = false;
     }
 
+    public KiWiPersistence(KiWiConfiguration configuration, EmbeddedCacheManager infinispan) {
+        this.configuration = configuration;
+        this.maintenance = false;
+        this.infinispan = infinispan;
+    }
+
+
     public void initialise() {
         // init JDBC connection pool
         initConnectionPool();
 
-        // init EHCache caches
+        // init Infinispan caches
         initCachePool();
 
         // init garbage collector thread
@@ -128,7 +137,11 @@ public class KiWiPersistence {
 
 
     private void initCachePool() {
-        cacheManager = new KiWiCacheManager(configuration);
+        if(infinispan != null) {
+            cacheManager = new KiWiCacheManager(infinispan,configuration);
+        } else {
+            cacheManager = new KiWiCacheManager(configuration);
+        }
     }
 
 
@@ -320,8 +333,6 @@ public class KiWiPersistence {
         } catch(SQLException ex) {
             log.error("SQL exception while acquiring database connection");
         }
-
-        droppedDatabase = true;
     }
 
     /**
@@ -437,6 +448,7 @@ public class KiWiPersistence {
 
 
     public void shutdown() {
+        log.info("shutting down KiWi persistence ...");
         initialized = false;
 
         idGenerator.shutdown(this);

http://git-wip-us.apache.org/repos/asf/marmotta/blob/c5cf84e7/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 899b941..ea5fb79 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
@@ -20,6 +20,7 @@ package org.apache.marmotta.kiwi.sail;
 import org.apache.marmotta.kiwi.config.KiWiConfiguration;
 import org.apache.marmotta.kiwi.persistence.KiWiDialect;
 import org.apache.marmotta.kiwi.persistence.KiWiPersistence;
+import org.infinispan.manager.EmbeddedCacheManager;
 import org.openrdf.model.ValueFactory;
 import org.openrdf.sail.SailException;
 import org.openrdf.sail.helpers.NotifyingSailBase;
@@ -97,6 +98,10 @@ public class KiWiStore extends NotifyingSailBase {
         this(new KiWiPersistence(configuration), configuration.getDefaultContext(), configuration.getInferredContext());
     }
 
+    public KiWiStore(KiWiConfiguration configuration, EmbeddedCacheManager infinispan) {
+        this(new KiWiPersistence(configuration, infinispan), configuration.getDefaultContext(), configuration.getInferredContext());
+    }
+
     /**
      * Do store-specific operations to initialize the store. The default
      * implementation of this method does nothing.

http://git-wip-us.apache.org/repos/asf/marmotta/blob/c5cf84e7/platform/backends/marmotta-backend-kiwi/src/main/java/org/apache/marmotta/platform/backend/kiwi/KiWiStoreProvider.java
----------------------------------------------------------------------
diff --git a/platform/backends/marmotta-backend-kiwi/src/main/java/org/apache/marmotta/platform/backend/kiwi/KiWiStoreProvider.java b/platform/backends/marmotta-backend-kiwi/src/main/java/org/apache/marmotta/platform/backend/kiwi/KiWiStoreProvider.java
index 8609c9d..8a8f7a3 100644
--- a/platform/backends/marmotta-backend-kiwi/src/main/java/org/apache/marmotta/platform/backend/kiwi/KiWiStoreProvider.java
+++ b/platform/backends/marmotta-backend-kiwi/src/main/java/org/apache/marmotta/platform/backend/kiwi/KiWiStoreProvider.java
@@ -30,6 +30,7 @@ import org.apache.marmotta.platform.core.api.config.ConfigurationService;
 import org.apache.marmotta.platform.core.api.triplestore.SesameService;
 import org.apache.marmotta.platform.core.api.triplestore.StoreProvider;
 import org.apache.marmotta.platform.core.events.ConfigurationChangedEvent;
+import org.infinispan.manager.EmbeddedCacheManager;
 import org.openrdf.repository.sail.SailRepository;
 import org.openrdf.sail.NotifyingSail;
 import org.openrdf.sail.Sail;
@@ -64,6 +65,12 @@ public class KiWiStoreProvider implements StoreProvider {
     public static final String FULLTEXT_ENABLED   = "database.fulltext.enabled";
     public static final String FULLTEXT_LANGUAGES = "database.fulltext.languages";
     public static final String DEBUG_SLOWQUERIES = "database.debug.slowqueries";
+    public static final String CLUSTERING_ENABLED = "clustering.enabled";
+    public static final String CACHING_LITERAL_SIZE = "caching.literal.size";
+    public static final String CACHING_BNODE_SIZE = "caching.bnode.size";
+    public static final String CACHING_URI_SIZE = "caching.uri.size";
+    public static final String CACHING_TRIPLE_SIZE = "caching.triple.size";
+    public static final String CLUSTERING_NAME = "clustering.name";
 
     @Inject
     private Logger log;
@@ -75,6 +82,9 @@ public class KiWiStoreProvider implements StoreProvider {
     private SesameService sesameService;
 
 
+    @Inject
+    private EmbeddedCacheManager cacheManager;
+
     /**
      * Create the store provided by this SailProvider
      *
@@ -104,7 +114,7 @@ public class KiWiStoreProvider implements StoreProvider {
         String dbUser  = configurationService.getStringConfiguration("database.user");
         String dbPass  = configurationService.getStringConfiguration("database.password");
 
-        KiWiConfiguration configuration = new KiWiConfiguration(configurationService.getStringConfiguration("clustering.name", "Marmotta") + " KiWi", jdbcUrl, dbUser, dbPass, dialect, configurationService.getDefaultContext(), configurationService.getInferredContext());
+        KiWiConfiguration configuration = new KiWiConfiguration(configurationService.getStringConfiguration(CLUSTERING_NAME, "Marmotta") + " KiWi", jdbcUrl, dbUser, dbPass, dialect, configurationService.getDefaultContext(), configurationService.getInferredContext());
         configuration.setQueryLoggingEnabled(configurationService.getBooleanConfiguration(DEBUG_SLOWQUERIES, false));
         configuration.setTripleBatchCommit(configurationService.getBooleanConfiguration("database.triples.batchcommit", true));
         configuration.setTripleBatchSize(configurationService.getIntConfiguration("database.triples.batchsize", 10000));
@@ -112,12 +122,21 @@ public class KiWiStoreProvider implements StoreProvider {
         configuration.setDatacenterId(configurationService.getIntConfiguration(DATACENTER_ID,0));
         configuration.setFulltextEnabled(configurationService.getBooleanConfiguration(FULLTEXT_ENABLED, true));
         configuration.setFulltextLanguages(configurationService.getListConfiguration(FULLTEXT_LANGUAGES, ImmutableList.of("en")));
-        configuration.setClustered(configurationService.getBooleanConfiguration("clustering.enabled", false));
+
+        configuration.setClustered(configurationService.getBooleanConfiguration(CLUSTERING_ENABLED, false));
+        configuration.setClusterName(configurationService.getStringConfiguration(CLUSTERING_NAME, "Marmotta"));
+
+        configuration.setLiteralCacheSize(configurationService.getIntConfiguration(CACHING_LITERAL_SIZE, 100000));
+        configuration.setBNodeCacheSize(configurationService.getIntConfiguration(CACHING_BNODE_SIZE, 10000));
+        configuration.setUriCacheSize(configurationService.getIntConfiguration(CACHING_URI_SIZE, 500000));
+        configuration.setTripleCacheSize(configurationService.getIntConfiguration(CACHING_TRIPLE_SIZE, 100000));
+
+
 
         if("native".equalsIgnoreCase(configurationService.getStringConfiguration(SPARQL_STRATEGY))) {
-            return new KiWiSparqlSail(new KiWiStore(configuration));
+            return new KiWiSparqlSail(new KiWiStore(configuration, cacheManager));
         } else {
-            return new KiWiStore(configuration);
+            return new KiWiStore(configuration, cacheManager);
         }
     }
 
@@ -159,7 +178,12 @@ public class KiWiStoreProvider implements StoreProvider {
                 e.containsChangedKey(DATACENTER_ID) ||
                 e.containsChangedKey(FULLTEXT_ENABLED) ||
                 e.containsChangedKey(FULLTEXT_LANGUAGES) ||
-                e.containsChangedKey(DEBUG_SLOWQUERIES)
+                e.containsChangedKey(DEBUG_SLOWQUERIES) ||
+                e.containsChangedKey(CLUSTERING_ENABLED) ||
+                e.containsChangedKey(CACHING_LITERAL_SIZE) ||
+                e.containsChangedKey(CACHING_TRIPLE_SIZE) ||
+                e.containsChangedKey(CACHING_URI_SIZE) ||
+                e.containsChangedKey(CACHING_BNODE_SIZE)
                 ) {
             log.info("KiWi backend configuration changed, re-initialising triple store");
 

http://git-wip-us.apache.org/repos/asf/marmotta/blob/c5cf84e7/platform/backends/marmotta-backend-kiwi/src/main/resources/config-defaults.properties
----------------------------------------------------------------------
diff --git a/platform/backends/marmotta-backend-kiwi/src/main/resources/config-defaults.properties b/platform/backends/marmotta-backend-kiwi/src/main/resources/config-defaults.properties
index 6ee6eb6..bc5c02c 100644
--- a/platform/backends/marmotta-backend-kiwi/src/main/resources/config-defaults.properties
+++ b/platform/backends/marmotta-backend-kiwi/src/main/resources/config-defaults.properties
@@ -69,5 +69,11 @@ database.mysql.driver = com.mysql.jdbc.Driver
 database.mysql.url = jdbc:mysql://localhost:3306/lmf?useUnicode=true&characterEncoding=UTF-8&rewriteBatchedStatements=true
 
 
+caching.literal.size = 100000
+caching.uri.size     = 500000
+caching.bnode.size   = 10000
+caching.triple.size  = 100000
+
+
 
 

http://git-wip-us.apache.org/repos/asf/marmotta/blob/c5cf84e7/platform/backends/marmotta-backend-kiwi/src/main/resources/config-descriptions.properties
----------------------------------------------------------------------
diff --git a/platform/backends/marmotta-backend-kiwi/src/main/resources/config-descriptions.properties b/platform/backends/marmotta-backend-kiwi/src/main/resources/config-descriptions.properties
index 49c53a2..556f661 100644
--- a/platform/backends/marmotta-backend-kiwi/src/main/resources/config-descriptions.properties
+++ b/platform/backends/marmotta-backend-kiwi/src/main/resources/config-descriptions.properties
@@ -53,3 +53,13 @@ database.fulltext.enabled.type = java.lang.Boolean
 
 database.fulltext.languages.description = list of languages supported by fulltext search; a fulltext index will be created for each language (PostgreSQL only)
 database.fulltext.languages.type = java.util.List
+
+
+caching.literal.size.description = size of literal lookup cache
+caching.literal.size.type = java.lang.Integer(10|0|*)
+caching.uri.size.description     = size of URI resource lookup cache
+caching.uri.size.type     = java.lang.Integer(10|0|*)
+caching.bnode.size.description   = size of BNode lookup cache
+caching.bnode.size.type   = java.lang.Integer(10|0|*)
+caching.triple.size.description  = size of triple lookup cache
+caching.triple.size.type  = java.lang.Integer(10|0|*)

http://git-wip-us.apache.org/repos/asf/marmotta/blob/c5cf84e7/platform/marmotta-core/src/main/java/org/apache/marmotta/platform/core/logging/CacheLoggingModule.java
----------------------------------------------------------------------
diff --git a/platform/marmotta-core/src/main/java/org/apache/marmotta/platform/core/logging/CacheLoggingModule.java b/platform/marmotta-core/src/main/java/org/apache/marmotta/platform/core/logging/CacheLoggingModule.java
index af6709c..0a57c49 100644
--- a/platform/marmotta-core/src/main/java/org/apache/marmotta/platform/core/logging/CacheLoggingModule.java
+++ b/platform/marmotta-core/src/main/java/org/apache/marmotta/platform/core/logging/CacheLoggingModule.java
@@ -24,7 +24,7 @@ public class CacheLoggingModule extends BaseLoggingModule {
      */
     @Override
     public Level getDefaultLevel() {
-        return Level.WARN;
+        return Level.INFO;
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/marmotta/blob/c5cf84e7/platform/marmotta-core/src/main/java/org/apache/marmotta/platform/core/services/cache/CachingServiceImpl.java
----------------------------------------------------------------------
diff --git a/platform/marmotta-core/src/main/java/org/apache/marmotta/platform/core/services/cache/CachingServiceImpl.java b/platform/marmotta-core/src/main/java/org/apache/marmotta/platform/core/services/cache/CachingServiceImpl.java
index fdb7288..9c30862 100644
--- a/platform/marmotta-core/src/main/java/org/apache/marmotta/platform/core/services/cache/CachingServiceImpl.java
+++ b/platform/marmotta-core/src/main/java/org/apache/marmotta/platform/core/services/cache/CachingServiceImpl.java
@@ -29,9 +29,9 @@ import org.infinispan.configuration.global.GlobalConfiguration;
 import org.infinispan.configuration.global.GlobalConfigurationBuilder;
 import org.infinispan.distribution.ch.SyncConsistentHashFactory;
 import org.infinispan.eviction.EvictionStrategy;
+import org.infinispan.lifecycle.ComponentStatus;
 import org.infinispan.manager.DefaultCacheManager;
 import org.infinispan.manager.EmbeddedCacheManager;
-import org.infinispan.remoting.transport.Address;
 import org.slf4j.Logger;
 
 import javax.annotation.PostConstruct;
@@ -78,16 +78,17 @@ public class CachingServiceImpl implements CachingService {
     public void initialize() {
         boolean clustered = configurationService.getBooleanConfiguration("clustering.enabled", false);
 
-        log.info("Apache Marmotta Caching Service starting up ({}) ...", clustered ? "clustering" : "single host" );
+        log.info("Apache Marmotta Caching Service starting up ({}) ...", clustered ? "cluster name: " + configurationService.getStringConfiguration("clustering.name", "Marmotta") : "single host" );
         if(clustered) {
             globalConfiguration = new GlobalConfigurationBuilder()
                     .transport()
                         .defaultTransport()
-                        .clusterName(configurationService.getStringConfiguration("clustering.name", "Marmotta") + " Platform")
+                        .clusterName(configurationService.getStringConfiguration("clustering.name", "Marmotta"))
                         .machineId(configurationService.getServerName())
                         .addProperty("configurationFile", "jgroups-marmotta.xml")
                     .globalJmxStatistics()
                         .jmxDomain("org.apache.marmotta.platform")
+                        .allowDuplicateDomains(true)
                     .build();
 
 
@@ -103,7 +104,7 @@ public class CachingServiceImpl implements CachingService {
                             .consistentHashFactory(new SyncConsistentHashFactory())
                     .eviction()
                         .strategy(EvictionStrategy.LIRS)
-                        .maxEntries(1000)
+                        .maxEntries(10000)
                     .expiration()
                         .lifespan(5, TimeUnit.MINUTES)
                         .maxIdle(1, TimeUnit.MINUTES)
@@ -112,6 +113,7 @@ public class CachingServiceImpl implements CachingService {
             globalConfiguration = new GlobalConfigurationBuilder()
                     .globalJmxStatistics()
                         .jmxDomain("org.apache.marmotta.platform")
+                        .allowDuplicateDomains(true)
                     .build();
 
             defaultConfiguration = new ConfigurationBuilder()
@@ -130,12 +132,7 @@ public class CachingServiceImpl implements CachingService {
 
         cacheManager = new DefaultCacheManager(globalConfiguration, defaultConfiguration, true);
 
-        if(log.isInfoEnabled()) {
-            log.info("Members in Apache Marmotta cache cluster:");
-            for(Address a : cacheManager.getMembers()) {
-                log.info(" - {}",a);
-            }
-        }
+        log.info("initialised cache manager ({})", globalConfiguration.isClustered() ? "cluster name: "+globalConfiguration.transport().clusterName() : "single host");
     }
 
     /**
@@ -215,7 +212,11 @@ public class CachingServiceImpl implements CachingService {
     @PreDestroy
     public void destroy() {
         log.info("Apache Marmotta Caching Service shutting down ...");
-        cacheManager.stop();
+        if(cacheManager.getStatus() == ComponentStatus.RUNNING) {
+            log.info("- shutting down Infinispan cache manager ...");
+            cacheManager.stop();
+            log.info("  ... success!");
+        }
         log.info("Apache Marmotta Caching Service shut down successfully.");
     }
 }

http://git-wip-us.apache.org/repos/asf/marmotta/blob/c5cf84e7/platform/marmotta-core/src/main/resources/jgroups-marmotta.xml
----------------------------------------------------------------------
diff --git a/platform/marmotta-core/src/main/resources/jgroups-marmotta.xml b/platform/marmotta-core/src/main/resources/jgroups-marmotta.xml
index 8529c45..fb9b7d3 100644
--- a/platform/marmotta-core/src/main/resources/jgroups-marmotta.xml
+++ b/platform/marmotta-core/src/main/resources/jgroups-marmotta.xml
@@ -20,7 +20,7 @@
         xsi:schemaLocation="urn:org:jgroups http://www.jgroups.org/schema/JGroups-3.4.xsd">
    <UDP
          mcast_addr="${jgroups.udp.mcast_addr:228.6.7.8}"
-         mcast_port="${jgroups.udp.mcast_port:46656}"
+         mcast_port="${jgroups.udp.mcast_port:46655}"
          tos="8"
          ucast_recv_buf_size="20m"
          ucast_send_buf_size="640k"