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/17 15:47:37 UTC
[4/7] git commit: finished MARMOTTA-388: transition from EHCache to
Infinispan
finished MARMOTTA-388: transition from EHCache to Infinispan
Project: http://git-wip-us.apache.org/repos/asf/marmotta/repo
Commit: http://git-wip-us.apache.org/repos/asf/marmotta/commit/61c14a19
Tree: http://git-wip-us.apache.org/repos/asf/marmotta/tree/61c14a19
Diff: http://git-wip-us.apache.org/repos/asf/marmotta/diff/61c14a19
Branch: refs/heads/develop
Commit: 61c14a19f2b38b65743e8ef3991b13f7b4ec3cac
Parents: af9a800
Author: Sebastian Schaffert <ss...@apache.org>
Authored: Tue Dec 17 14:13:17 2013 +0100
Committer: Sebastian Schaffert <ss...@apache.org>
Committed: Tue Dec 17 14:13:17 2013 +0100
----------------------------------------------------------------------
.../marmotta/kiwi/caching/KiWiCacheManager.java | 27 +++-
.../src/main/resources/jgroups-kiwi.xml | 74 +++++++++++
.../backend/kiwi/model/KiWiCacheEntry.java | 4 +-
.../LDCachingKiWiPersistenceConnection.java | 27 ++--
parent/pom.xml | 5 -
.../backend/kiwi/KiWiStoreProvider.java | 2 +-
.../main/resources/config-defaults.properties | 3 +-
.../resources/config-descriptions.properties | 3 -
.../platform/core/api/cache/CachingService.java | 15 ++-
.../core/api/modules/ResourceEntry.java | 3 +-
.../core/logging/CacheLoggingModule.java | 2 +-
.../core/services/cache/CachingServiceImpl.java | 133 ++++++++++++++-----
.../services/http/HttpClientServiceImpl.java | 111 +++++++++++++++-
.../modules/MarmottaResourceServiceImpl.java | 12 +-
.../main/resources/config-defaults.properties | 10 ++
.../resources/config-descriptions.properties | 7 +
.../src/main/resources/jgroups-marmotta.xml | 74 +++++++++++
.../user/services/AccountServiceImpl.java | 21 ++-
18 files changed, 438 insertions(+), 95 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/marmotta/blob/61c14a19/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 8af3ba6..f22a6ad 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
@@ -70,7 +70,7 @@ public class KiWiCacheManager {
.defaultTransport()
.clusterName(config.getName())
.machineId("instance-" + config.getDatacenterId())
- .addProperty("configurationFile", "jgroups-udp.xml")
+ .addProperty("configurationFile", "jgroups-kiwi.xml")
.globalJmxStatistics()
.build();
@@ -154,6 +154,28 @@ 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.
*
@@ -318,7 +340,8 @@ public class KiWiCacheManager {
String cacheName = iterator.next();
Cache<String,Object> cache = cacheManager.getCache(cacheName);
cache.clear();
- } }
+ }
+ }
/**
* Shutdown this cache manager instance. Will shutdown the underlying EHCache cache manager.
http://git-wip-us.apache.org/repos/asf/marmotta/blob/61c14a19/libraries/kiwi/kiwi-triplestore/src/main/resources/jgroups-kiwi.xml
----------------------------------------------------------------------
diff --git a/libraries/kiwi/kiwi-triplestore/src/main/resources/jgroups-kiwi.xml b/libraries/kiwi/kiwi-triplestore/src/main/resources/jgroups-kiwi.xml
new file mode 100644
index 0000000..aa5ce8c
--- /dev/null
+++ b/libraries/kiwi/kiwi-triplestore/src/main/resources/jgroups-kiwi.xml
@@ -0,0 +1,74 @@
+<config xmlns="urn:org:jgroups"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ 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:46655}"
+ tos="8"
+ ucast_recv_buf_size="20m"
+ ucast_send_buf_size="640k"
+ mcast_recv_buf_size="25m"
+ mcast_send_buf_size="640k"
+ loopback="true"
+ max_bundle_size="31k"
+ ip_ttl="${jgroups.udp.ip_ttl:2}"
+ enable_diagnostics="false"
+ bundler_type="old"
+
+ thread_naming_pattern="pl"
+
+ thread_pool.enabled="true"
+ thread_pool.min_threads="2"
+ thread_pool.max_threads="30"
+ thread_pool.keep_alive_time="60000"
+ thread_pool.queue_enabled="true"
+ thread_pool.queue_max_size="100"
+ thread_pool.rejection_policy="Discard"
+
+ oob_thread_pool.enabled="true"
+ oob_thread_pool.min_threads="2"
+ oob_thread_pool.max_threads="30"
+ oob_thread_pool.keep_alive_time="60000"
+ oob_thread_pool.queue_enabled="false"
+ oob_thread_pool.queue_max_size="100"
+ oob_thread_pool.rejection_policy="Discard"
+
+ internal_thread_pool.enabled="true"
+ internal_thread_pool.min_threads="1"
+ internal_thread_pool.max_threads="10"
+ internal_thread_pool.keep_alive_time="60000"
+ internal_thread_pool.queue_enabled="true"
+ internal_thread_pool.queue_max_size="100"
+ internal_thread_pool.rejection_policy="Discard"
+ />
+
+ <PING timeout="3000" num_initial_members="3"/>
+ <MERGE2 max_interval="30000" min_interval="10000"/>
+
+ <FD_SOCK/>
+ <FD_ALL timeout="15000" interval="3000"/>
+ <VERIFY_SUSPECT timeout="1500"/>
+
+ <pbcast.NAKACK2
+ xmit_interval="1000"
+ xmit_table_num_rows="100"
+ xmit_table_msgs_per_row="10000"
+ xmit_table_max_compaction_time="10000"
+ max_msg_batch_size="100"/>
+ <UNICAST3
+ xmit_interval="500"
+ xmit_table_num_rows="20"
+ xmit_table_msgs_per_row="10000"
+ xmit_table_max_compaction_time="10000"
+ max_msg_batch_size="100"
+ conn_expiry_timeout="0"/>
+
+ <pbcast.STABLE stability_delay="500" desired_avg_gossip="5000" max_bytes="1m"/>
+ <pbcast.GMS print_local_addr="false" join_timeout="3000" view_bundling="true"/>
+ <tom.TOA/> <!-- the TOA is only needed for total order transactions-->
+
+ <UFC max_credits="2m" min_threshold="0.40"/>
+ <MFC max_credits="2m" min_threshold="0.40"/>
+ <FRAG2 frag_size="30k" />
+ <RSVP timeout="60000" resend_interval="500" ack_on_delivery="false" />
+</config>
http://git-wip-us.apache.org/repos/asf/marmotta/blob/61c14a19/libraries/ldcache/ldcache-backend-kiwi/src/main/java/org/apache/marmotta/ldcache/backend/kiwi/model/KiWiCacheEntry.java
----------------------------------------------------------------------
diff --git a/libraries/ldcache/ldcache-backend-kiwi/src/main/java/org/apache/marmotta/ldcache/backend/kiwi/model/KiWiCacheEntry.java b/libraries/ldcache/ldcache-backend-kiwi/src/main/java/org/apache/marmotta/ldcache/backend/kiwi/model/KiWiCacheEntry.java
index 265970d..fb57cbd 100644
--- a/libraries/ldcache/ldcache-backend-kiwi/src/main/java/org/apache/marmotta/ldcache/backend/kiwi/model/KiWiCacheEntry.java
+++ b/libraries/ldcache/ldcache-backend-kiwi/src/main/java/org/apache/marmotta/ldcache/backend/kiwi/model/KiWiCacheEntry.java
@@ -19,12 +19,14 @@ package org.apache.marmotta.ldcache.backend.kiwi.model;
import org.apache.marmotta.ldcache.model.CacheEntry;
+import java.io.Serializable;
+
/**
* Add file description here!
* <p/>
* Author: Sebastian Schaffert (sschaffert@apache.org)
*/
-public class KiWiCacheEntry extends CacheEntry {
+public class KiWiCacheEntry extends CacheEntry implements Serializable {
Long id;
http://git-wip-us.apache.org/repos/asf/marmotta/blob/61c14a19/libraries/ldcache/ldcache-backend-kiwi/src/main/java/org/apache/marmotta/ldcache/backend/kiwi/persistence/LDCachingKiWiPersistenceConnection.java
----------------------------------------------------------------------
diff --git a/libraries/ldcache/ldcache-backend-kiwi/src/main/java/org/apache/marmotta/ldcache/backend/kiwi/persistence/LDCachingKiWiPersistenceConnection.java b/libraries/ldcache/ldcache-backend-kiwi/src/main/java/org/apache/marmotta/ldcache/backend/kiwi/persistence/LDCachingKiWiPersistenceConnection.java
index bd79539..a0691d2 100644
--- a/libraries/ldcache/ldcache-backend-kiwi/src/main/java/org/apache/marmotta/ldcache/backend/kiwi/persistence/LDCachingKiWiPersistenceConnection.java
+++ b/libraries/ldcache/ldcache-backend-kiwi/src/main/java/org/apache/marmotta/ldcache/backend/kiwi/persistence/LDCachingKiWiPersistenceConnection.java
@@ -18,8 +18,6 @@
package org.apache.marmotta.ldcache.backend.kiwi.persistence;
import info.aduna.iteration.CloseableIteration;
-import net.sf.ehcache.Cache;
-import net.sf.ehcache.Element;
import org.apache.marmotta.kiwi.model.rdf.KiWiNode;
import org.apache.marmotta.kiwi.model.rdf.KiWiResource;
import org.apache.marmotta.kiwi.persistence.KiWiConnection;
@@ -27,6 +25,7 @@ import org.apache.marmotta.kiwi.persistence.util.ResultSetIteration;
import org.apache.marmotta.kiwi.persistence.util.ResultTransformerFunction;
import org.apache.marmotta.ldcache.backend.kiwi.model.KiWiCacheEntry;
import org.apache.marmotta.ldcache.model.CacheEntry;
+import org.infinispan.Cache;
import org.openrdf.model.URI;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -53,13 +52,13 @@ public class LDCachingKiWiPersistenceConnection {
/**
* Cache entries by resource
*/
- private Cache entryResourceCache;
+ private Cache<String,KiWiCacheEntry> entryResourceCache;
/**
* Cache entries by ID
*/
- private Cache entryIdCache;
+ private Cache<Long,KiWiCacheEntry> entryIdCache;
public LDCachingKiWiPersistenceConnection(KiWiConnection connection) throws SQLException {
@@ -72,11 +71,11 @@ public class LDCachingKiWiPersistenceConnection {
public KiWiCacheEntry constructCacheEntry(ResultSet row) throws SQLException {
Long id = row.getLong("id");
- Element cached = entryIdCache.get(id);
+ KiWiCacheEntry cached = entryIdCache.get(id);
// lookup element in cache first, so we can avoid reconstructing it if it is already there
if(cached != null) {
- return (KiWiCacheEntry)cached.getObjectValue();
+ return cached;
}
KiWiCacheEntry entry = new KiWiCacheEntry();
@@ -87,8 +86,8 @@ public class LDCachingKiWiPersistenceConnection {
entry.setResource((URI) connection.loadNodeById(row.getLong("resource_id")));
entry.setTripleCount(row.getInt("triple_count"));
- entryIdCache.put(new Element(id,entry));
- entryResourceCache.put(new Element(entry.getResource().stringValue(),entry));
+ entryIdCache.put(id,entry);
+ entryResourceCache.put(entry.getResource().stringValue(),entry);
return entry;
}
@@ -103,11 +102,11 @@ public class LDCachingKiWiPersistenceConnection {
*/
public KiWiCacheEntry getCacheEntry(String uri) throws SQLException {
- Element cached = entryResourceCache.get(uri);
+ KiWiCacheEntry cached = entryResourceCache.get(uri);
// lookup element in cache first, so we can avoid reconstructing it if it is already there
if(cached != null) {
- return (KiWiCacheEntry)cached.getObjectValue();
+ return cached;
}
PreparedStatement query = connection.getPreparedStatement("load.entry_by_uri");
@@ -169,8 +168,8 @@ public class LDCachingKiWiPersistenceConnection {
log.debug("persisted ld-cache entry with id {}", kEntry.getId());
- entryIdCache.put(new Element(kEntry.getId(),kEntry));
- entryResourceCache.put(new Element(kEntry.getResource().stringValue(),kEntry));
+ entryIdCache.put(kEntry.getId(),kEntry);
+ entryResourceCache.put(kEntry.getResource().stringValue(),kEntry);
}
@@ -205,11 +204,11 @@ public class LDCachingKiWiPersistenceConnection {
deleteEntry.setString(1,uri);
deleteEntry.executeUpdate();
- Element cached = entryResourceCache.get(uri);
+ KiWiCacheEntry cached = entryResourceCache.get(uri);
if(cached != null) {
entryResourceCache.remove(uri);
- entryIdCache.remove(((KiWiCacheEntry) cached.getObjectValue()).getId());
+ entryIdCache.remove(cached.getId());
}
}
http://git-wip-us.apache.org/repos/asf/marmotta/blob/61c14a19/parent/pom.xml
----------------------------------------------------------------------
diff --git a/parent/pom.xml b/parent/pom.xml
index 62cf99f..8be8f54 100644
--- a/parent/pom.xml
+++ b/parent/pom.xml
@@ -1449,11 +1449,6 @@
</dependency>
<dependency>
<groupId>org.apache.marmotta</groupId>
- <artifactId>ldcache-backend-ehcache</artifactId>
- <version>${project.version}</version>
- </dependency>
- <dependency>
- <groupId>org.apache.marmotta</groupId>
<artifactId>ldcache-sail-kiwi</artifactId>
<version>${project.version}</version>
</dependency>
http://git-wip-us.apache.org/repos/asf/marmotta/blob/61c14a19/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 979c806..b7d63e2 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
@@ -112,7 +112,7 @@ 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("database.clustered", false));
+ configuration.setClustered(configurationService.getBooleanConfiguration("clustering.enabled", false));
if("native".equalsIgnoreCase(configurationService.getStringConfiguration(SPARQL_STRATEGY))) {
return new KiWiSparqlSail(new KiWiStore(configuration));
http://git-wip-us.apache.org/repos/asf/marmotta/blob/61c14a19/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 65c013d..6ee6eb6 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,6 +69,5 @@ database.mysql.driver = com.mysql.jdbc.Driver
database.mysql.url = jdbc:mysql://localhost:3306/lmf?useUnicode=true&characterEncoding=UTF-8&rewriteBatchedStatements=true
-# Turn on cluster-specific configuration options (e.g. replicated and distributed caching, synchronization, ...)
-database.clustered = false
+
http://git-wip-us.apache.org/repos/asf/marmotta/blob/61c14a19/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 c214f3f..49c53a2 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,6 +53,3 @@ 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
-
-database.clustered.description = Turn on cluster-specific configuration options (e.g. replicated and distributed caching, synchronization, ...)
-database.clustered.type = java.lang.Boolean
http://git-wip-us.apache.org/repos/asf/marmotta/blob/61c14a19/platform/marmotta-core/src/main/java/org/apache/marmotta/platform/core/api/cache/CachingService.java
----------------------------------------------------------------------
diff --git a/platform/marmotta-core/src/main/java/org/apache/marmotta/platform/core/api/cache/CachingService.java b/platform/marmotta-core/src/main/java/org/apache/marmotta/platform/core/api/cache/CachingService.java
index 4329a3e..00cb18f 100644
--- a/platform/marmotta-core/src/main/java/org/apache/marmotta/platform/core/api/cache/CachingService.java
+++ b/platform/marmotta-core/src/main/java/org/apache/marmotta/platform/core/api/cache/CachingService.java
@@ -17,10 +17,11 @@
*/
package org.apache.marmotta.platform.core.api.cache;
-import net.sf.ehcache.CacheManager;
-import net.sf.ehcache.Ehcache;
+import org.infinispan.Cache;
+import org.infinispan.manager.EmbeddedCacheManager;
import javax.enterprise.inject.spi.InjectionPoint;
+import java.util.Set;
/**
* Add file description here!
@@ -29,13 +30,15 @@ import javax.enterprise.inject.spi.InjectionPoint;
*/
public interface CachingService {
- public Ehcache getCache(InjectionPoint injectionPoint);
- public String[] getCacheNames();
+
+ public Cache getCache(InjectionPoint injectionPoint);
+
+ public Set<String> getCacheNames();
public void clearAll();
- Ehcache getCacheByName(String cacheName);
+ public Cache getCacheByName(String cacheName);
- CacheManager getCacheManager();
+ public EmbeddedCacheManager getCacheManager();
}
http://git-wip-us.apache.org/repos/asf/marmotta/blob/61c14a19/platform/marmotta-core/src/main/java/org/apache/marmotta/platform/core/api/modules/ResourceEntry.java
----------------------------------------------------------------------
diff --git a/platform/marmotta-core/src/main/java/org/apache/marmotta/platform/core/api/modules/ResourceEntry.java b/platform/marmotta-core/src/main/java/org/apache/marmotta/platform/core/api/modules/ResourceEntry.java
index 192e115..d3d4b39 100644
--- a/platform/marmotta-core/src/main/java/org/apache/marmotta/platform/core/api/modules/ResourceEntry.java
+++ b/platform/marmotta-core/src/main/java/org/apache/marmotta/platform/core/api/modules/ResourceEntry.java
@@ -17,6 +17,7 @@
*/
package org.apache.marmotta.platform.core.api.modules;
+import java.io.Serializable;
import java.net.URL;
/**
@@ -24,7 +25,7 @@ import java.net.URL;
* <p/>
* User: sschaffe
*/
-public class ResourceEntry {
+public class ResourceEntry implements Serializable {
/**
* The path relative to the web application root under which this resource is accessed.
http://git-wip-us.apache.org/repos/asf/marmotta/blob/61c14a19/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 38eb5f7..af6709c 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
@@ -58,6 +58,6 @@ public class CacheLoggingModule extends BaseLoggingModule {
*/
@Override
public Collection<String> getPackages() {
- return ImmutableSet.of("net.sf.ehcache", "org.apache.marmotta.platform.core.services.cache");
+ return ImmutableSet.of("org.infinispan", "org.apache.marmotta.platform.core.services.cache");
}
}
http://git-wip-us.apache.org/repos/asf/marmotta/blob/61c14a19/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 f1e9d80..729a563 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
@@ -18,10 +18,19 @@
package org.apache.marmotta.platform.core.services.cache;
import org.apache.marmotta.platform.core.api.cache.CachingService;
+import org.apache.marmotta.platform.core.api.config.ConfigurationService;
import org.apache.marmotta.platform.core.events.SystemRestartingEvent;
import org.apache.marmotta.platform.core.qualifiers.cache.MarmottaCache;
-import net.sf.ehcache.CacheManager;
-import net.sf.ehcache.Ehcache;
+import org.infinispan.Cache;
+import org.infinispan.configuration.cache.CacheMode;
+import org.infinispan.configuration.cache.Configuration;
+import org.infinispan.configuration.cache.ConfigurationBuilder;
+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.manager.DefaultCacheManager;
+import org.infinispan.manager.EmbeddedCacheManager;
import org.slf4j.Logger;
import javax.annotation.PostConstruct;
@@ -31,7 +40,9 @@ import javax.enterprise.event.Observes;
import javax.enterprise.inject.Produces;
import javax.enterprise.inject.spi.InjectionPoint;
import javax.inject.Inject;
-import java.net.URL;
+import java.util.Iterator;
+import java.util.Set;
+import java.util.concurrent.TimeUnit;
/**
* A service that offers a EHCache system cache implementation for use by other components
@@ -47,8 +58,16 @@ public class CachingServiceImpl implements CachingService {
@Inject
private Logger log;
+ @Inject
+ private ConfigurationService configurationService;
+
+ private EmbeddedCacheManager cacheManager;
+
+ private GlobalConfiguration globalConfiguration;
+
+ // default configuration: distributed cache, 100000 entries, 300 seconds expiration, 60 seconds idle
+ private Configuration defaultConfiguration;
- private CacheManager manager;
public CachingServiceImpl() {
}
@@ -56,15 +75,57 @@ public class CachingServiceImpl implements CachingService {
@PostConstruct
public void initialize() {
- URL url = this.getClass().getClassLoader().getResource("ehcache-marmotta.xml");
+ boolean clustered = configurationService.getBooleanConfiguration("clustering.enabled", false);
+
+ log.info("Apache Marmotta Caching Service starting up ({}) ...", clustered ? "clustering" : "single host" );
+ if(clustered) {
+ globalConfiguration = new GlobalConfigurationBuilder()
+ .transport()
+ .defaultTransport()
+ .clusterName(configurationService.getStringConfiguration("clustering.name", "Marmotta"))
+ .machineId(configurationService.getServerName())
+ .addProperty("configurationFile", "jgroups-marmotta.xml")
+ .globalJmxStatistics()
+ .build();
+
+
+ defaultConfiguration = new ConfigurationBuilder()
+ .clustering()
+ .cacheMode(CacheMode.DIST_ASYNC)
+ .async()
+ .l1()
+ .lifespan(25, TimeUnit.SECONDS)
+ .hash()
+ .numOwners(2)
+ .numSegments(100)
+ .consistentHashFactory(new SyncConsistentHashFactory())
+ .eviction()
+ .strategy(EvictionStrategy.LIRS)
+ .maxEntries(1000)
+ .expiration()
+ .lifespan(5, TimeUnit.MINUTES)
+ .maxIdle(1, TimeUnit.MINUTES)
+ .build();
+ } else {
+ globalConfiguration = new GlobalConfigurationBuilder()
+ .globalJmxStatistics()
+ .build();
+
+ defaultConfiguration = new ConfigurationBuilder()
+ .clustering()
+ .cacheMode(CacheMode.LOCAL)
+ .eviction()
+ .strategy(EvictionStrategy.LIRS)
+ .maxEntries(1000)
+ .expiration()
+ .lifespan(5, TimeUnit.MINUTES)
+ .maxIdle(1, TimeUnit.MINUTES)
+ .build();
- // backwards compatibility
- if(url == null) {
- url = this.getClass().getClassLoader().getResource("ehcache-lmf.xml");
}
- log.info("Apache Marmotta Caching Service starting up (configuration at {}) ...",url);
- manager = CacheManager.create(url);
+
+ cacheManager = new DefaultCacheManager(globalConfiguration, defaultConfiguration, true);
}
/**
@@ -82,35 +143,39 @@ public class CachingServiceImpl implements CachingService {
*/
@Override
@Produces @MarmottaCache("")
- public Ehcache getCache(InjectionPoint injectionPoint) {
+ public Cache getCache(InjectionPoint injectionPoint) {
String cacheName = injectionPoint.getAnnotated().getAnnotation(MarmottaCache.class).value();
return getCacheByName(cacheName);
}
- @Override
- public Ehcache getCacheByName(String cacheName) {
- if(!manager.cacheExists(cacheName)) {
- log.info("added new cache with name {}",cacheName);
- manager.addCache(cacheName);
- }
+ /**
+ * Allow CDI injection of the default cache
+ * @return
+ */
+ @Produces
+ public Configuration getDefaultConfiguration() {
+ return defaultConfiguration;
+ }
- Ehcache cache = manager.getEhcache(cacheName);
- cache.setStatisticsEnabled(true);
- return cache;
+ @Override
+ public Cache getCacheByName(String cacheName) {
+ return cacheManager.getCache(cacheName, true);
}
@Override
- public String[] getCacheNames() {
- return manager.getCacheNames();
+ public Set<String> getCacheNames() {
+ return cacheManager.getCacheNames();
}
@Override
- public CacheManager getCacheManager() {
- return manager;
+ @Produces
+ @ApplicationScoped
+ public EmbeddedCacheManager getCacheManager() {
+ return cacheManager;
}
@@ -120,27 +185,27 @@ public class CachingServiceImpl implements CachingService {
*/
public void systemRestart(@Observes SystemRestartingEvent e) {
log.warn("system restarted, flushing caches ...");
- manager.clearAll();
+ cacheManager.stop();
+ cacheManager.start();
}
@Override
public void clearAll() {
- manager.clearAll();
+ Set<String> set = cacheManager.getCacheNames();
+ Iterator<String> iterator = set.iterator();
+ while(iterator.hasNext()){
+ String cacheName = iterator.next();
+ Cache<String,Object> cache = cacheManager.getCache(cacheName);
+ cache.clear();
+ }
}
@PreDestroy
public void destroy() {
log.info("Apache Marmotta Caching Service shutting down ...");
- /*
- for(String cacheName : manager.getCacheNames()) {
- log.info("Disposing cache {} ...",cacheName);
- Cache cache = manager.getCache(cacheName);
- cache.dispose();
- }
- */
- manager.shutdown();
+ cacheManager.stop();
log.info("Apache Marmotta Caching Service shut down successfully.");
}
}
http://git-wip-us.apache.org/repos/asf/marmotta/blob/61c14a19/platform/marmotta-core/src/main/java/org/apache/marmotta/platform/core/services/http/HttpClientServiceImpl.java
----------------------------------------------------------------------
diff --git a/platform/marmotta-core/src/main/java/org/apache/marmotta/platform/core/services/http/HttpClientServiceImpl.java b/platform/marmotta-core/src/main/java/org/apache/marmotta/platform/core/services/http/HttpClientServiceImpl.java
index afda0df..7d27576 100644
--- a/platform/marmotta-core/src/main/java/org/apache/marmotta/platform/core/services/http/HttpClientServiceImpl.java
+++ b/platform/marmotta-core/src/main/java/org/apache/marmotta/platform/core/services/http/HttpClientServiceImpl.java
@@ -17,14 +17,12 @@
*/
package org.apache.marmotta.platform.core.services.http;
-import net.sf.ehcache.Ehcache;
import org.apache.http.*;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.HttpRequestRetryHandler;
import org.apache.http.client.ResponseHandler;
-import org.apache.http.client.cache.CacheResponseStatus;
-import org.apache.http.client.cache.HttpCacheStorage;
+import org.apache.http.client.cache.*;
import org.apache.http.client.methods.*;
import org.apache.http.client.params.ClientPNames;
import org.apache.http.conn.ClientConnectionManager;
@@ -38,7 +36,7 @@ import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.impl.client.DefaultRedirectStrategy;
import org.apache.http.impl.client.cache.CacheConfig;
import org.apache.http.impl.client.cache.CachingHttpClient;
-import org.apache.http.impl.client.cache.ehcache.EhcacheHttpCacheStorage;
+import org.apache.http.impl.client.cache.DefaultHttpCacheEntrySerializer;
import org.apache.http.impl.conn.PoolingClientConnectionManager;
import org.apache.http.params.*;
import org.apache.http.pool.PoolStats;
@@ -56,14 +54,16 @@ import org.apache.marmotta.platform.core.qualifiers.cache.MarmottaCache;
import org.apache.marmotta.platform.core.services.http.response.LastModifiedResponseHandler;
import org.apache.marmotta.platform.core.services.http.response.StatusCodeResponseHandler;
import org.apache.marmotta.platform.core.services.http.response.StringBodyResponseHandler;
+import org.infinispan.Cache;
import org.slf4j.Logger;
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import javax.enterprise.context.ApplicationScoped;
import javax.enterprise.event.Observes;
-import javax.enterprise.inject.Instance;
import javax.inject.Inject;
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.nio.charset.Charset;
@@ -101,7 +101,7 @@ public class HttpClientServiceImpl implements HttpClientService {
@Inject
@MarmottaCache("http-client-cache")
- private Instance<Ehcache> ehcache;
+ private Cache httpCache;
private HttpClient httpClient;
private IdleConnectionMonitorThread idleConnectionMonitorThread;
@@ -308,7 +308,7 @@ public class HttpClientServiceImpl implements HttpClientService {
cacheConfig.setMaxCacheEntries(1000);
cacheConfig.setMaxObjectSize(81920);
- final HttpCacheStorage cacheStore = new EhcacheHttpCacheStorage(ehcache.get(), cacheConfig);
+ final HttpCacheStorage cacheStore = new InfinispanHttpCacheStorage(httpCache);
this.httpClient = new MonitoredHttpClient(new CachingHttpClient(hc, cacheStore, cacheConfig));
} else {
@@ -806,4 +806,101 @@ public class HttpClientServiceImpl implements HttpClientService {
}
}
+
+
+
+ private static class InfinispanHttpCacheStorage implements HttpCacheStorage {
+
+ Cache<String, byte[]> cache;
+
+ private final HttpCacheEntrySerializer serializer;
+
+
+ private InfinispanHttpCacheStorage(Cache<String, byte[]> cache) {
+ this.cache = cache;
+ this.serializer = new DefaultHttpCacheEntrySerializer();
+ }
+
+ /**
+ * Store a given cache entry under the given key.
+ *
+ * @param key where in the cache to store the entry
+ * @param entry cached response to store
+ * @throws java.io.IOException
+ */
+ @Override
+ public void putEntry(String key, HttpCacheEntry entry) throws IOException {
+ final ByteArrayOutputStream bos = new ByteArrayOutputStream();
+ serializer.writeTo(entry, bos);
+
+ cache.put(key,bos.toByteArray());
+ }
+
+ /**
+ * Retrieves the cache entry stored under the given key
+ * or null if no entry exists under that key.
+ *
+ * @param key cache key
+ * @return an {@link org.apache.http.client.cache.HttpCacheEntry} or {@code null} if no
+ * entry exists
+ * @throws java.io.IOException
+ */
+ @Override
+ public HttpCacheEntry getEntry(String key) throws IOException {
+ byte[] data = cache.get(key);
+ if(data == null) {
+ return null;
+ } else {
+ return serializer.readFrom(new ByteArrayInputStream(data));
+ }
+ }
+
+ /**
+ * Deletes/invalidates/removes any cache entries currently
+ * stored under the given key.
+ *
+ * @param key
+ * @throws java.io.IOException
+ */
+ @Override
+ public void removeEntry(String key) throws IOException {
+ cache.remove(key);
+ }
+
+ /**
+ * Atomically applies the given callback to update an existing cache
+ * entry under a given key.
+ *
+ * @param key indicates which entry to modify
+ * @param callback performs the update; see
+ * {@link org.apache.http.client.cache.HttpCacheUpdateCallback} for details, but roughly the
+ * callback expects to be handed the current entry and will return
+ * the new value for the entry.
+ * @throws java.io.IOException
+ * @throws org.apache.http.client.cache.HttpCacheUpdateException
+ */
+ @Override
+ public void updateEntry(String key, HttpCacheUpdateCallback callback) throws IOException, HttpCacheUpdateException {
+ final byte[] oldData = cache.get(key);
+
+ HttpCacheEntry existingEntry = null;
+ if(oldData != null){
+ existingEntry = serializer.readFrom(new ByteArrayInputStream(oldData));
+ }
+
+ final HttpCacheEntry updatedEntry = callback.update(existingEntry);
+
+ if (existingEntry == null) {
+ putEntry(key, updatedEntry);
+ return;
+ } else {
+ // Attempt to do a CAS replace, if we fail then retry
+ // While this operation should work fine within this instance, multiple instances
+ // could trample each others' data
+ final ByteArrayOutputStream bos = new ByteArrayOutputStream();
+ serializer.writeTo(updatedEntry, bos);
+ cache.replace(key, oldData, bos.toByteArray());
+ }
+ }
+ }
}
http://git-wip-us.apache.org/repos/asf/marmotta/blob/61c14a19/platform/marmotta-core/src/main/java/org/apache/marmotta/platform/core/services/modules/MarmottaResourceServiceImpl.java
----------------------------------------------------------------------
diff --git a/platform/marmotta-core/src/main/java/org/apache/marmotta/platform/core/services/modules/MarmottaResourceServiceImpl.java b/platform/marmotta-core/src/main/java/org/apache/marmotta/platform/core/services/modules/MarmottaResourceServiceImpl.java
index 1aecba2..0b837e1 100644
--- a/platform/marmotta-core/src/main/java/org/apache/marmotta/platform/core/services/modules/MarmottaResourceServiceImpl.java
+++ b/platform/marmotta-core/src/main/java/org/apache/marmotta/platform/core/services/modules/MarmottaResourceServiceImpl.java
@@ -27,15 +27,13 @@ import org.apache.marmotta.platform.core.api.modules.ResourceEntry;
import org.apache.marmotta.platform.core.events.SystemStartupEvent;
import org.apache.marmotta.platform.core.model.module.ModuleConfiguration;
import org.apache.marmotta.platform.core.qualifiers.cache.MarmottaCache;
-import net.sf.ehcache.Ehcache;
-import net.sf.ehcache.Element;
+import org.infinispan.Cache;
import org.slf4j.Logger;
import javax.annotation.PostConstruct;
import javax.enterprise.context.ApplicationScoped;
import javax.enterprise.event.Observes;
import javax.inject.Inject;
-
import java.io.IOException;
import java.net.URL;
import java.util.Collection;
@@ -66,7 +64,7 @@ public class MarmottaResourceServiceImpl implements MarmottaResourceService {
@Inject @MarmottaCache("resource-cache")
- private Ehcache resourceCache;
+ private Cache resourceCache;
/**
* Used for detecting the mime type of resources contained in KiWi modules
@@ -219,12 +217,12 @@ public class MarmottaResourceServiceImpl implements MarmottaResourceService {
private boolean isCached(String key) {
- return isCacheEnabled() && resourceCache.isKeyInCache(key) && resourceCache.get(key) != null;
+ return isCacheEnabled() && resourceCache.containsKey(key) && resourceCache.get(key) != null;
}
private ResourceEntry getFromCache(String key) {
if (isCacheEnabled())
- return (ResourceEntry) resourceCache.get(key).getObjectValue();
+ return (ResourceEntry) resourceCache.get(key);
else
return null;
}
@@ -232,7 +230,7 @@ public class MarmottaResourceServiceImpl implements MarmottaResourceService {
// Store in the cache
private void putInCache(String key, ResourceEntry data) {
if(isCacheEnabled()) {
- resourceCache.put(new Element(key,data));
+ resourceCache.put(key,data);
}
}
http://git-wip-us.apache.org/repos/asf/marmotta/blob/61c14a19/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 3933aae..278dd9a 100644
--- a/platform/marmotta-core/src/main/resources/config-defaults.properties
+++ b/platform/marmotta-core/src/main/resources/config-defaults.properties
@@ -192,3 +192,13 @@ prefix.rdf = http://www.w3.org/1999/02/22-rdf-syntax-ns#
prefix.skos = http://www.w3.org/2004/02/skos/core#
prefix.ldp = http://www.w3.org/ns/ldp#
prefix.mao = http://www.w3.org/ns/ma-ont#
+
+
+###############################################################################
+# Clustering Configuration
+###############################################################################
+
+
+# Turn on cluster-specific configuration options (e.g. replicated and distributed caching, synchronization, ...)
+clustering.enabled = false
+clustering.name = Marmotta
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/marmotta/blob/61c14a19/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 213fb6c..43983c0 100644
--- a/platform/marmotta-core/src/main/resources/config-descriptions.properties
+++ b/platform/marmotta-core/src/main/resources/config-descriptions.properties
@@ -158,3 +158,10 @@ importer.batchsize.type = java.lang.Integer(10|0|*)
statistics.enabled.description = true
statistics.enabled.type = java.lang.Boolean
+
+
+clustering.enabled.description = Turn on cluster-specific configuration options (e.g. replicated and distributed caching, synchronization, ...)
+clustering.enabled.type = java.lang.Boolean
+
+clustering.name.description = Cluster name to use in cluster configuration (e.g. cache cluster name)
+clustering.name.type = java.lang.String
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/marmotta/blob/61c14a19/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
new file mode 100644
index 0000000..aa5ce8c
--- /dev/null
+++ b/platform/marmotta-core/src/main/resources/jgroups-marmotta.xml
@@ -0,0 +1,74 @@
+<config xmlns="urn:org:jgroups"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ 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:46655}"
+ tos="8"
+ ucast_recv_buf_size="20m"
+ ucast_send_buf_size="640k"
+ mcast_recv_buf_size="25m"
+ mcast_send_buf_size="640k"
+ loopback="true"
+ max_bundle_size="31k"
+ ip_ttl="${jgroups.udp.ip_ttl:2}"
+ enable_diagnostics="false"
+ bundler_type="old"
+
+ thread_naming_pattern="pl"
+
+ thread_pool.enabled="true"
+ thread_pool.min_threads="2"
+ thread_pool.max_threads="30"
+ thread_pool.keep_alive_time="60000"
+ thread_pool.queue_enabled="true"
+ thread_pool.queue_max_size="100"
+ thread_pool.rejection_policy="Discard"
+
+ oob_thread_pool.enabled="true"
+ oob_thread_pool.min_threads="2"
+ oob_thread_pool.max_threads="30"
+ oob_thread_pool.keep_alive_time="60000"
+ oob_thread_pool.queue_enabled="false"
+ oob_thread_pool.queue_max_size="100"
+ oob_thread_pool.rejection_policy="Discard"
+
+ internal_thread_pool.enabled="true"
+ internal_thread_pool.min_threads="1"
+ internal_thread_pool.max_threads="10"
+ internal_thread_pool.keep_alive_time="60000"
+ internal_thread_pool.queue_enabled="true"
+ internal_thread_pool.queue_max_size="100"
+ internal_thread_pool.rejection_policy="Discard"
+ />
+
+ <PING timeout="3000" num_initial_members="3"/>
+ <MERGE2 max_interval="30000" min_interval="10000"/>
+
+ <FD_SOCK/>
+ <FD_ALL timeout="15000" interval="3000"/>
+ <VERIFY_SUSPECT timeout="1500"/>
+
+ <pbcast.NAKACK2
+ xmit_interval="1000"
+ xmit_table_num_rows="100"
+ xmit_table_msgs_per_row="10000"
+ xmit_table_max_compaction_time="10000"
+ max_msg_batch_size="100"/>
+ <UNICAST3
+ xmit_interval="500"
+ xmit_table_num_rows="20"
+ xmit_table_msgs_per_row="10000"
+ xmit_table_max_compaction_time="10000"
+ max_msg_batch_size="100"
+ conn_expiry_timeout="0"/>
+
+ <pbcast.STABLE stability_delay="500" desired_avg_gossip="5000" max_bytes="1m"/>
+ <pbcast.GMS print_local_addr="false" join_timeout="3000" view_bundling="true"/>
+ <tom.TOA/> <!-- the TOA is only needed for total order transactions-->
+
+ <UFC max_credits="2m" min_threshold="0.40"/>
+ <MFC max_credits="2m" min_threshold="0.40"/>
+ <FRAG2 frag_size="30k" />
+ <RSVP timeout="60000" resend_interval="500" ack_on_delivery="false" />
+</config>
http://git-wip-us.apache.org/repos/asf/marmotta/blob/61c14a19/platform/marmotta-user/src/main/java/org/apache/marmotta/platform/user/services/AccountServiceImpl.java
----------------------------------------------------------------------
diff --git a/platform/marmotta-user/src/main/java/org/apache/marmotta/platform/user/services/AccountServiceImpl.java b/platform/marmotta-user/src/main/java/org/apache/marmotta/platform/user/services/AccountServiceImpl.java
index f0ab876..beede92 100644
--- a/platform/marmotta-user/src/main/java/org/apache/marmotta/platform/user/services/AccountServiceImpl.java
+++ b/platform/marmotta-user/src/main/java/org/apache/marmotta/platform/user/services/AccountServiceImpl.java
@@ -18,8 +18,6 @@
package org.apache.marmotta.platform.user.services;
import com.google.common.base.Preconditions;
-import net.sf.ehcache.Ehcache;
-import net.sf.ehcache.Element;
import org.apache.commons.lang3.StringUtils;
import org.apache.marmotta.commons.sesame.model.Namespaces;
import org.apache.marmotta.platform.core.api.config.ConfigurationService;
@@ -32,6 +30,7 @@ import org.apache.marmotta.platform.core.qualifiers.cache.MarmottaCache;
import org.apache.marmotta.platform.user.api.AccountService;
import org.apache.marmotta.platform.user.model.UserAccount;
import org.apache.marmotta.platform.user.model.UserAccount.PasswordHash;
+import org.infinispan.Cache;
import org.openrdf.model.Resource;
import org.openrdf.model.URI;
import org.slf4j.Logger;
@@ -59,7 +58,7 @@ public class AccountServiceImpl implements AccountService {
@Inject
@MarmottaCache("user-cache")
- private Ehcache userCache;
+ private Cache<String,UserAccount> userCache;
private PasswordHash hashAlgo;
@@ -120,8 +119,8 @@ public class AccountServiceImpl implements AccountService {
for (UserAccount userAccount : list) {
- userCache.put(new Element(userAccount.getLogin(), userAccount));
- userCache.put(new Element(userAccount.getWebId(), userAccount));
+ userCache.put(userAccount.getLogin(), userAccount);
+ userCache.put(userAccount.getWebId(), userAccount);
}
return list;
}
@@ -185,7 +184,7 @@ public class AccountServiceImpl implements AccountService {
if (StringUtils.isBlank(login)) return null;
UserAccount account = null;
if (userCache != null && userCache.get(login) != null) {
- account = (UserAccount) userCache.get(login).getObjectValue();
+ account = (UserAccount) userCache.get(login);
} else {
if (configurationService.isConfigurationSet("user."+login+".webid")) {
account = new UserAccount();
@@ -195,8 +194,8 @@ public class AccountServiceImpl implements AccountService {
account.setRoles(new HashSet<String>(configurationService.getListConfiguration("user."+login+".roles")));
account.setWebId(configurationService.getStringConfiguration("user."+login+".webid"));
- userCache.put(new Element(account.getLogin(), account));
- userCache.put(new Element(account.getWebId(), account));
+ userCache.put(account.getLogin(), account);
+ userCache.put(account.getWebId(), account);
} else {
log.info("UserAccount {} not found", login);
}
@@ -210,7 +209,7 @@ public class AccountServiceImpl implements AccountService {
UserAccount account = null;
if (userCache != null && userCache.get(resource) != null) {
- account = (UserAccount) userCache.get(resource).getObjectValue();
+ account = userCache.get(resource);
} else {
for(UserAccount a : listAccounts()) {
if(a.getWebId().equals(resource.stringValue())) {
@@ -219,8 +218,8 @@ public class AccountServiceImpl implements AccountService {
}
}
if (account != null) {
- userCache.put(new Element(account.getLogin(), account));
- userCache.put(new Element(account.getWebId(), account));
+ userCache.put(account.getLogin(), account);
+ userCache.put(account.getWebId(), account);
} else {
log.warn("UserAccount {} not found", resource);
}