You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@gora.apache.org by le...@apache.org on 2016/08/15 17:04:31 UTC
[1/6] gora git commit: GORA-409 tutorial
Repository: gora
Updated Branches:
refs/heads/master ed8081081 -> 61c25fefb
GORA-409 tutorial
Project: http://git-wip-us.apache.org/repos/asf/gora/repo
Commit: http://git-wip-us.apache.org/repos/asf/gora/commit/a02c5dd9
Tree: http://git-wip-us.apache.org/repos/asf/gora/tree/a02c5dd9
Diff: http://git-wip-us.apache.org/repos/asf/gora/diff/a02c5dd9
Branch: refs/heads/master
Commit: a02c5dd9ff307cafdd89ff57c1fdd7f02cd06867
Parents: ed80810
Author: Kevin <dj...@yahoo.com>
Authored: Mon Aug 15 01:11:56 2016 +0530
Committer: Kevin <dj...@yahoo.com>
Committed: Mon Aug 15 01:11:56 2016 +0530
----------------------------------------------------------------------
.../apache/gora/jcache/query/package-info.java | 21 +
.../jcache/store/JCacheCacheEntryListener.java | 25 +-
.../store/JCacheCacheEntryListenerFactory.java | 12 +-
.../jcache/store/JCacheCacheFactoryBuilder.java | 7 +-
.../gora/jcache/store/JCacheCacheLoader.java | 10 +-
.../jcache/store/JCacheCacheLoaderFactory.java | 6 +-
.../gora/jcache/store/JCacheCacheWriter.java | 8 +-
.../jcache/store/JCacheCacheWriterFactory.java | 12 +-
.../apache/gora/jcache/store/JCacheStore.java | 207 +++++----
.../apache/gora/jcache/store/package-info.java | 29 ++
.../gora/jcache/GoraHazelcastTestDriver.java | 5 +
.../gora/jcache/mapreduce/package-info.java | 20 +
.../apache/gora/jcache/store/package-info.java | 20 +
gora-jcache/src/test/resources/gora.properties | 3 +
gora-tutorial/conf/gora.properties | 6 +
gora-tutorial/conf/hazelcast-client.xml | 31 ++
gora-tutorial/conf/hazelcast.xml | 34 ++
gora-tutorial/pom.xml | 5 +
.../tutorial/log/DistributedLogManager.java | 461 +++++++++++++++++++
.../src/main/resources/log4j.properties | 42 ++
pom.xml | 12 +
21 files changed, 856 insertions(+), 120 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/gora/blob/a02c5dd9/gora-jcache/src/main/java/org/apache/gora/jcache/query/package-info.java
----------------------------------------------------------------------
diff --git a/gora-jcache/src/main/java/org/apache/gora/jcache/query/package-info.java b/gora-jcache/src/main/java/org/apache/gora/jcache/query/package-info.java
new file mode 100644
index 0000000..6d6cd1d
--- /dev/null
+++ b/gora-jcache/src/main/java/org/apache/gora/jcache/query/package-info.java
@@ -0,0 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+/**
+ * This package contains all the JCache store query representation class as well as Result set representing class
+ * when query is executed over the JCache dataStore.
+ */
+package org.apache.gora.jcache.query;
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/gora/blob/a02c5dd9/gora-jcache/src/main/java/org/apache/gora/jcache/store/JCacheCacheEntryListener.java
----------------------------------------------------------------------
diff --git a/gora-jcache/src/main/java/org/apache/gora/jcache/store/JCacheCacheEntryListener.java b/gora-jcache/src/main/java/org/apache/gora/jcache/store/JCacheCacheEntryListener.java
index 1f960f5..5891048 100644
--- a/gora-jcache/src/main/java/org/apache/gora/jcache/store/JCacheCacheEntryListener.java
+++ b/gora-jcache/src/main/java/org/apache/gora/jcache/store/JCacheCacheEntryListener.java
@@ -36,10 +36,11 @@ import java.util.concurrent.ConcurrentSkipListSet;
*/
public class JCacheCacheEntryListener<K, T extends PersistentBase>
implements CacheEntryCreatedListener<K, T>,
- CacheEntryRemovedListener<K, T>, CacheEntryUpdatedListener<K, T>, CacheEntryExpiredListener<K, T> {
+ CacheEntryRemovedListener<K, T>, CacheEntryUpdatedListener<K, T>,
+ CacheEntryExpiredListener<K, T>, java.io.Serializable {
private static final Logger LOG = LoggerFactory.getLogger(JCacheCacheEntryListener.class);
- private ConcurrentSkipListSet<K> cacheEntryList;
+ private transient ConcurrentSkipListSet<K> cacheEntryList;
public JCacheCacheEntryListener(ConcurrentSkipListSet cacheEntryList) {
this.cacheEntryList = cacheEntryList;
@@ -48,6 +49,10 @@ public class JCacheCacheEntryListener<K, T extends PersistentBase>
@Override
public void onCreated(Iterable<CacheEntryEvent<? extends K, ? extends T>> cacheEntryEvents)
throws CacheEntryListenerException {
+ //get rid execution of listener chain/executing only one initialized
+ if (cacheEntryList == null) {
+ return;
+ }
for (CacheEntryEvent<? extends K, ? extends T> event : cacheEntryEvents) {
cacheEntryList.add(event.getKey());
LOG.info("Cache entry added on key {}.", event.getKey().toString());
@@ -57,6 +62,10 @@ public class JCacheCacheEntryListener<K, T extends PersistentBase>
@Override
public void onRemoved(Iterable<CacheEntryEvent<? extends K, ? extends T>> cacheEntryEvents)
throws CacheEntryListenerException {
+ //get rid execution of listener chain/executing only one initialized
+ if (cacheEntryList == null) {
+ return;
+ }
for (CacheEntryEvent<? extends K, ? extends T> event : cacheEntryEvents) {
cacheEntryList.remove(event.getKey());
LOG.info("Cache entry removed on key {}.", event.getKey().toString());
@@ -66,6 +75,10 @@ public class JCacheCacheEntryListener<K, T extends PersistentBase>
@Override
public void onUpdated(Iterable<CacheEntryEvent<? extends K, ? extends T>> cacheEntryEvents)
throws CacheEntryListenerException {
+ //get rid execution of listener chain/executing only one initialized
+ if (cacheEntryList == null) {
+ return;
+ }
for (CacheEntryEvent<? extends K, ? extends T> event : cacheEntryEvents) {
LOG.info("Cache entry updated set on key {}.", event.getKey().toString());
}
@@ -74,9 +87,17 @@ public class JCacheCacheEntryListener<K, T extends PersistentBase>
@Override
public void onExpired(Iterable<CacheEntryEvent<? extends K, ? extends T>> cacheEntryEvents)
throws CacheEntryListenerException {
+ //get rid execution of listener chain/executing only one initialized
+ if (cacheEntryList == null) {
+ return;
+ }
for (CacheEntryEvent<? extends K, ? extends T> event : cacheEntryEvents) {
LOG.warn("Cache entry expired on key {}.", event.getKey().toString());
}
}
+ public void setCacheEntryList(ConcurrentSkipListSet<K> cacheEntryList) {
+ this.cacheEntryList = cacheEntryList;
+ }
+
}
http://git-wip-us.apache.org/repos/asf/gora/blob/a02c5dd9/gora-jcache/src/main/java/org/apache/gora/jcache/store/JCacheCacheEntryListenerFactory.java
----------------------------------------------------------------------
diff --git a/gora-jcache/src/main/java/org/apache/gora/jcache/store/JCacheCacheEntryListenerFactory.java b/gora-jcache/src/main/java/org/apache/gora/jcache/store/JCacheCacheEntryListenerFactory.java
index bbd30c0..abc283d 100644
--- a/gora-jcache/src/main/java/org/apache/gora/jcache/store/JCacheCacheEntryListenerFactory.java
+++ b/gora-jcache/src/main/java/org/apache/gora/jcache/store/JCacheCacheEntryListenerFactory.java
@@ -28,12 +28,12 @@ import javax.cache.configuration.Factory;
* responsible for creating cache entry listeners which listens on {@link javax.cache.event.CacheEntryEvent}
* cache entry events EG:- Creation, Removal, etc of keys on caches and trigger actions as specified.
*/
-public class JCacheCacheEntryListenerFactory <K,T extends PersistentBase>
+public class JCacheCacheEntryListenerFactory<K, T extends PersistentBase>
implements Factory<JCacheCacheEntryListener<K, T>> {
- private static final Logger LOG = LoggerFactory.getLogger(JCacheCacheEntryListenerFactory.class);
public static final long serialVersionUID = 201305101634L;
- private transient JCacheCacheEntryListener<K, T> instance;
+ private static final Logger LOG = LoggerFactory.getLogger(JCacheCacheEntryListenerFactory.class);
+ private JCacheCacheEntryListener<K, T> instance;
public JCacheCacheEntryListenerFactory(JCacheCacheEntryListener<K, T> instance) {
LOG.info("JCache cache entry listener factory initialized successfully.");
@@ -45,10 +45,10 @@ public class JCacheCacheEntryListenerFactory <K,T extends PersistentBase>
}
public boolean equals(Object other) {
- if(this == other) {
+ if (this == other) {
return true;
- } else if(other != null && this.getClass() == other.getClass()) {
- JCacheCacheEntryListenerFactory that = (JCacheCacheEntryListenerFactory)other;
+ } else if (other != null && this.getClass() == other.getClass()) {
+ JCacheCacheEntryListenerFactory that = (JCacheCacheEntryListenerFactory) other;
return this.instance.equals(that.instance);
} else {
return false;
http://git-wip-us.apache.org/repos/asf/gora/blob/a02c5dd9/gora-jcache/src/main/java/org/apache/gora/jcache/store/JCacheCacheFactoryBuilder.java
----------------------------------------------------------------------
diff --git a/gora-jcache/src/main/java/org/apache/gora/jcache/store/JCacheCacheFactoryBuilder.java b/gora-jcache/src/main/java/org/apache/gora/jcache/store/JCacheCacheFactoryBuilder.java
index 253d345..75c3f36 100644
--- a/gora-jcache/src/main/java/org/apache/gora/jcache/store/JCacheCacheFactoryBuilder.java
+++ b/gora-jcache/src/main/java/org/apache/gora/jcache/store/JCacheCacheFactoryBuilder.java
@@ -19,6 +19,7 @@ package org.apache.gora.jcache.store;
import org.apache.gora.persistency.impl.PersistentBase;
import org.apache.gora.store.DataStore;
+
import javax.cache.configuration.Factory;
/**
@@ -27,17 +28,17 @@ import javax.cache.configuration.Factory;
*/
public class JCacheCacheFactoryBuilder {
- public static <K, T extends PersistentBase> Factory<JCacheCacheLoader<K,T>>
+ public static <K, T extends PersistentBase> Factory<JCacheCacheLoader<K, T>>
factoryOfCacheLoader(DataStore<K, T> dataStore) {
return new JCacheCacheLoaderFactory<>(new JCacheCacheLoader<>(dataStore));
}
- public static <K, T extends PersistentBase> Factory<JCacheCacheWriter<K,T>>
+ public static <K, T extends PersistentBase> Factory<JCacheCacheWriter<K, T>>
factoryOfCacheWriter(DataStore<K, T> dataStore) {
return new JCacheCacheWriterFactory<>(new JCacheCacheWriter<>(dataStore));
}
- public static <K,T extends PersistentBase> Factory<JCacheCacheEntryListener<K, T>>
+ public static <K, T extends PersistentBase> Factory<JCacheCacheEntryListener<K, T>>
factoryOfEntryListener(JCacheCacheEntryListener<K, T> instance) {
return new JCacheCacheEntryListenerFactory<>(instance);
}
http://git-wip-us.apache.org/repos/asf/gora/blob/a02c5dd9/gora-jcache/src/main/java/org/apache/gora/jcache/store/JCacheCacheLoader.java
----------------------------------------------------------------------
diff --git a/gora-jcache/src/main/java/org/apache/gora/jcache/store/JCacheCacheLoader.java b/gora-jcache/src/main/java/org/apache/gora/jcache/store/JCacheCacheLoader.java
index daf0409..fed2ba2 100644
--- a/gora-jcache/src/main/java/org/apache/gora/jcache/store/JCacheCacheLoader.java
+++ b/gora-jcache/src/main/java/org/apache/gora/jcache/store/JCacheCacheLoader.java
@@ -31,13 +31,13 @@ import java.util.Map;
* {@link org.apache.gora.jcache.store.JCacheCacheLoader} is the primary class
* responsible for loading data beans from persistency dataStore to in memory cache.
*/
-public class JCacheCacheLoader<K, T extends PersistentBase> implements CacheLoader<K, T> {
+public class JCacheCacheLoader<K, T extends PersistentBase> implements CacheLoader<K, T>, java.io.Serializable {
private static final Logger LOG = LoggerFactory.getLogger(JCacheCacheLoader.class);
- private DataStore<K, T> dataStore;
+ private transient DataStore<K, T> dataStore;
public JCacheCacheLoader(DataStore<K, T> dataStore) {
- this.dataStore = dataStore;
+ this.dataStore = dataStore;
}
@Override
@@ -65,4 +65,8 @@ public class JCacheCacheLoader<K, T extends PersistentBase> implements CacheLoad
return loaded;
}
+ public void setDataStore(DataStore<K, T> dataStore) {
+ this.dataStore = dataStore;
+ }
+
}
http://git-wip-us.apache.org/repos/asf/gora/blob/a02c5dd9/gora-jcache/src/main/java/org/apache/gora/jcache/store/JCacheCacheLoaderFactory.java
----------------------------------------------------------------------
diff --git a/gora-jcache/src/main/java/org/apache/gora/jcache/store/JCacheCacheLoaderFactory.java b/gora-jcache/src/main/java/org/apache/gora/jcache/store/JCacheCacheLoaderFactory.java
index 0a86ebe..2b82f1f 100644
--- a/gora-jcache/src/main/java/org/apache/gora/jcache/store/JCacheCacheLoaderFactory.java
+++ b/gora-jcache/src/main/java/org/apache/gora/jcache/store/JCacheCacheLoaderFactory.java
@@ -29,11 +29,11 @@ import javax.cache.configuration.Factory;
* loads data beans from persistency dataStore to in memory cache.
*/
public class JCacheCacheLoaderFactory<K, T extends PersistentBase>
- implements Factory<JCacheCacheLoader<K,T>> {
+ implements Factory<JCacheCacheLoader<K, T>> {
- private static final Logger LOG = LoggerFactory.getLogger(JCacheCacheLoaderFactory.class);
public static final long serialVersionUID = 201305101626L;
- private transient JCacheCacheLoader<K, T> instance;
+ private static final Logger LOG = LoggerFactory.getLogger(JCacheCacheLoaderFactory.class);
+ private JCacheCacheLoader<K, T> instance;
public JCacheCacheLoaderFactory(JCacheCacheLoader<K, T> instance) {
LOG.info("JCache cache entry loader factory initialized successfully.");
http://git-wip-us.apache.org/repos/asf/gora/blob/a02c5dd9/gora-jcache/src/main/java/org/apache/gora/jcache/store/JCacheCacheWriter.java
----------------------------------------------------------------------
diff --git a/gora-jcache/src/main/java/org/apache/gora/jcache/store/JCacheCacheWriter.java b/gora-jcache/src/main/java/org/apache/gora/jcache/store/JCacheCacheWriter.java
index e1e5ae8..b7a95c3 100644
--- a/gora-jcache/src/main/java/org/apache/gora/jcache/store/JCacheCacheWriter.java
+++ b/gora-jcache/src/main/java/org/apache/gora/jcache/store/JCacheCacheWriter.java
@@ -32,10 +32,10 @@ import java.util.Iterator;
* {@link org.apache.gora.jcache.store.JCacheCacheWriter} is the primary class
* responsible for writing data beans to persistency dataStore from in memory cache.
*/
-public class JCacheCacheWriter<K, T extends PersistentBase> implements CacheWriter<K, T> {
+public class JCacheCacheWriter<K, T extends PersistentBase> implements CacheWriter<K, T>, java.io.Serializable {
private static final Logger LOG = LoggerFactory.getLogger(JCacheCacheWriter.class);
- private DataStore<K, T> dataStore;
+ private transient DataStore<K, T> dataStore;
public JCacheCacheWriter(DataStore<K, T> dataStore) {
this.dataStore = dataStore;
@@ -73,4 +73,8 @@ public class JCacheCacheWriter<K, T extends PersistentBase> implements CacheWrit
}
}
+ public void setDataStore(DataStore<K, T> dataStore) {
+ this.dataStore = dataStore;
+ }
+
}
http://git-wip-us.apache.org/repos/asf/gora/blob/a02c5dd9/gora-jcache/src/main/java/org/apache/gora/jcache/store/JCacheCacheWriterFactory.java
----------------------------------------------------------------------
diff --git a/gora-jcache/src/main/java/org/apache/gora/jcache/store/JCacheCacheWriterFactory.java b/gora-jcache/src/main/java/org/apache/gora/jcache/store/JCacheCacheWriterFactory.java
index ef537a7..33c2fbb 100644
--- a/gora-jcache/src/main/java/org/apache/gora/jcache/store/JCacheCacheWriterFactory.java
+++ b/gora-jcache/src/main/java/org/apache/gora/jcache/store/JCacheCacheWriterFactory.java
@@ -28,19 +28,19 @@ import javax.cache.configuration.Factory;
* responsible for creating cache writer {@link javax.cache.integration.CacheWriter} instances which itself
* writes data beans to persistency dataStore from in memory cache.
*/
-public class JCacheCacheWriterFactory<K, T extends PersistentBase> implements Factory<JCacheCacheWriter<K,T>> {
+public class JCacheCacheWriterFactory<K, T extends PersistentBase> implements Factory<JCacheCacheWriter<K, T>> {
- private static final Logger LOG = LoggerFactory.getLogger(JCacheCacheWriterFactory.class);
public static final long serialVersionUID = 201205101621L;
- private transient JCacheCacheWriter<K,T> instance;
+ private static final Logger LOG = LoggerFactory.getLogger(JCacheCacheWriterFactory.class);
+ private JCacheCacheWriter<K, T> instance;
- public JCacheCacheWriterFactory(JCacheCacheWriter<K,T> instance) {
+ public JCacheCacheWriterFactory(JCacheCacheWriter<K, T> instance) {
LOG.info("JCache cache writer factory initialized successfully.");
this.instance = instance;
}
- public JCacheCacheWriter<K,T> create() {
- return (JCacheCacheWriter<K,T>)this.instance;
+ public JCacheCacheWriter<K, T> create() {
+ return (JCacheCacheWriter<K, T>) this.instance;
}
public boolean equals(Object other) {
http://git-wip-us.apache.org/repos/asf/gora/blob/a02c5dd9/gora-jcache/src/main/java/org/apache/gora/jcache/store/JCacheStore.java
----------------------------------------------------------------------
diff --git a/gora-jcache/src/main/java/org/apache/gora/jcache/store/JCacheStore.java b/gora-jcache/src/main/java/org/apache/gora/jcache/store/JCacheStore.java
index 6e58e55..f0c9c27 100644
--- a/gora-jcache/src/main/java/org/apache/gora/jcache/store/JCacheStore.java
+++ b/gora-jcache/src/main/java/org/apache/gora/jcache/store/JCacheStore.java
@@ -21,9 +21,9 @@ import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.Iterator;
-import java.util.Properties;
-import java.util.List;
import java.util.Arrays;
+import java.util.List;
+import java.util.Properties;
import java.util.ArrayList;
import java.util.concurrent.ConcurrentSkipListSet;
import java.util.concurrent.TimeUnit;
@@ -63,6 +63,7 @@ import org.slf4j.LoggerFactory;
import javax.cache.Cache;
import javax.cache.CacheManager;
import javax.cache.Caching;
+import javax.cache.configuration.CacheEntryListenerConfiguration;
import javax.cache.configuration.FactoryBuilder;
import javax.cache.configuration.MutableCacheEntryListenerConfiguration;
import javax.cache.expiry.AccessedExpiryPolicy;
@@ -145,9 +146,8 @@ public class JCacheStore<K, T extends PersistentBase> extends DataStoreBase<K, T
@Override
public void initialize(Class<K> keyClass, Class<T> persistentClass, Properties properties) {
super.initialize(keyClass, persistentClass, properties);
- CachingProvider cachingProvider = Caching.getCachingProvider(
- properties.getProperty(GORA_DEFAULT_JCACHE_PROVIDER_KEY)
- );
+ CachingProvider cachingProvider = Caching.getCachingProvider
+ (properties.getProperty(GORA_DEFAULT_JCACHE_PROVIDER_KEY));
if (properties.getProperty(JCACHE_CACHE_NAMESPACE_PROPERTY_KEY) != null) {
goraCacheNamespace = properties.getProperty(JCACHE_CACHE_NAMESPACE_PROPERTY_KEY);
}
@@ -179,97 +179,92 @@ public class JCacheStore<K, T extends PersistentBase> extends DataStoreBase<K, T
LOG.error("Couldn't initialize cache manager to bounded hazelcast instance.", ex);
manager = cachingProvider.getCacheManager();
}
- cacheEntryList = new ConcurrentSkipListSet<>();
- cacheConfig = new CacheConfig<K, T>();
- cacheConfig.setTypes(keyClass, persistentClass);
- if (properties.getProperty(JCACHE_READ_THROUGH_PROPERTY_KEY) != null) {
- cacheConfig.setReadThrough(Boolean.valueOf(properties.getProperty(JCACHE_READ_THROUGH_PROPERTY_KEY)));
- } else {
- cacheConfig.setReadThrough(true);
- }
- if (properties.getProperty(JCACHE_WRITE_THROUGH_PROPERTY_KEY) != null) {
- cacheConfig.setWriteThrough(Boolean.valueOf(properties.getProperty(JCACHE_WRITE_THROUGH_PROPERTY_KEY)));
- } else {
- cacheConfig.setWriteThrough(true);
- }
- if (properties.getProperty(JCACHE_STORE_BY_VALUE_PROPERTY_KEY) != null) {
- cacheConfig.setStoreByValue(Boolean.valueOf(properties.getProperty(JCACHE_STORE_BY_VALUE_PROPERTY_KEY)));
- }
- if (properties.getProperty(JCACHE_STATISTICS_PROPERTY_KEY) != null) {
- cacheConfig.setStatisticsEnabled(Boolean.valueOf(properties.getProperty(JCACHE_STATISTICS_PROPERTY_KEY)));
- }
- if (properties.getProperty(JCACHE_MANAGEMENT_PROPERTY_KEY) != null) {
- cacheConfig.setStatisticsEnabled(Boolean.valueOf(properties.getProperty(JCACHE_MANAGEMENT_PROPERTY_KEY)));
- }
- if (properties.getProperty(JCACHE_EVICTION_POLICY_PROPERTY_KEY) != null) {
- cacheConfig.getEvictionConfig()
- .setEvictionPolicy(EvictionPolicy.valueOf(properties.getProperty(JCACHE_EVICTION_POLICY_PROPERTY_KEY)));
- }
- if (properties.getProperty(JCACHE_EVICTION_MAX_SIZE_POLICY_PROPERTY_KEY) != null) {
- cacheConfig.getEvictionConfig()
- .setMaximumSizePolicy(EvictionConfig.MaxSizePolicy
- .valueOf(properties.getProperty(JCACHE_EVICTION_MAX_SIZE_POLICY_PROPERTY_KEY)));
- }
- if (properties.getProperty(JCACHE_EVICTION_SIZE_PROPERTY_KEY) != null) {
- cacheConfig.getEvictionConfig()
- .setSize(Integer.valueOf(properties.getProperty(JCACHE_EVICTION_SIZE_PROPERTY_KEY)));
- }
- if (properties.getProperty(JCACHE_EXPIRE_POLICY_PROPERTY_KEY) != null) {
- String expiryPolicyIdentifier = properties.getProperty(JCACHE_EXPIRE_POLICY_PROPERTY_KEY);
- if (expiryPolicyIdentifier.equals(JCACHE_ACCESSED_EXPIRY_IDENTIFIER)) {
- cacheConfig.setExpiryPolicyFactory(FactoryBuilder.factoryOf(
- new AccessedExpiryPolicy(new Duration(TimeUnit.SECONDS,
- Integer.valueOf(properties.getProperty(JCACHE_EXPIRE_POLICY_DURATION_PROPERTY_KEY))))
- ));
- } else if (expiryPolicyIdentifier.equals(JCACHE_CREATED_EXPIRY_IDENTIFIER)) {
- cacheConfig.setExpiryPolicyFactory(FactoryBuilder.factoryOf(
- new CreatedExpiryPolicy(new Duration(TimeUnit.SECONDS,
- Integer.valueOf(properties.getProperty(JCACHE_EXPIRE_POLICY_DURATION_PROPERTY_KEY))))
- ));
- } else if (expiryPolicyIdentifier.equals(JCACHE_MODIFIED_EXPIRY_IDENTIFIER)) {
- cacheConfig.setExpiryPolicyFactory(FactoryBuilder.factoryOf(
- new ModifiedExpiryPolicy(new Duration(TimeUnit.SECONDS,
- Integer.valueOf(properties.getProperty(JCACHE_EXPIRE_POLICY_DURATION_PROPERTY_KEY))))
- ));
- } else if (expiryPolicyIdentifier.equals(JCACHE_TOUCHED_EXPIRY_IDENTIFIER)) {
- cacheConfig.setExpiryPolicyFactory(FactoryBuilder.factoryOf(
- new TouchedExpiryPolicy(new Duration(TimeUnit.SECONDS,
- Integer.valueOf(properties.getProperty(JCACHE_EXPIRE_POLICY_DURATION_PROPERTY_KEY))))
- ));
+ if (((properties.getProperty(JCACHE_AUTO_CREATE_CACHE_PROPERTY_KEY) != null) &&
+ Boolean.valueOf(properties.getProperty(JCACHE_AUTO_CREATE_CACHE_PROPERTY_KEY)))
+ || ((manager.getCache(super.getPersistentClass().getSimpleName(), keyClass, persistentClass) == null))) {
+ cacheEntryList = new ConcurrentSkipListSet<>();
+ cacheConfig = new CacheConfig<K, T>();
+ cacheConfig.setTypes(keyClass, persistentClass);
+ if (properties.getProperty(JCACHE_READ_THROUGH_PROPERTY_KEY) != null) {
+ cacheConfig.setReadThrough(Boolean.valueOf(properties.getProperty(JCACHE_READ_THROUGH_PROPERTY_KEY)));
+ } else {
+ cacheConfig.setReadThrough(true);
}
- }
- if (properties.getProperty(HAZELCAST_CACHE_IN_MEMORY_FORMAT_PROPERTY_KEY) != null) {
- String inMemoryFormat = properties.getProperty(HAZELCAST_CACHE_IN_MEMORY_FORMAT_PROPERTY_KEY);
- if (inMemoryFormat.equals(HAZELCAST_CACHE_BINARY_IN_MEMORY_FORMAT_IDENTIFIER) ||
- inMemoryFormat.equals(HAZELCAST_CACHE_OBJECT_IN_MEMORY_FORMAT_IDENTIFIER) ||
- inMemoryFormat.equals(HAZELCAST_CACHE_NATIVE_IN_MEMORY_FORMAT_IDENTIFIER)) {
- cacheConfig.setInMemoryFormat(InMemoryFormat.valueOf(inMemoryFormat));
+ if (properties.getProperty(JCACHE_WRITE_THROUGH_PROPERTY_KEY) != null) {
+ cacheConfig.setWriteThrough(Boolean.valueOf(properties.getProperty(JCACHE_WRITE_THROUGH_PROPERTY_KEY)));
+ } else {
+ cacheConfig.setWriteThrough(true);
}
- }
- cacheConfig.setCacheLoaderFactory(JCacheCacheFactoryBuilder
- .factoryOfCacheLoader(this.persistentDataStore));
- cacheConfig.setCacheWriterFactory(JCacheCacheFactoryBuilder
- .factoryOfCacheWriter(this.persistentDataStore));
- cacheConfig.addCacheEntryListenerConfiguration(
- new MutableCacheEntryListenerConfiguration<>(
- JCacheCacheFactoryBuilder
- .factoryOfEntryListener(new JCacheCacheEntryListener<K, T>(cacheEntryList)),
- null, true, true));
- if (properties.getProperty(JCACHE_AUTO_CREATE_CACHE_PROPERTY_KEY) != null) {
- Boolean createCache = Boolean.valueOf(properties.getProperty(JCACHE_AUTO_CREATE_CACHE_PROPERTY_KEY));
- if (createCache) {
- cache = manager.createCache(persistentClass.getSimpleName(),
- cacheConfig).unwrap(ICache.class);
+ if (properties.getProperty(JCACHE_STORE_BY_VALUE_PROPERTY_KEY) != null) {
+ cacheConfig.setStoreByValue(Boolean.valueOf(properties.getProperty(JCACHE_STORE_BY_VALUE_PROPERTY_KEY)));
}
- } else {
- if (manager.getCache(super.getPersistentClass().getSimpleName(), keyClass, persistentClass) == null) {
- cache = manager.createCache(persistentClass.getSimpleName(),
- cacheConfig).unwrap(ICache.class);
- } else {
- cache = manager.getCache(super.getPersistentClass().getSimpleName(),
- keyClass, persistentClass).unwrap(ICache.class);
- this.populateLocalCacheEntrySet(cache.iterator());
+ if (properties.getProperty(JCACHE_STATISTICS_PROPERTY_KEY) != null) {
+ cacheConfig.setStatisticsEnabled(Boolean.valueOf(properties.getProperty(JCACHE_STATISTICS_PROPERTY_KEY)));
+ }
+ if (properties.getProperty(JCACHE_MANAGEMENT_PROPERTY_KEY) != null) {
+ cacheConfig.setStatisticsEnabled(Boolean.valueOf(properties.getProperty(JCACHE_MANAGEMENT_PROPERTY_KEY)));
+ }
+ if (properties.getProperty(JCACHE_EVICTION_POLICY_PROPERTY_KEY) != null) {
+ cacheConfig.getEvictionConfig()
+ .setEvictionPolicy(EvictionPolicy.valueOf(properties.getProperty(JCACHE_EVICTION_POLICY_PROPERTY_KEY)));
+ }
+ if (properties.getProperty(JCACHE_EVICTION_MAX_SIZE_POLICY_PROPERTY_KEY) != null) {
+ cacheConfig.getEvictionConfig()
+ .setMaximumSizePolicy(EvictionConfig.MaxSizePolicy
+ .valueOf(properties.getProperty(JCACHE_EVICTION_MAX_SIZE_POLICY_PROPERTY_KEY)));
+ }
+ if (properties.getProperty(JCACHE_EVICTION_SIZE_PROPERTY_KEY) != null) {
+ cacheConfig.getEvictionConfig()
+ .setSize(Integer.valueOf(properties.getProperty(JCACHE_EVICTION_SIZE_PROPERTY_KEY)));
+ }
+ if (properties.getProperty(JCACHE_EXPIRE_POLICY_PROPERTY_KEY) != null) {
+ String expiryPolicyIdentifier = properties.getProperty(JCACHE_EXPIRE_POLICY_PROPERTY_KEY);
+ if (expiryPolicyIdentifier.equals(JCACHE_ACCESSED_EXPIRY_IDENTIFIER)) {
+ cacheConfig.setExpiryPolicyFactory(FactoryBuilder.factoryOf(
+ new AccessedExpiryPolicy(new Duration(TimeUnit.SECONDS,
+ Integer.valueOf(properties.getProperty(JCACHE_EXPIRE_POLICY_DURATION_PROPERTY_KEY))))
+ ));
+ } else if (expiryPolicyIdentifier.equals(JCACHE_CREATED_EXPIRY_IDENTIFIER)) {
+ cacheConfig.setExpiryPolicyFactory(FactoryBuilder.factoryOf(
+ new CreatedExpiryPolicy(new Duration(TimeUnit.SECONDS,
+ Integer.valueOf(properties.getProperty(JCACHE_EXPIRE_POLICY_DURATION_PROPERTY_KEY))))
+ ));
+ } else if (expiryPolicyIdentifier.equals(JCACHE_MODIFIED_EXPIRY_IDENTIFIER)) {
+ cacheConfig.setExpiryPolicyFactory(FactoryBuilder.factoryOf(
+ new ModifiedExpiryPolicy(new Duration(TimeUnit.SECONDS,
+ Integer.valueOf(properties.getProperty(JCACHE_EXPIRE_POLICY_DURATION_PROPERTY_KEY))))
+ ));
+ } else if (expiryPolicyIdentifier.equals(JCACHE_TOUCHED_EXPIRY_IDENTIFIER)) {
+ cacheConfig.setExpiryPolicyFactory(FactoryBuilder.factoryOf(
+ new TouchedExpiryPolicy(new Duration(TimeUnit.SECONDS,
+ Integer.valueOf(properties.getProperty(JCACHE_EXPIRE_POLICY_DURATION_PROPERTY_KEY))))
+ ));
+ }
+ }
+ if (properties.getProperty(HAZELCAST_CACHE_IN_MEMORY_FORMAT_PROPERTY_KEY) != null) {
+ String inMemoryFormat = properties.getProperty(HAZELCAST_CACHE_IN_MEMORY_FORMAT_PROPERTY_KEY);
+ if (inMemoryFormat.equals(HAZELCAST_CACHE_BINARY_IN_MEMORY_FORMAT_IDENTIFIER) ||
+ inMemoryFormat.equals(HAZELCAST_CACHE_OBJECT_IN_MEMORY_FORMAT_IDENTIFIER) ||
+ inMemoryFormat.equals(HAZELCAST_CACHE_NATIVE_IN_MEMORY_FORMAT_IDENTIFIER)) {
+ cacheConfig.setInMemoryFormat(InMemoryFormat.valueOf(inMemoryFormat));
+ }
}
+ cacheConfig.setCacheLoaderFactory(JCacheCacheFactoryBuilder
+ .factoryOfCacheLoader(this.persistentDataStore));
+ cacheConfig.setCacheWriterFactory(JCacheCacheFactoryBuilder
+ .factoryOfCacheWriter(this.persistentDataStore));
+ cacheConfig.addCacheEntryListenerConfiguration(
+ new MutableCacheEntryListenerConfiguration<>(
+ JCacheCacheFactoryBuilder
+ .factoryOfEntryListener(new JCacheCacheEntryListener<K, T>(cacheEntryList)),
+ null, true, true));
+ cache = manager.createCache(persistentClass.getSimpleName(),
+ cacheConfig).unwrap(ICache.class);
+ } else {
+ cache = manager.getCache(super.getPersistentClass().getSimpleName(),
+ keyClass, persistentClass).unwrap(ICache.class);
+ this.populateLocalCacheEntrySet(cache);
+ this.populateLocalCacheConfig(cache);
}
LOG.info("JCache Gora datastore initialized successfully.");
}
@@ -293,7 +288,7 @@ public class JCacheStore<K, T extends PersistentBase> extends DataStoreBase<K, T
@Override
public void deleteSchema() {
- cacheEntryList.clear();
+ cache.removeAll();
manager.destroyCache(super.getPersistentClass().getSimpleName());
persistentDataStore.deleteSchema();
LOG.info("Deleted schema on persistent store and destroyed cache for persistent bean {}."
@@ -444,12 +439,34 @@ public class JCacheStore<K, T extends PersistentBase> extends DataStoreBase<K, T
LOG.info("JCache Gora datastore destroyed successfully.");
}
- private void populateLocalCacheEntrySet(Iterator<Cache.Entry<K, T>> cacheEntryIterator) {
- cacheEntryList.clear();
+ private void populateLocalCacheEntrySet(ICache<K, T> cache) {
+ cacheEntryList = new ConcurrentSkipListSet<>();
+ Iterator<Cache.Entry<K, T>> cacheEntryIterator = cache.iterator();
while (cacheEntryIterator.hasNext()) {
cacheEntryList.add(cacheEntryIterator.next().getKey());
}
+ cacheConfig = cache.getConfiguration(CacheConfig.class);
+ Iterator<CacheEntryListenerConfiguration<K, T>> itr =
+ cacheConfig.getCacheEntryListenerConfigurations().iterator();
+ while (itr.hasNext()) {
+ JCacheCacheEntryListenerFactory<K, T> listenerFac = (JCacheCacheEntryListenerFactory<K, T>)
+ ((MutableCacheEntryListenerConfiguration) itr.next()).getCacheEntryListenerFactory();
+ //populate transient field in Cache Entry Listener
+ listenerFac.create().setCacheEntryList(cacheEntryList);
+ //register exactly one listener on each local node either client/server
+ break;
+ }
LOG.info("Populated local cache entry set with respect to remote cache provider.");
}
+ private void populateLocalCacheConfig(ICache<K, T> cache) {
+ cacheConfig = cache.getConfiguration(CacheConfig.class);
+ //populate transient fields in Cache Loader/Cache Listener
+ ((JCacheCacheLoaderFactory) cacheConfig.getCacheLoaderFactory())
+ .create().setDataStore(this.persistentDataStore);
+ ((JCacheCacheWriterFactory) cacheConfig.getCacheWriterFactory())
+ .create().setDataStore(this.persistentDataStore);
+ LOG.info("Populated transient cache loader/writer in local cache configuration.");
+ }
+
}
http://git-wip-us.apache.org/repos/asf/gora/blob/a02c5dd9/gora-jcache/src/main/java/org/apache/gora/jcache/store/package-info.java
----------------------------------------------------------------------
diff --git a/gora-jcache/src/main/java/org/apache/gora/jcache/store/package-info.java b/gora-jcache/src/main/java/org/apache/gora/jcache/store/package-info.java
new file mode 100644
index 0000000..abc7ca6
--- /dev/null
+++ b/gora-jcache/src/main/java/org/apache/gora/jcache/store/package-info.java
@@ -0,0 +1,29 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+/**
+ * This package contains all the JCache store related classes which involve manipulating Hazelcast
+ * caches. {@link org.apache.gora.jcache.store.JCacheCacheWriter} and
+ * {@link org.apache.gora.jcache.store.JCacheCacheLoader} handles the read/write operations
+ * from/to caches and persistent backend. {@link org.apache.gora.jcache.store.JCacheCacheLoaderFactory} and
+ * {@link org.apache.gora.jcache.store.JCacheCacheWriterFactory} provides factory implementation that handles
+ * singleton instance creation of writer/loader. {@link org.apache.gora.jcache.store.JCacheCacheEntryListener}
+ * is the class which manages local cache entry set and
+ * {@link org.apache.gora.jcache.store.JCacheCacheEntryListenerFactory} takes care of singleton instance creation
+ * for entry listener. {@link org.apache.gora.jcache.store.JCacheCacheFactoryBuilder} is generic factory builder
+ * for above mentioned factory classes.
+ */
+package org.apache.gora.jcache.store;
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/gora/blob/a02c5dd9/gora-jcache/src/test/java/org/apache/gora/jcache/GoraHazelcastTestDriver.java
----------------------------------------------------------------------
diff --git a/gora-jcache/src/test/java/org/apache/gora/jcache/GoraHazelcastTestDriver.java b/gora-jcache/src/test/java/org/apache/gora/jcache/GoraHazelcastTestDriver.java
index 7918406..bace8eb 100644
--- a/gora-jcache/src/test/java/org/apache/gora/jcache/GoraHazelcastTestDriver.java
+++ b/gora-jcache/src/test/java/org/apache/gora/jcache/GoraHazelcastTestDriver.java
@@ -39,6 +39,9 @@ public class GoraHazelcastTestDriver extends GoraTestDriver {
private static final String CONFIG = "hazelcast.xml";
public static final String GORA_DEFAULT_DATASTORE_KEY = "gora.datastore.default";
public static final String MEMSTORE = "org.apache.gora.memory.store.MemStore";
+ private static final String JCACHE_READ_THROUGH_PROPERTY_KEY = "jcache.read.through.enable";
+ private static final String JCACHE_WRITE_THROUGH_PROPERTY_KEY = "jcache.write.through.enable";
+ private static final String FALSE = "false";
public GoraHazelcastTestDriver() {
super(JCacheStore.class);
@@ -52,6 +55,8 @@ public class GoraHazelcastTestDriver extends GoraTestDriver {
properties.setProperty(GORA_DEFAULT_JCACHE_PROVIDER_KEY, PROVIDER);
properties.setProperty(GORA_DEFAULT_JCACHE_HAZELCAST_CONFIG_KEY, CONFIG);
properties.setProperty(GORA_DEFAULT_DATASTORE_KEY, MEMSTORE);
+ properties.setProperty(JCACHE_READ_THROUGH_PROPERTY_KEY,FALSE);
+ properties.setProperty(JCACHE_WRITE_THROUGH_PROPERTY_KEY,FALSE);
serverCacheProvider = new JCacheStore();
serverCacheProvider.initialize(String.class, WebPage.class, properties);
}
http://git-wip-us.apache.org/repos/asf/gora/blob/a02c5dd9/gora-jcache/src/test/java/org/apache/gora/jcache/mapreduce/package-info.java
----------------------------------------------------------------------
diff --git a/gora-jcache/src/test/java/org/apache/gora/jcache/mapreduce/package-info.java b/gora-jcache/src/test/java/org/apache/gora/jcache/mapreduce/package-info.java
new file mode 100644
index 0000000..371629b
--- /dev/null
+++ b/gora-jcache/src/test/java/org/apache/gora/jcache/mapreduce/package-info.java
@@ -0,0 +1,20 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+/**
+ * This package contains unit test for MR jobs execution over JCache dataStore.
+ */
+package org.apache.gora.jcache.mapreduce;
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/gora/blob/a02c5dd9/gora-jcache/src/test/java/org/apache/gora/jcache/store/package-info.java
----------------------------------------------------------------------
diff --git a/gora-jcache/src/test/java/org/apache/gora/jcache/store/package-info.java b/gora-jcache/src/test/java/org/apache/gora/jcache/store/package-info.java
new file mode 100644
index 0000000..6bb67ba
--- /dev/null
+++ b/gora-jcache/src/test/java/org/apache/gora/jcache/store/package-info.java
@@ -0,0 +1,20 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+/**
+ * This package contains all the unit tests for basic CRUD operations functionality of the JCache dataStore.
+ */
+package org.apache.gora.jcache.store;
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/gora/blob/a02c5dd9/gora-jcache/src/test/resources/gora.properties
----------------------------------------------------------------------
diff --git a/gora-jcache/src/test/resources/gora.properties b/gora-jcache/src/test/resources/gora.properties
index b740466..625faab 100644
--- a/gora-jcache/src/test/resources/gora.properties
+++ b/gora-jcache/src/test/resources/gora.properties
@@ -17,3 +17,6 @@ gora.cache.datastore.default=org.apache.gora.jcache.store.JCacheStore
gora.datastore.jcache.provider=com.hazelcast.client.cache.impl.HazelcastClientCachingProvider
gora.datastore.jcache.hazelcast.config=hazelcast-client.xml
gora.datastore.default=org.apache.gora.memory.store.MemStore
+jcache.read.through.enable=false
+jcache.write.through.enable=false
+
http://git-wip-us.apache.org/repos/asf/gora/blob/a02c5dd9/gora-tutorial/conf/gora.properties
----------------------------------------------------------------------
diff --git a/gora-tutorial/conf/gora.properties b/gora-tutorial/conf/gora.properties
index 2e5c113..5084216 100644
--- a/gora-tutorial/conf/gora.properties
+++ b/gora-tutorial/conf/gora.properties
@@ -52,3 +52,9 @@ gora.solrstore.solr.batchsize=100
# cloud, concurrent, http, loadbalance
gora.solrstore.solr.solrjserver=http
+#JCache dataStore properties
+gora.cache.datastore.default=org.apache.gora.jcache.store.JCacheStore
+gora.datastore.jcache.provider=com.hazelcast.cache.impl.HazelcastServerCachingProvider
+#gora.datastore.jcache.provider=com.hazelcast.client.cache.impl.HazelcastClientCachingProvider
+#gora.datastore.jcache.hazelcast.config=hazelcast-client.xml
+gora.datastore.jcache.hazelcast.config=hazelcast.xml
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/gora/blob/a02c5dd9/gora-tutorial/conf/hazelcast-client.xml
----------------------------------------------------------------------
diff --git a/gora-tutorial/conf/hazelcast-client.xml b/gora-tutorial/conf/hazelcast-client.xml
new file mode 100644
index 0000000..93f21e2
--- /dev/null
+++ b/gora-tutorial/conf/hazelcast-client.xml
@@ -0,0 +1,31 @@
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<!--
+ Hazelcast client side cache provider configuration.
+-->
+
+<hazelcast-client xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://www.hazelcast.com/schema/client-config
+ http://www.hazelcast.com/schema/client-config/hazelcast-client-config-3.6.xsd"
+ xmlns="http://www.hazelcast.com/schema/client-config">
+ <network>
+ <cluster-members>
+ <address>127.0.0.1</address>
+ </cluster-members>
+ </network>
+</hazelcast-client>
http://git-wip-us.apache.org/repos/asf/gora/blob/a02c5dd9/gora-tutorial/conf/hazelcast.xml
----------------------------------------------------------------------
diff --git a/gora-tutorial/conf/hazelcast.xml b/gora-tutorial/conf/hazelcast.xml
new file mode 100755
index 0000000..9838710
--- /dev/null
+++ b/gora-tutorial/conf/hazelcast.xml
@@ -0,0 +1,34 @@
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<!--
+ Hazelcast server side cache provider configuration.
+-->
+
+<hazelcast xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://www.hazelcast.com/schema/config
+ http://www.hazelcast.com/schema/config/hazelcast-config-3.6.xsd"
+ xmlns="http://www.hazelcast.com/schema/config">
+ <network>
+ <join>
+ <multicast enabled="false"/>
+ <tcp-ip enabled="true">
+ <member>127.0.0.1</member>
+ </tcp-ip>
+ </join>
+ </network>
+</hazelcast>
http://git-wip-us.apache.org/repos/asf/gora/blob/a02c5dd9/gora-tutorial/pom.xml
----------------------------------------------------------------------
diff --git a/gora-tutorial/pom.xml b/gora-tutorial/pom.xml
index d73b4df..ab6892f 100644
--- a/gora-tutorial/pom.xml
+++ b/gora-tutorial/pom.xml
@@ -105,6 +105,11 @@
<dependency>
<groupId>org.apache.gora</groupId>
+ <artifactId>gora-jcache</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.gora</groupId>
<artifactId>gora-cassandra</artifactId>
</dependency>
http://git-wip-us.apache.org/repos/asf/gora/blob/a02c5dd9/gora-tutorial/src/main/java/org/apache/gora/tutorial/log/DistributedLogManager.java
----------------------------------------------------------------------
diff --git a/gora-tutorial/src/main/java/org/apache/gora/tutorial/log/DistributedLogManager.java b/gora-tutorial/src/main/java/org/apache/gora/tutorial/log/DistributedLogManager.java
new file mode 100644
index 0000000..44e9c45
--- /dev/null
+++ b/gora-tutorial/src/main/java/org/apache/gora/tutorial/log/DistributedLogManager.java
@@ -0,0 +1,461 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.gora.tutorial.log;
+
+import org.apache.avro.util.Utf8;
+import org.apache.gora.query.Query;
+import org.apache.gora.query.Result;
+import org.apache.gora.store.DataStore;
+import org.apache.gora.store.DataStoreFactory;
+import org.apache.gora.tutorial.log.generated.Pageview;
+import org.apache.hadoop.conf.Configuration;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.io.BufferedReader;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.nio.charset.Charset;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Locale;
+import java.util.StringTokenizer;
+
+
+/**
+ * DistributedLogManager {@link org.apache.gora.tutorial.log.DistributedLogManager} is the tutorial class to
+ * illustrate the basic distributed features that can be gained when persistent dataStore is used together with
+ * cache dataStore similar to {@link org.apache.gora.jcache.store.JCacheStore}. Since Hazelcast provides cache as
+ * a service approach, Apache Gora data stores can now be exposed as a data SERVICE when persistent data store is
+ * exposed over the JCache store.
+ *
+ * JCache data store has two modes.
+ *
+ * 1. Server mode - Participate in Hazelcast cluster as a member. ( Data grid ) and communicates directly
+ * with persistent store to full fill cache read/write operations.
+ *
+ * Add following properties gora.properties file to start JCache store in server mode.
+ *
+ * gora.cache.datastore.default=org.apache.gora.jcache.store.JCacheStore
+ * gora.datastore.jcache.provider=com.hazelcast.cache.impl.HazelcastServerCachingProvider
+ * gora.datastore.jcache.hazelcast.config=hazelcast.xml
+ *
+ * For cluster member network configuration use hazelcast.xml.
+ * <p>See Network Configuration on
+ * <a href="http://docs.hazelcast.org/docs/3.5/manual/html/networkconfiguration.html">
+ * web site</a>for more information.</p>
+ *
+ * 2. Client mode - DOES not participate in Hazelcast cluster as a member. ( Data grid ) and For cache
+ * read/write operations client forwards the requests to hazelcast cluster members which run in SERVER mode.
+ *
+ * Add following properties gora.properties file to start JCache store in client mode.
+ *
+ * gora.cache.datastore.default=org.apache.gora.jcache.store.JCacheStore
+ * gora.datastore.jcache.provider=com.hazelcast.client.cache.impl.HazelcastClientCachingProvider
+ * gora.datastore.jcache.hazelcast.config=hazelcast-client.xml
+ *
+ * For Hazelcast client configuration use hazelcast-client.xml.
+ * <p>See Java Client Configuration on
+ * <a href="http://docs.hazelcast.org/docs/3.5/manual/html/javaclientconfiguration.html#java-client-configuration">
+ * web site</a>for more information.</p>
+ *
+ * Sample
+ * ------
+ * 1. Start DistributedLogManager in SERVER for two or higher instances. ( separate JVMs ).
+ * Notice the Hazelcast cluster is well formed by following Hazelcast logs.
+ * Members [2] {
+ * Member [127.0.0.1]:5701
+ * Member [127.0.0.1]:5702 this
+ * }
+ *
+ * 2. Start DistributedLogManager in CLIENT mode for one instances.
+ * Notice the client correctly connected to the cluster by following Hazelcast logs.
+ * Members [2] {
+ * Member [127.0.0.1]:5701
+ * Member [127.0.0.1]:5702
+ * }
+ * INFO: HazelcastClient[hz.client_0_dev][3.6.4] is CLIENT_CONNECTED
+ *
+ * 3. Now use CLIENT's command line console to forward cache queries to cluster.
+ *
+ * (a) -parse cache <input_log_file> - This will parse logs from logs file and put Pageview data beans to
+ * persistent store via the cache.
+ * Notice following logs
+ * INFO 19:46:34,833 Written data bean to persistent datastore on key 45.
+ * on SERVER instance of DistributedLogManager. Notice the persistent data bean writes are LOAD BALANCED
+ * among SERVER instances.
+ * (b) -parse persistent <input_log_file> - This will write parsed log data beans directly to persistent store.
+ * NOT via cache.
+ * (c) Executing with (a) will create cache entry per each data bean key on each SERVER and CLIENT instances. Since
+ * now data bean ( key/value ) is now loaded to Hazelcast DATA GRID, entries created data beans
+ * are now available to all the SERVER and CLIENT instances. Data beans which were loaded to Hazelcast
+ * DATA Grid can be retrieved from cache so that the latency is reduced compared to when data bean is
+ * direct retrieved from persistent data store. *
+ * (d) Executing with (b) will not create cache entries on keys since the data beans were directly put into
+ * to persistent store.
+ * Executing following command
+ * -get <lineNum>
+ * Data will be first loaded from persistent store to cache from one of SERVER instances. Then cache
+ * entry on given key will be created on all SERVER/CLIENT instances.
+ * Notice the persistent data bean load on SINGLE SERVER instance. Only one SERVER instance will handle this work.
+ * INFO 17:13:22,652 Loaded data bean from persistent datastore on key 4.
+ * Notice the cache entry creation on ALL SERVER/CLIENT instances
+ * INFO 17:13:22,656 Cache entry added on key 4.
+ * Once the cache entry is created, data bean is now available to be retrieved from cache without reaching the
+ * persistent store.
+ * Execute the above command consecutively for several times.
+ * -get <lineNum>
+ * Notice there will be NO log entry similar to below
+ * INFO 17:13:22,652 Loaded data bean from persistent datastore on key 4.
+ * Since there will be no data bean load from persistent data store and the data bean is now loaded from
+ * cache.
+ * (e) DistributedLogManager has two Apache Gora data stores instances.
+ * dataStore - which call directly underline persistent data store.
+ * cacheStore - which call same persistent data store via the caching layer.
+ * Simple benchmarking purposes use
+ * -benchmark <startLineNum> <endLineNum> <iterations>
+ * to compare data beans read for two cases. ( Cache layer is present and Not present when executing
+ * consecutive data reads for same data items in nearby intervals )
+ * It generates LOG entries similar to below which indicates time spent for two cases in milliseconds
+ * INFO 17:13:22,652 Direct Backend took 1973 ms
+ * INFO 17:18:49,252 Via Cache took 1923 ms
+ *
+ * <p>In the data model, keys are the line numbers in the log file,
+ * and the values are Pageview objects, generated from
+ * <code>gora-tutorial/src/main/avro/pageview.json</code>.
+ *
+ * <p>See the tutorial.html file in docs or go to the
+ * <a href="http://gora.apache.org/docs/current/tutorial.html">
+ * web site</a>for more information.</p>
+ */
+
+public class DistributedLogManager {
+
+ private static final Logger log = LoggerFactory.getLogger(DistributedLogManager.class);
+ private static final SimpleDateFormat dateFormat
+ = new SimpleDateFormat("dd/MMM/yyyy:HH:mm:ss Z", Locale.getDefault());
+ private static final String USAGE =
+ " -parse cache|persistent <input_log_file>\n" +
+ " -benchmark <startLineNum> <endLineNum> <iterations>\n" +
+ " -get <lineNum>\n" +
+ " -get <lineNum> <fieldList>\n" +
+ " -query <startLineNum> <endLineNum>\n" +
+ " -delete <lineNum>\n" +
+ " -deleteByQuery <startLineNum> <endLineNum>\n" +
+ " -deleteSchema\n"+
+ " -exit\n";
+ private DataStore<Long, Pageview> dataStore;
+ private DataStore<Long, Pageview> cacheStore;
+
+ public DistributedLogManager() {
+ try {
+ init();
+ } catch (IOException ex) {
+ throw new RuntimeException(ex);
+ }
+ }
+
+ public static void main(String[] args) throws Exception {
+ DistributedLogManager manager = new DistributedLogManager();
+
+ BufferedReader input = new BufferedReader(new InputStreamReader(System.in,
+ Charset.defaultCharset()));
+
+ for (; ; ) {
+ // read next command from commandline
+ String command = input.readLine();
+ if ("".equals(command) || command == null) {
+ // ignore and show new cmd line
+ continue;
+ }
+
+ args = command.split("\\s+");
+ if ("-parse".equals(args[0])) {
+ if (args.length == 3) {
+ if (args[1].contains("cache")) {
+ manager.parse(args[2], true);
+ } else if (args[1].contains("persistent")) {
+ manager.parse(args[2], false);
+ }
+ }
+ } else if ("-benchmark".equals(args[0])) {
+ if (args.length == 4)
+ manager.benchmark(Integer.parseInt(args[1]), Integer.parseInt(args[2]), Integer.parseInt(args[3]), manager);
+ } else if ("-get".equals(args[0])) {
+ if (args.length == 2) {
+ manager.get(Long.parseLong(args[1]), true);
+ } else {
+ //field array should be input as comma ',' separated
+ String[] fields = args[2].split(",");
+ manager.get(Long.parseLong(args[1]), fields);
+ }
+ } else if ("-query".equals(args[0])) {
+ if (args.length == 3)
+ manager.query(Long.parseLong(args[1]), Long.parseLong(args[2]));
+ } else if ("-delete".equals(args[0])) {
+ manager.delete(Long.parseLong(args[1]));
+ } else if ("-deleteByQuery".equalsIgnoreCase(args[0])) {
+ manager.deleteByQuery(Long.parseLong(args[1]), Long.parseLong(args[2]));
+ } else if ("-deleteSchema".equals(args[0])) {
+ manager.deleteSchema();
+ continue;
+ } else if ("-exit".equalsIgnoreCase(args[0])) {
+ input.close();
+ manager.close();
+ System.exit(1);
+ } else {
+ log.info(USAGE);
+ }
+ }
+ }
+
+ private void init() throws IOException {
+ //Data store objects are created from a factory. It is necessary to
+ //provide the key and value class. The datastore class is optional,
+ //and if not specified it will be read from the properties file
+
+ //this dataStore talks directly to persistent store
+ dataStore = DataStoreFactory.getDataStore(Long.class, Pageview.class,
+ new Configuration());
+ //this dataStore talks to persistent store via the cache
+ cacheStore = DataStoreFactory.getDataStore(Long.class, Pageview.class, new Configuration(), true);
+
+ }
+
+ /**
+ * Parses a log file and store the contents at the data store.
+ *
+ * @param input the input file location
+ */
+ private void parse(String input, boolean isCacheEnabled) throws Exception {
+ log.info("Parsing file: {}", input);
+ long lineCount = 0;
+ try (BufferedReader reader = new BufferedReader(new InputStreamReader(
+ new FileInputStream(input), Charset.defaultCharset()))) {
+ String line = reader.readLine();
+ do {
+ Pageview pageview = parseLine(line);
+
+ if (pageview != null) {
+ //store the pageview
+ storePageview(lineCount++, pageview, isCacheEnabled);
+ }
+
+ line = reader.readLine();
+ } while (line != null);
+
+ }
+ log.info("finished parsing file. Total number of log lines: {}", lineCount);
+ }
+
+ /**
+ * Parses a single log line in combined log format using StringTokenizers
+ */
+ private Pageview parseLine(String line) throws ParseException {
+ StringTokenizer matcher = new StringTokenizer(line);
+ //parse the log line
+ String ip = matcher.nextToken();
+ matcher.nextToken(); //discard
+ matcher.nextToken();
+ long timestamp = dateFormat.parse(matcher.nextToken("]").substring(2)).getTime();
+ matcher.nextToken("\"");
+ String request = matcher.nextToken("\"");
+ String[] requestParts = request.split(" ");
+ String httpMethod = requestParts[0];
+ String url = requestParts[1];
+ matcher.nextToken(" ");
+ int httpStatusCode = Integer.parseInt(matcher.nextToken());
+ int responseSize = Integer.parseInt(matcher.nextToken());
+ matcher.nextToken("\"");
+ String referrer = matcher.nextToken("\"");
+ matcher.nextToken("\"");
+ String userAgent = matcher.nextToken("\"");
+
+ //construct and return pageview object
+ Pageview pageview = new Pageview();
+ pageview.setIp(new Utf8(ip));
+ pageview.setTimestamp(timestamp);
+ pageview.setHttpMethod(new Utf8(httpMethod));
+ pageview.setUrl(new Utf8(url));
+ pageview.setHttpStatusCode(httpStatusCode);
+ pageview.setResponseSize(responseSize);
+ pageview.setReferrer(new Utf8(referrer));
+ pageview.setUserAgent(new Utf8(userAgent));
+
+ return pageview;
+ }
+
+ /**
+ * Stores the pageview object with the given key
+ */
+ private void storePageview(long key, Pageview pageview, boolean isCacheEnabled) throws Exception {
+ if (!isCacheEnabled) {
+ log.info("Storing Pageview in: " + dataStore.toString());
+ dataStore.put(key, pageview);
+ } else {
+ log.info("Storing Pageview in: " + dataStore.toString());
+ cacheStore.put(key, pageview);
+ }
+ }
+
+ /**
+ * Fetches a single pageview object and prints it
+ */
+ private void get(long key, boolean isCacheEnabled) throws Exception {
+ if (!isCacheEnabled) {
+ Pageview pageview = dataStore.get(key);
+ printPageview(pageview);
+ } else {
+ Pageview pageview = cacheStore.get(key);
+ printPageview(pageview);
+ }
+ }
+
+ /**
+ * Fetches a single pageview object with required fields and prints it
+ */
+ private void get(long key, String[] fields) throws Exception {
+ Pageview pageview = cacheStore.get(key, fields);
+ printPageview(pageview);
+ }
+
+ /**
+ * Queries and prints pageview object that have keys between startKey and endKey
+ */
+ private void query(long startKey, long endKey) throws Exception {
+ Query<Long, Pageview> query = cacheStore.newQuery();
+ //set the properties of query
+ query.setStartKey(startKey);
+ query.setEndKey(endKey);
+
+ Result<Long, Pageview> result = query.execute();
+
+ printResult(result);
+ }
+
+ /**
+ * Deletes the pageview with the given line number
+ */
+ private void delete(long lineNum) throws Exception {
+ cacheStore.delete(lineNum);
+ cacheStore.flush(); //write changes may need to be flushed before
+ //they are committed
+ log.info("pageview with key: {} deleted", lineNum);
+ }
+
+ /**
+ * This method illustrates delete by query call
+ */
+ private void deleteByQuery(long startKey, long endKey) throws Exception {
+ //Constructs a query from the dataStore. The matching rows to this query will be deleted
+ Query<Long, Pageview> query = cacheStore.newQuery();
+ //set the properties of query
+ query.setStartKey(startKey);
+ query.setEndKey(endKey);
+
+ cacheStore.deleteByQuery(query);
+ log.info("pageviews with keys between {} and {} are deleted.", startKey, endKey);
+ }
+
+ private void printResult(Result<Long, Pageview> result) throws Exception {
+
+ while (result.next()) { //advances the Result object and breaks if at end
+ long resultKey = result.getKey(); //obtain current key
+ Pageview resultPageview = result.get(); //obtain current value object
+
+ log.info("{} :", resultKey);
+ printPageview(resultPageview);
+ }
+
+ log.info("Number of pageviews from the query: {}", result.getOffset());
+ }
+
+ /**
+ * Pretty prints the pageview object to stdout
+ */
+ private void printPageview(Pageview pageview) {
+ if (pageview == null) {
+ log.info("No result to show");
+ } else {
+ log.info(pageview.toString());
+ }
+ }
+
+ private void deleteSchema() {
+ cacheStore.deleteSchema();
+ log.info("Deleted schema on dataStore");
+
+ }
+
+ private void close() throws Exception {
+ //It is very important to close the datastore properly, otherwise
+ //some data loss might occur.
+ if (dataStore != null)
+ dataStore.close();
+ if (cacheStore != null)
+ cacheStore.close();
+ }
+
+ /**
+ * Simple benchmarking for comparison between when cache layer is present and not present. Purpose is to
+ * exploit temporal locality of consecutive data bean reads.
+ */
+ private boolean benchmark(int start,
+ int end,
+ int iterations,
+ DistributedLogManager manager) throws Exception {
+ if (!(start < 10000) && (end < 10000)) {
+ return false;
+ }
+ long startTime;
+ long finishTime;
+ ArrayList<Integer> entryset= getShuffledEntrySet(start,end);
+ startTime = System.currentTimeMillis();
+ for (int itr = 0; itr < iterations; itr++) {
+ for (int entry : entryset){
+ manager.get(entry, false);
+ }
+ }
+ finishTime = System.currentTimeMillis();
+ long directDifference = (finishTime - startTime);
+ startTime = System.currentTimeMillis();
+ for (int itr = 0; itr < iterations; itr++) {
+ for (int entry : entryset){
+ manager.get(entry, true);
+ }
+ }
+ finishTime = System.currentTimeMillis();
+ log.info("Direct Backend took {} ms", directDifference);
+ log.info("Via Cache took {} ms", (finishTime - startTime));
+ return true;
+ }
+
+ private ArrayList<Integer> getShuffledEntrySet(int start, int end) {
+ ArrayList<Integer> entrySet = new ArrayList<>();
+ for (int counter = start; counter <= end; counter++) {
+ entrySet.add(counter);
+ }
+ Collections.shuffle(entrySet);
+ return entrySet;
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/gora/blob/a02c5dd9/gora-tutorial/src/main/resources/log4j.properties
----------------------------------------------------------------------
diff --git a/gora-tutorial/src/main/resources/log4j.properties b/gora-tutorial/src/main/resources/log4j.properties
new file mode 100644
index 0000000..79062bf
--- /dev/null
+++ b/gora-tutorial/src/main/resources/log4j.properties
@@ -0,0 +1,42 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# for production, you should probably set pattern to %c instead of %l.
+# (%l is slower.)
+
+# output messages into a rolling log file as well as stdout
+log4j.rootLogger=INFO,stdout
+
+# stdout
+log4j.appender.stdout=org.apache.log4j.ConsoleAppender
+log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
+log4j.appender.stdout.layout.ConversionPattern=%5p %d{HH:mm:ss,SSS} %m%n
+
+# rolling log file
+log4j.appender.R=org.apache.log4j.RollingFileAppender
+log4j.appender.R.maxFileSize=20MB
+log4j.appender.R.maxBackupIndex=50
+log4j.appender.R.layout=org.apache.log4j.PatternLayout
+log4j.appender.R.layout.ConversionPattern=%5p [%t] %d{ISO8601} %F (line %L) %m%n
+# Edit the next line to point to your logs directory
+
+# Application logging options
+log4j.logger.org.apache=ERROR
+
+log4j.logger.com.hazelcast=INFO
+log4j.logger.org.apache.gora.jcache=DEBUG
+log4j.logger.org.apache.gora.hbase=DEBUG
+log4j.logger.org.apache.gora.tutorial.log.DistributedLogManager=DEBUG
http://git-wip-us.apache.org/repos/asf/gora/blob/a02c5dd9/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index 6522ac0..5221fd1 100644
--- a/pom.xml
+++ b/pom.xml
@@ -830,6 +830,18 @@
<dependency>
<groupId>org.apache.gora</groupId>
+ <artifactId>gora-jcache</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.gora</groupId>
+ <artifactId>gora-jcache</artifactId>
+ <version>${project.version}</version>
+ <type>test-jar</type>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.gora</groupId>
<artifactId>gora-tutorial</artifactId>
<version>${project.version}</version>
</dependency>
[5/6] gora git commit: fixing typing issues in comments
Posted by le...@apache.org.
fixing typing issues in comments
Project: http://git-wip-us.apache.org/repos/asf/gora/repo
Commit: http://git-wip-us.apache.org/repos/asf/gora/commit/0b0b54be
Tree: http://git-wip-us.apache.org/repos/asf/gora/tree/0b0b54be
Diff: http://git-wip-us.apache.org/repos/asf/gora/diff/0b0b54be
Branch: refs/heads/master
Commit: 0b0b54be419fd8ad03ce0b09642f06985513860b
Parents: 2f065e8
Author: Kevin <dj...@yahoo.com>
Authored: Mon Aug 15 13:51:48 2016 +0530
Committer: Kevin <dj...@yahoo.com>
Committed: Mon Aug 15 13:51:48 2016 +0530
----------------------------------------------------------------------
.../java/org/apache/gora/tutorial/log/DistributedLogManager.java | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/gora/blob/0b0b54be/gora-tutorial/src/main/java/org/apache/gora/tutorial/log/DistributedLogManager.java
----------------------------------------------------------------------
diff --git a/gora-tutorial/src/main/java/org/apache/gora/tutorial/log/DistributedLogManager.java b/gora-tutorial/src/main/java/org/apache/gora/tutorial/log/DistributedLogManager.java
index 0f3be5c..87c9e8d 100644
--- a/gora-tutorial/src/main/java/org/apache/gora/tutorial/log/DistributedLogManager.java
+++ b/gora-tutorial/src/main/java/org/apache/gora/tutorial/log/DistributedLogManager.java
@@ -143,8 +143,8 @@ import java.util.StringTokenizer;
* <br><b>INFO 17:13:22,652 Direct Backend took 1973 ms</b>
* <br><b>INFO 17:18:49,252 Via Cache took 1923 ms</b>
* <p>
- * (f) For standalone/single node DistributedLogManager usage, Start the DistributedLogManager in SERVER mode.
- * Follow the the commands over the command line console of SERVER instance.
+ * (f) For standalone/single node DistributedLogManager usage, start the DistributedLogManager in SERVER mode.
+ * Follow the same commands as above over the command line console of SERVER instance.
* <p>
* In the data model, keys are the line numbers in the log file,
* and the values are Pageview objects, generated from
[2/6] gora git commit: fixing formatting issues
Posted by le...@apache.org.
fixing formatting issues
Project: http://git-wip-us.apache.org/repos/asf/gora/repo
Commit: http://git-wip-us.apache.org/repos/asf/gora/commit/ee6b6c05
Tree: http://git-wip-us.apache.org/repos/asf/gora/tree/ee6b6c05
Diff: http://git-wip-us.apache.org/repos/asf/gora/diff/ee6b6c05
Branch: refs/heads/master
Commit: ee6b6c058efc7194610f3b5b3e7b7d17564ff324
Parents: a02c5dd
Author: Kevin <dj...@yahoo.com>
Authored: Mon Aug 15 01:20:42 2016 +0530
Committer: Kevin <dj...@yahoo.com>
Committed: Mon Aug 15 01:20:42 2016 +0530
----------------------------------------------------------------------
.../java/org/apache/gora/jcache/GoraHazelcastTestDriver.java | 4 ++--
.../java/org/apache/gora/tutorial/log/DistributedLogManager.java | 2 +-
2 files changed, 3 insertions(+), 3 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/gora/blob/ee6b6c05/gora-jcache/src/test/java/org/apache/gora/jcache/GoraHazelcastTestDriver.java
----------------------------------------------------------------------
diff --git a/gora-jcache/src/test/java/org/apache/gora/jcache/GoraHazelcastTestDriver.java b/gora-jcache/src/test/java/org/apache/gora/jcache/GoraHazelcastTestDriver.java
index bace8eb..ebe04bd 100644
--- a/gora-jcache/src/test/java/org/apache/gora/jcache/GoraHazelcastTestDriver.java
+++ b/gora-jcache/src/test/java/org/apache/gora/jcache/GoraHazelcastTestDriver.java
@@ -55,8 +55,8 @@ public class GoraHazelcastTestDriver extends GoraTestDriver {
properties.setProperty(GORA_DEFAULT_JCACHE_PROVIDER_KEY, PROVIDER);
properties.setProperty(GORA_DEFAULT_JCACHE_HAZELCAST_CONFIG_KEY, CONFIG);
properties.setProperty(GORA_DEFAULT_DATASTORE_KEY, MEMSTORE);
- properties.setProperty(JCACHE_READ_THROUGH_PROPERTY_KEY,FALSE);
- properties.setProperty(JCACHE_WRITE_THROUGH_PROPERTY_KEY,FALSE);
+ properties.setProperty(JCACHE_READ_THROUGH_PROPERTY_KEY, FALSE);
+ properties.setProperty(JCACHE_WRITE_THROUGH_PROPERTY_KEY, FALSE);
serverCacheProvider = new JCacheStore();
serverCacheProvider.initialize(String.class, WebPage.class, properties);
}
http://git-wip-us.apache.org/repos/asf/gora/blob/ee6b6c05/gora-tutorial/src/main/java/org/apache/gora/tutorial/log/DistributedLogManager.java
----------------------------------------------------------------------
diff --git a/gora-tutorial/src/main/java/org/apache/gora/tutorial/log/DistributedLogManager.java b/gora-tutorial/src/main/java/org/apache/gora/tutorial/log/DistributedLogManager.java
index 44e9c45..6df11d8 100644
--- a/gora-tutorial/src/main/java/org/apache/gora/tutorial/log/DistributedLogManager.java
+++ b/gora-tutorial/src/main/java/org/apache/gora/tutorial/log/DistributedLogManager.java
@@ -109,7 +109,7 @@ import java.util.StringTokenizer;
* now data bean ( key/value ) is now loaded to Hazelcast DATA GRID, entries created data beans
* are now available to all the SERVER and CLIENT instances. Data beans which were loaded to Hazelcast
* DATA Grid can be retrieved from cache so that the latency is reduced compared to when data bean is
- * direct retrieved from persistent data store. *
+ * direct retrieved from persistent data store.
* (d) Executing with (b) will not create cache entries on keys since the data beans were directly put into
* to persistent store.
* Executing following command
[6/6] gora git commit: added tutorial to bin/gora
Posted by le...@apache.org.
added tutorial to bin/gora
Project: http://git-wip-us.apache.org/repos/asf/gora/repo
Commit: http://git-wip-us.apache.org/repos/asf/gora/commit/61c25fef
Tree: http://git-wip-us.apache.org/repos/asf/gora/tree/61c25fef
Diff: http://git-wip-us.apache.org/repos/asf/gora/diff/61c25fef
Branch: refs/heads/master
Commit: 61c25fefbefe96b39c86ca7d260fa7d63f028912
Parents: 0b0b54b
Author: Kevin <dj...@yahoo.com>
Authored: Mon Aug 15 21:18:47 2016 +0530
Committer: Kevin <dj...@yahoo.com>
Committed: Mon Aug 15 21:18:47 2016 +0530
----------------------------------------------------------------------
bin/gora | 5 +++++
1 file changed, 5 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/gora/blob/61c25fef/bin/gora
----------------------------------------------------------------------
diff --git a/bin/gora b/bin/gora
index 8231159..51b9489 100755
--- a/bin/gora
+++ b/bin/gora
@@ -49,6 +49,7 @@ if [ $# = 0 ]; then
echo " goracirackspace Run the GoraCI Rackspace orchestration setup"
echo " goracichef Run the GoraCI Chef software provisioning setup"
echo " logmanager Run the tutorial log manager"
+ echo " distributedlogmanager Run the tutorial distributed log manager"
echo " loganalytics Run the tutorial log analytics"
echo " loganalyticsspark Run the tutorial log analytics spark"
echo " junit Run the given JUnit test"
@@ -136,6 +137,10 @@ elif [ "$COMMAND" = "logmanager" ] ; then
MODULE=gora-tutorial
CLASSPATH=$CLASSPATH:$GORA_HOME/$MODULE/target/classes/
CLASS=org.apache.gora.tutorial.log.LogManager
+elif [ "$COMMAND" = "distributedlogmanager" ] ; then
+ MODULE=gora-tutorial
+ CLASSPATH=$CLASSPATH:$GORA_HOME/$MODULE/target/classes/
+ CLASS=org.apache.gora.tutorial.log.DistributedLogManager
elif [ "$COMMAND" = "loganalytics" ] ; then
MODULE=gora-tutorial
CLASS=org.apache.gora.tutorial.log.LogAnalytics
[4/6] gora git commit: fixed problem registering unnessary cache
listeners, added formatting for DistributedLogManager comment
Posted by le...@apache.org.
fixed problem registering unnessary cache listeners, added formatting for DistributedLogManager comment
Project: http://git-wip-us.apache.org/repos/asf/gora/repo
Commit: http://git-wip-us.apache.org/repos/asf/gora/commit/2f065e86
Tree: http://git-wip-us.apache.org/repos/asf/gora/tree/2f065e86
Diff: http://git-wip-us.apache.org/repos/asf/gora/diff/2f065e86
Branch: refs/heads/master
Commit: 2f065e8669fb8699b6a08c157fb9ffc2c3254130
Parents: ba27703
Author: Kevin <dj...@yahoo.com>
Authored: Mon Aug 15 13:43:53 2016 +0530
Committer: Kevin <dj...@yahoo.com>
Committed: Mon Aug 15 13:43:53 2016 +0530
----------------------------------------------------------------------
.../jcache/store/JCacheCacheEntryListener.java | 24 +---
.../store/JCacheCacheEntryListenerFactory.java | 2 +-
.../jcache/store/JCacheCacheFactoryBuilder.java | 8 +-
.../gora/jcache/store/JCacheCacheLoader.java | 8 +-
.../jcache/store/JCacheCacheLoaderFactory.java | 26 ++++-
.../gora/jcache/store/JCacheCacheWriter.java | 8 +-
.../jcache/store/JCacheCacheWriterFactory.java | 26 ++++-
.../apache/gora/jcache/store/JCacheStore.java | 38 ++----
.../gora/jcache/GoraHazelcastTestDriver.java | 29 ++---
gora-jcache/src/test/resources/gora.properties | 4 +-
.../tutorial/log/DistributedLogManager.java | 115 ++++++++++---------
11 files changed, 138 insertions(+), 150 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/gora/blob/2f065e86/gora-jcache/src/main/java/org/apache/gora/jcache/store/JCacheCacheEntryListener.java
----------------------------------------------------------------------
diff --git a/gora-jcache/src/main/java/org/apache/gora/jcache/store/JCacheCacheEntryListener.java b/gora-jcache/src/main/java/org/apache/gora/jcache/store/JCacheCacheEntryListener.java
index 5891048..1cc3e7c 100644
--- a/gora-jcache/src/main/java/org/apache/gora/jcache/store/JCacheCacheEntryListener.java
+++ b/gora-jcache/src/main/java/org/apache/gora/jcache/store/JCacheCacheEntryListener.java
@@ -37,10 +37,10 @@ import java.util.concurrent.ConcurrentSkipListSet;
public class JCacheCacheEntryListener<K, T extends PersistentBase>
implements CacheEntryCreatedListener<K, T>,
CacheEntryRemovedListener<K, T>, CacheEntryUpdatedListener<K, T>,
- CacheEntryExpiredListener<K, T>, java.io.Serializable {
+ CacheEntryExpiredListener<K, T> {
private static final Logger LOG = LoggerFactory.getLogger(JCacheCacheEntryListener.class);
- private transient ConcurrentSkipListSet<K> cacheEntryList;
+ private ConcurrentSkipListSet<K> cacheEntryList;
public JCacheCacheEntryListener(ConcurrentSkipListSet cacheEntryList) {
this.cacheEntryList = cacheEntryList;
@@ -49,10 +49,6 @@ public class JCacheCacheEntryListener<K, T extends PersistentBase>
@Override
public void onCreated(Iterable<CacheEntryEvent<? extends K, ? extends T>> cacheEntryEvents)
throws CacheEntryListenerException {
- //get rid execution of listener chain/executing only one initialized
- if (cacheEntryList == null) {
- return;
- }
for (CacheEntryEvent<? extends K, ? extends T> event : cacheEntryEvents) {
cacheEntryList.add(event.getKey());
LOG.info("Cache entry added on key {}.", event.getKey().toString());
@@ -62,10 +58,6 @@ public class JCacheCacheEntryListener<K, T extends PersistentBase>
@Override
public void onRemoved(Iterable<CacheEntryEvent<? extends K, ? extends T>> cacheEntryEvents)
throws CacheEntryListenerException {
- //get rid execution of listener chain/executing only one initialized
- if (cacheEntryList == null) {
- return;
- }
for (CacheEntryEvent<? extends K, ? extends T> event : cacheEntryEvents) {
cacheEntryList.remove(event.getKey());
LOG.info("Cache entry removed on key {}.", event.getKey().toString());
@@ -75,10 +67,6 @@ public class JCacheCacheEntryListener<K, T extends PersistentBase>
@Override
public void onUpdated(Iterable<CacheEntryEvent<? extends K, ? extends T>> cacheEntryEvents)
throws CacheEntryListenerException {
- //get rid execution of listener chain/executing only one initialized
- if (cacheEntryList == null) {
- return;
- }
for (CacheEntryEvent<? extends K, ? extends T> event : cacheEntryEvents) {
LOG.info("Cache entry updated set on key {}.", event.getKey().toString());
}
@@ -87,17 +75,9 @@ public class JCacheCacheEntryListener<K, T extends PersistentBase>
@Override
public void onExpired(Iterable<CacheEntryEvent<? extends K, ? extends T>> cacheEntryEvents)
throws CacheEntryListenerException {
- //get rid execution of listener chain/executing only one initialized
- if (cacheEntryList == null) {
- return;
- }
for (CacheEntryEvent<? extends K, ? extends T> event : cacheEntryEvents) {
LOG.warn("Cache entry expired on key {}.", event.getKey().toString());
}
}
- public void setCacheEntryList(ConcurrentSkipListSet<K> cacheEntryList) {
- this.cacheEntryList = cacheEntryList;
- }
-
}
http://git-wip-us.apache.org/repos/asf/gora/blob/2f065e86/gora-jcache/src/main/java/org/apache/gora/jcache/store/JCacheCacheEntryListenerFactory.java
----------------------------------------------------------------------
diff --git a/gora-jcache/src/main/java/org/apache/gora/jcache/store/JCacheCacheEntryListenerFactory.java b/gora-jcache/src/main/java/org/apache/gora/jcache/store/JCacheCacheEntryListenerFactory.java
index abc283d..6ecbcbc 100644
--- a/gora-jcache/src/main/java/org/apache/gora/jcache/store/JCacheCacheEntryListenerFactory.java
+++ b/gora-jcache/src/main/java/org/apache/gora/jcache/store/JCacheCacheEntryListenerFactory.java
@@ -33,7 +33,7 @@ public class JCacheCacheEntryListenerFactory<K, T extends PersistentBase>
public static final long serialVersionUID = 201305101634L;
private static final Logger LOG = LoggerFactory.getLogger(JCacheCacheEntryListenerFactory.class);
- private JCacheCacheEntryListener<K, T> instance;
+ private transient JCacheCacheEntryListener<K, T> instance;
public JCacheCacheEntryListenerFactory(JCacheCacheEntryListener<K, T> instance) {
LOG.info("JCache cache entry listener factory initialized successfully.");
http://git-wip-us.apache.org/repos/asf/gora/blob/2f065e86/gora-jcache/src/main/java/org/apache/gora/jcache/store/JCacheCacheFactoryBuilder.java
----------------------------------------------------------------------
diff --git a/gora-jcache/src/main/java/org/apache/gora/jcache/store/JCacheCacheFactoryBuilder.java b/gora-jcache/src/main/java/org/apache/gora/jcache/store/JCacheCacheFactoryBuilder.java
index 75c3f36..8b3b847 100644
--- a/gora-jcache/src/main/java/org/apache/gora/jcache/store/JCacheCacheFactoryBuilder.java
+++ b/gora-jcache/src/main/java/org/apache/gora/jcache/store/JCacheCacheFactoryBuilder.java
@@ -29,13 +29,13 @@ import javax.cache.configuration.Factory;
public class JCacheCacheFactoryBuilder {
public static <K, T extends PersistentBase> Factory<JCacheCacheLoader<K, T>>
- factoryOfCacheLoader(DataStore<K, T> dataStore) {
- return new JCacheCacheLoaderFactory<>(new JCacheCacheLoader<>(dataStore));
+ factoryOfCacheLoader(DataStore<K, T> dataStore, Class<K> keyClass, Class<T> persistentClass) {
+ return new JCacheCacheLoaderFactory<>(new JCacheCacheLoader<>(dataStore), keyClass, persistentClass);
}
public static <K, T extends PersistentBase> Factory<JCacheCacheWriter<K, T>>
- factoryOfCacheWriter(DataStore<K, T> dataStore) {
- return new JCacheCacheWriterFactory<>(new JCacheCacheWriter<>(dataStore));
+ factoryOfCacheWriter(DataStore<K, T> dataStore, Class<K> keyClass, Class<T> persistentClass) {
+ return new JCacheCacheWriterFactory<>(new JCacheCacheWriter<>(dataStore), keyClass, persistentClass);
}
public static <K, T extends PersistentBase> Factory<JCacheCacheEntryListener<K, T>>
http://git-wip-us.apache.org/repos/asf/gora/blob/2f065e86/gora-jcache/src/main/java/org/apache/gora/jcache/store/JCacheCacheLoader.java
----------------------------------------------------------------------
diff --git a/gora-jcache/src/main/java/org/apache/gora/jcache/store/JCacheCacheLoader.java b/gora-jcache/src/main/java/org/apache/gora/jcache/store/JCacheCacheLoader.java
index fed2ba2..72915d0 100644
--- a/gora-jcache/src/main/java/org/apache/gora/jcache/store/JCacheCacheLoader.java
+++ b/gora-jcache/src/main/java/org/apache/gora/jcache/store/JCacheCacheLoader.java
@@ -31,10 +31,10 @@ import java.util.Map;
* {@link org.apache.gora.jcache.store.JCacheCacheLoader} is the primary class
* responsible for loading data beans from persistency dataStore to in memory cache.
*/
-public class JCacheCacheLoader<K, T extends PersistentBase> implements CacheLoader<K, T>, java.io.Serializable {
+public class JCacheCacheLoader<K, T extends PersistentBase> implements CacheLoader<K, T> {
private static final Logger LOG = LoggerFactory.getLogger(JCacheCacheLoader.class);
- private transient DataStore<K, T> dataStore;
+ private DataStore<K, T> dataStore;
public JCacheCacheLoader(DataStore<K, T> dataStore) {
this.dataStore = dataStore;
@@ -65,8 +65,4 @@ public class JCacheCacheLoader<K, T extends PersistentBase> implements CacheLoad
return loaded;
}
- public void setDataStore(DataStore<K, T> dataStore) {
- this.dataStore = dataStore;
- }
-
}
http://git-wip-us.apache.org/repos/asf/gora/blob/2f065e86/gora-jcache/src/main/java/org/apache/gora/jcache/store/JCacheCacheLoaderFactory.java
----------------------------------------------------------------------
diff --git a/gora-jcache/src/main/java/org/apache/gora/jcache/store/JCacheCacheLoaderFactory.java b/gora-jcache/src/main/java/org/apache/gora/jcache/store/JCacheCacheLoaderFactory.java
index 2b82f1f..6b08e01 100644
--- a/gora-jcache/src/main/java/org/apache/gora/jcache/store/JCacheCacheLoaderFactory.java
+++ b/gora-jcache/src/main/java/org/apache/gora/jcache/store/JCacheCacheLoaderFactory.java
@@ -18,6 +18,9 @@
package org.apache.gora.jcache.store;
import org.apache.gora.persistency.impl.PersistentBase;
+import org.apache.gora.store.DataStoreFactory;
+import org.apache.gora.util.GoraException;
+import org.apache.hadoop.conf.Configuration;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -33,15 +36,32 @@ public class JCacheCacheLoaderFactory<K, T extends PersistentBase>
public static final long serialVersionUID = 201305101626L;
private static final Logger LOG = LoggerFactory.getLogger(JCacheCacheLoaderFactory.class);
- private JCacheCacheLoader<K, T> instance;
+ private transient JCacheCacheLoader<K, T> instance;
+ private Class<K> keyClass;
+ private Class<T> persistentClass;
- public JCacheCacheLoaderFactory(JCacheCacheLoader<K, T> instance) {
+ public JCacheCacheLoaderFactory(JCacheCacheLoader<K, T> instance,
+ Class<K> keyClass,
+ Class<T> persistentClass) {
+ this.keyClass = keyClass;
+ this.persistentClass = persistentClass;
LOG.info("JCache cache entry loader factory initialized successfully.");
this.instance = instance;
}
public JCacheCacheLoader<K, T> create() {
- return (JCacheCacheLoader<K, T>) this.instance;
+ if (this.instance != null) {
+ return (JCacheCacheLoader<K, T>) this.instance;
+ } else {
+ try {
+ this.instance = new JCacheCacheLoader<>(DataStoreFactory
+ .getDataStore(keyClass, persistentClass, new Configuration()));
+ } catch (GoraException ex) {
+ LOG.error("Couldn't initialize persistent dataStore for cache loader.", ex);
+ return null;
+ }
+ return (JCacheCacheLoader<K, T>) this.instance;
+ }
}
public boolean equals(Object other) {
http://git-wip-us.apache.org/repos/asf/gora/blob/2f065e86/gora-jcache/src/main/java/org/apache/gora/jcache/store/JCacheCacheWriter.java
----------------------------------------------------------------------
diff --git a/gora-jcache/src/main/java/org/apache/gora/jcache/store/JCacheCacheWriter.java b/gora-jcache/src/main/java/org/apache/gora/jcache/store/JCacheCacheWriter.java
index b7a95c3..e1e5ae8 100644
--- a/gora-jcache/src/main/java/org/apache/gora/jcache/store/JCacheCacheWriter.java
+++ b/gora-jcache/src/main/java/org/apache/gora/jcache/store/JCacheCacheWriter.java
@@ -32,10 +32,10 @@ import java.util.Iterator;
* {@link org.apache.gora.jcache.store.JCacheCacheWriter} is the primary class
* responsible for writing data beans to persistency dataStore from in memory cache.
*/
-public class JCacheCacheWriter<K, T extends PersistentBase> implements CacheWriter<K, T>, java.io.Serializable {
+public class JCacheCacheWriter<K, T extends PersistentBase> implements CacheWriter<K, T> {
private static final Logger LOG = LoggerFactory.getLogger(JCacheCacheWriter.class);
- private transient DataStore<K, T> dataStore;
+ private DataStore<K, T> dataStore;
public JCacheCacheWriter(DataStore<K, T> dataStore) {
this.dataStore = dataStore;
@@ -73,8 +73,4 @@ public class JCacheCacheWriter<K, T extends PersistentBase> implements CacheWrit
}
}
- public void setDataStore(DataStore<K, T> dataStore) {
- this.dataStore = dataStore;
- }
-
}
http://git-wip-us.apache.org/repos/asf/gora/blob/2f065e86/gora-jcache/src/main/java/org/apache/gora/jcache/store/JCacheCacheWriterFactory.java
----------------------------------------------------------------------
diff --git a/gora-jcache/src/main/java/org/apache/gora/jcache/store/JCacheCacheWriterFactory.java b/gora-jcache/src/main/java/org/apache/gora/jcache/store/JCacheCacheWriterFactory.java
index 33c2fbb..d824529 100644
--- a/gora-jcache/src/main/java/org/apache/gora/jcache/store/JCacheCacheWriterFactory.java
+++ b/gora-jcache/src/main/java/org/apache/gora/jcache/store/JCacheCacheWriterFactory.java
@@ -18,6 +18,9 @@
package org.apache.gora.jcache.store;
import org.apache.gora.persistency.impl.PersistentBase;
+import org.apache.gora.store.DataStoreFactory;
+import org.apache.gora.util.GoraException;
+import org.apache.hadoop.conf.Configuration;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -32,15 +35,32 @@ public class JCacheCacheWriterFactory<K, T extends PersistentBase> implements Fa
public static final long serialVersionUID = 201205101621L;
private static final Logger LOG = LoggerFactory.getLogger(JCacheCacheWriterFactory.class);
- private JCacheCacheWriter<K, T> instance;
+ private transient JCacheCacheWriter<K, T> instance;
+ private Class<K> keyClass;
+ private Class<T> persistentClass;
- public JCacheCacheWriterFactory(JCacheCacheWriter<K, T> instance) {
+ public JCacheCacheWriterFactory(JCacheCacheWriter<K, T> instance,
+ Class<K> keyClass,
+ Class<T> persistentClass) {
+ this.keyClass = keyClass;
+ this.persistentClass = persistentClass;
LOG.info("JCache cache writer factory initialized successfully.");
this.instance = instance;
}
public JCacheCacheWriter<K, T> create() {
- return (JCacheCacheWriter<K, T>) this.instance;
+ if (this.instance != null) {
+ return (JCacheCacheWriter<K, T>) this.instance;
+ } else {
+ try {
+ this.instance = new JCacheCacheWriter<>(DataStoreFactory
+ .getDataStore(keyClass, persistentClass, new Configuration()));
+ } catch (GoraException ex) {
+ LOG.error("Couldn't initialize persistent dataStore for cache writer.", ex);
+ return null;
+ }
+ return (JCacheCacheWriter<K, T>) this.instance;
+ }
}
public boolean equals(Object other) {
http://git-wip-us.apache.org/repos/asf/gora/blob/2f065e86/gora-jcache/src/main/java/org/apache/gora/jcache/store/JCacheStore.java
----------------------------------------------------------------------
diff --git a/gora-jcache/src/main/java/org/apache/gora/jcache/store/JCacheStore.java b/gora-jcache/src/main/java/org/apache/gora/jcache/store/JCacheStore.java
index f0c9c27..126c07a 100644
--- a/gora-jcache/src/main/java/org/apache/gora/jcache/store/JCacheStore.java
+++ b/gora-jcache/src/main/java/org/apache/gora/jcache/store/JCacheStore.java
@@ -250,22 +250,20 @@ public class JCacheStore<K, T extends PersistentBase> extends DataStoreBase<K, T
}
}
cacheConfig.setCacheLoaderFactory(JCacheCacheFactoryBuilder
- .factoryOfCacheLoader(this.persistentDataStore));
+ .factoryOfCacheLoader(this.persistentDataStore, keyClass, persistentClass));
cacheConfig.setCacheWriterFactory(JCacheCacheFactoryBuilder
- .factoryOfCacheWriter(this.persistentDataStore));
- cacheConfig.addCacheEntryListenerConfiguration(
- new MutableCacheEntryListenerConfiguration<>(
- JCacheCacheFactoryBuilder
- .factoryOfEntryListener(new JCacheCacheEntryListener<K, T>(cacheEntryList)),
- null, true, true));
+ .factoryOfCacheWriter(this.persistentDataStore, keyClass, persistentClass));
cache = manager.createCache(persistentClass.getSimpleName(),
cacheConfig).unwrap(ICache.class);
} else {
cache = manager.getCache(super.getPersistentClass().getSimpleName(),
keyClass, persistentClass).unwrap(ICache.class);
this.populateLocalCacheEntrySet(cache);
- this.populateLocalCacheConfig(cache);
}
+ cache.registerCacheEntryListener(new MutableCacheEntryListenerConfiguration<>(
+ JCacheCacheFactoryBuilder
+ .factoryOfEntryListener(new JCacheCacheEntryListener<K, T>(cacheEntryList)),
+ null, true, true));
LOG.info("JCache Gora datastore initialized successfully.");
}
@@ -281,6 +279,10 @@ public class JCacheStore<K, T extends PersistentBase> extends DataStoreBase<K, T
cache = manager.createCache(persistentClass.getSimpleName(),
cacheConfig).unwrap(ICache.class);
}
+ cache.registerCacheEntryListener(new MutableCacheEntryListenerConfiguration<>(
+ JCacheCacheFactoryBuilder
+ .factoryOfEntryListener(new JCacheCacheEntryListener<K, T>(cacheEntryList)),
+ null, true, true));
persistentDataStore.createSchema();
LOG.info("Created schema on persistent store and initialized cache for persistent bean {}."
, super.getPersistentClass().getSimpleName());
@@ -446,27 +448,7 @@ public class JCacheStore<K, T extends PersistentBase> extends DataStoreBase<K, T
cacheEntryList.add(cacheEntryIterator.next().getKey());
}
cacheConfig = cache.getConfiguration(CacheConfig.class);
- Iterator<CacheEntryListenerConfiguration<K, T>> itr =
- cacheConfig.getCacheEntryListenerConfigurations().iterator();
- while (itr.hasNext()) {
- JCacheCacheEntryListenerFactory<K, T> listenerFac = (JCacheCacheEntryListenerFactory<K, T>)
- ((MutableCacheEntryListenerConfiguration) itr.next()).getCacheEntryListenerFactory();
- //populate transient field in Cache Entry Listener
- listenerFac.create().setCacheEntryList(cacheEntryList);
- //register exactly one listener on each local node either client/server
- break;
- }
LOG.info("Populated local cache entry set with respect to remote cache provider.");
}
- private void populateLocalCacheConfig(ICache<K, T> cache) {
- cacheConfig = cache.getConfiguration(CacheConfig.class);
- //populate transient fields in Cache Loader/Cache Listener
- ((JCacheCacheLoaderFactory) cacheConfig.getCacheLoaderFactory())
- .create().setDataStore(this.persistentDataStore);
- ((JCacheCacheWriterFactory) cacheConfig.getCacheWriterFactory())
- .create().setDataStore(this.persistentDataStore);
- LOG.info("Populated transient cache loader/writer in local cache configuration.");
- }
-
}
http://git-wip-us.apache.org/repos/asf/gora/blob/2f065e86/gora-jcache/src/test/java/org/apache/gora/jcache/GoraHazelcastTestDriver.java
----------------------------------------------------------------------
diff --git a/gora-jcache/src/test/java/org/apache/gora/jcache/GoraHazelcastTestDriver.java b/gora-jcache/src/test/java/org/apache/gora/jcache/GoraHazelcastTestDriver.java
index ebe04bd..e245557 100644
--- a/gora-jcache/src/test/java/org/apache/gora/jcache/GoraHazelcastTestDriver.java
+++ b/gora-jcache/src/test/java/org/apache/gora/jcache/GoraHazelcastTestDriver.java
@@ -18,8 +18,11 @@
package org.apache.gora.jcache;
+import com.hazelcast.config.ClasspathXmlConfig;
+import com.hazelcast.config.Config;
+import com.hazelcast.core.Hazelcast;
+import com.hazelcast.core.HazelcastInstance;
import org.apache.gora.GoraTestDriver;
-import org.apache.gora.examples.generated.WebPage;
import org.apache.gora.jcache.store.JCacheStore;
import org.apache.gora.persistency.Persistent;
import org.apache.gora.store.DataStore;
@@ -27,21 +30,11 @@ import org.apache.gora.util.GoraException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import java.util.Properties;
-
public class GoraHazelcastTestDriver extends GoraTestDriver {
private static Logger log = LoggerFactory.getLogger(GoraHazelcastTestDriver.class);
- private JCacheStore<String, WebPage> serverCacheProvider;
- private static final String GORA_DEFAULT_JCACHE_PROVIDER_KEY = "gora.datastore.jcache.provider";
- private static final String PROVIDER = "com.hazelcast.cache.impl.HazelcastServerCachingProvider";
- private static final String GORA_DEFAULT_JCACHE_HAZELCAST_CONFIG_KEY = "gora.datastore.jcache.hazelcast.config";
private static final String CONFIG = "hazelcast.xml";
- public static final String GORA_DEFAULT_DATASTORE_KEY = "gora.datastore.default";
- public static final String MEMSTORE = "org.apache.gora.memory.store.MemStore";
- private static final String JCACHE_READ_THROUGH_PROPERTY_KEY = "jcache.read.through.enable";
- private static final String JCACHE_WRITE_THROUGH_PROPERTY_KEY = "jcache.write.through.enable";
- private static final String FALSE = "false";
+ private HazelcastInstance hazelcastInstance;
public GoraHazelcastTestDriver() {
super(JCacheStore.class);
@@ -51,21 +44,15 @@ public class GoraHazelcastTestDriver extends GoraTestDriver {
public void setUpClass() throws Exception {
super.setUpClass();
log.info("Starting Hazelcast server side cache provider.");
- Properties properties = new Properties();
- properties.setProperty(GORA_DEFAULT_JCACHE_PROVIDER_KEY, PROVIDER);
- properties.setProperty(GORA_DEFAULT_JCACHE_HAZELCAST_CONFIG_KEY, CONFIG);
- properties.setProperty(GORA_DEFAULT_DATASTORE_KEY, MEMSTORE);
- properties.setProperty(JCACHE_READ_THROUGH_PROPERTY_KEY, FALSE);
- properties.setProperty(JCACHE_WRITE_THROUGH_PROPERTY_KEY, FALSE);
- serverCacheProvider = new JCacheStore();
- serverCacheProvider.initialize(String.class, WebPage.class, properties);
+ Config config = new ClasspathXmlConfig(CONFIG);
+ hazelcastInstance = Hazelcast.newHazelcastInstance(config);
}
@Override
public void tearDownClass() throws Exception {
super.tearDownClass();
log.info("Stopping Hazelcast server side cache provider.");
- serverCacheProvider.close();
+ hazelcastInstance.shutdown();
}
@Override
http://git-wip-us.apache.org/repos/asf/gora/blob/2f065e86/gora-jcache/src/test/resources/gora.properties
----------------------------------------------------------------------
diff --git a/gora-jcache/src/test/resources/gora.properties b/gora-jcache/src/test/resources/gora.properties
index 625faab..6dc150d 100644
--- a/gora-jcache/src/test/resources/gora.properties
+++ b/gora-jcache/src/test/resources/gora.properties
@@ -17,6 +17,6 @@ gora.cache.datastore.default=org.apache.gora.jcache.store.JCacheStore
gora.datastore.jcache.provider=com.hazelcast.client.cache.impl.HazelcastClientCachingProvider
gora.datastore.jcache.hazelcast.config=hazelcast-client.xml
gora.datastore.default=org.apache.gora.memory.store.MemStore
-jcache.read.through.enable=false
-jcache.write.through.enable=false
+#jcache.read.through.enable=false
+#jcache.write.through.enable=false
http://git-wip-us.apache.org/repos/asf/gora/blob/2f065e86/gora-tutorial/src/main/java/org/apache/gora/tutorial/log/DistributedLogManager.java
----------------------------------------------------------------------
diff --git a/gora-tutorial/src/main/java/org/apache/gora/tutorial/log/DistributedLogManager.java b/gora-tutorial/src/main/java/org/apache/gora/tutorial/log/DistributedLogManager.java
index 4ef9231..0f3be5c 100644
--- a/gora-tutorial/src/main/java/org/apache/gora/tutorial/log/DistributedLogManager.java
+++ b/gora-tutorial/src/main/java/org/apache/gora/tutorial/log/DistributedLogManager.java
@@ -46,106 +46,113 @@ import java.util.StringTokenizer;
* illustrate the basic distributed features that can be gained when persistent dataStore is used together with
* cache dataStore similar to {@link org.apache.gora.jcache.store.JCacheStore}. Since Hazelcast provides cache as
* a service approach, Apache Gora data stores can now be exposed as a data SERVICE when persistent data store is
- * exposed over the JCache store.
- *
+ * exposed over the JCache store/distributed caching layer.
+ * <p>
* JCache data store has two modes.
- *
- * 1. Server mode - Participate in Hazelcast cluster as a member. ( Data grid ) and communicates directly
+ * <p>
+ * 1. Server mode - Participate in Hazelcast cluster as a member. ( DATA GRID ) and communicates directly
* with persistent store to full fill cache read/write operations.
- *
+ * <p>
* Add following properties gora.properties file to start JCache store in server mode.
- *
- * gora.cache.datastore.default=org.apache.gora.jcache.store.JCacheStore
- * gora.datastore.jcache.provider=com.hazelcast.cache.impl.HazelcastServerCachingProvider
- * gora.datastore.jcache.hazelcast.config=hazelcast.xml
- *
+ * <p>
+ * <b>gora.cache.datastore.default=org.apache.gora.jcache.store.JCacheStore</b>
+ * <br><b>gora.datastore.jcache.provider=com.hazelcast.cache.impl.HazelcastServerCachingProvider</b>
+ * <br><b>gora.datastore.jcache.hazelcast.config=hazelcast.xml</b>
+ * <p>
* For cluster member network configuration use hazelcast.xml.
* <p>See Network Configuration on
* <a href="http://docs.hazelcast.org/docs/3.5/manual/html/networkconfiguration.html">
- * web site</a>for more information.</p>
- *
- * 2. Client mode - DOES not participate in Hazelcast cluster as a member. ( Data grid ) and For cache
+ * official documentation</a> for more information.</p>
+ * <p>
+ * 2. Client mode - DOES not participate in Hazelcast cluster as a member. ( DATA GRID ) and For cache
* read/write operations client forwards the requests to hazelcast cluster members which run in SERVER mode.
- *
+ * <p>
* Add following properties gora.properties file to start JCache store in client mode.
- *
- * gora.cache.datastore.default=org.apache.gora.jcache.store.JCacheStore
- * gora.datastore.jcache.provider=com.hazelcast.client.cache.impl.HazelcastClientCachingProvider
- * gora.datastore.jcache.hazelcast.config=hazelcast-client.xml
- *
+ * <p>
+ * <b>gora.cache.datastore.default=org.apache.gora.jcache.store.JCacheStore</b>
+ * <br><b>gora.datastore.jcache.provider=com.hazelcast.client.cache.impl.HazelcastClientCachingProvider</b>
+ * <br><b>gora.datastore.jcache.hazelcast.config=hazelcast-client.xml</b>
+ * <p>
* For Hazelcast client configuration use hazelcast-client.xml.
* <p>See Java Client Configuration on
* <a href="http://docs.hazelcast.org/docs/3.5/manual/html/javaclientconfiguration.html#java-client-configuration">
- * web site</a>for more information.</p>
- *
+ * official documentation</a> for more information.</p>
+ * <p>
* Sample
* ------
- * 1. Start DistributedLogManager in SERVER for two or higher instances. ( separate JVMs ).
+ * <p>
+ * 1. Start DistributedLogManager in SERVER mode for two or higher instances. ( separate JVMs )
* Notice the Hazelcast cluster is well formed by following Hazelcast logs.
- * Members [2] {
+ * <br><b>Members [2] {
* Member [127.0.0.1]:5701
* Member [127.0.0.1]:5702 this
- * }
- *
- * 2. Start DistributedLogManager in CLIENT mode for one instances.
+ * }</b>
+ * <p>
+ * 2. Start DistributedLogManager in CLIENT mode for one instance.
* Notice the client correctly connected to the cluster by following Hazelcast logs.
- * Members [2] {
+ * <br><b>Members [2] {
* Member [127.0.0.1]:5701
* Member [127.0.0.1]:5702
- * }
- * INFO: HazelcastClient[hz.client_0_dev][3.6.4] is CLIENT_CONNECTED
- *
+ * }</b>
+ * <br><b>INFO: HazelcastClient[hz.client_0_dev][3.6.4] is CLIENT_CONNECTED</b>
+ * <p>
* 3. Now use CLIENT's command line console to forward cache queries to cluster.
- *
- * (a) -parse cache <input_log_file> - This will parse logs from logs file and put Pageview data beans to
- * persistent store via the cache.
- * Notice following logs
- * INFO 19:46:34,833 Written data bean to persistent datastore on key 45.
- * on SERVER instance of DistributedLogManager. Notice the persistent data bean writes are LOAD BALANCED
- * among SERVER instances.
- * (b) -parse persistent <input_log_file> - This will write parsed log data beans directly to persistent store.
+ * <p>
+ * (a) <b>-parse cache <-input_log_file-></b> - This will parse logs from logs file and put Pageview data beans to
+ * persistent store via the cache. Notice following logs
+ * <br><b>INFO 19:46:34,833 Written data bean to persistent datastore on key 45.</b>
+ * <br>on SERVER instance of DistributedLogManager.
+ * <br>Notice the persistent data bean writes are LOAD BALANCED among SERVER instances.
+ * <p>
+ * (b) <b>-parse persistent <-input_log_file-></b> - This will write parsed log data beans directly to persistent store.
* NOT via cache.
+ * <p>
* (c) Executing with (a) will create cache entry per each data bean key on each SERVER and CLIENT instances. Since
* now data bean ( key/value ) is now loaded to Hazelcast DATA GRID, entries created data beans
* are now available to all the SERVER and CLIENT instances. Data beans which were loaded to Hazelcast
* DATA Grid can be retrieved from cache so that the latency is reduced compared to when data bean is
* direct retrieved from persistent data store.
+ * <p>
* (d) Executing with (b) will not create cache entries on keys since the data beans were directly put into
* to persistent store.
* Executing following command
- * -get <lineNum>
- * Data will be first loaded from persistent store to cache from one of SERVER instances. Then cache
+ * <br><b>get <-lineNum-></b>
+ * <br>Data will be first loaded from persistent store to cache from one of SERVER instances. Then cache
* entry on given key will be created on all SERVER/CLIENT instances.
* Notice the persistent data bean load on SINGLE SERVER instance. Only one SERVER instance will handle this work.
- * INFO 17:13:22,652 Loaded data bean from persistent datastore on key 4.
- * Notice the cache entry creation on ALL SERVER/CLIENT instances
- * INFO 17:13:22,656 Cache entry added on key 4.
- * Once the cache entry is created, data bean is now available to be retrieved from cache without reaching the
+ * <br><b>INFO 17:13:22,652 Loaded data bean from persistent datastore on key 4.</b>
+ * <br>Notice the cache entry creation on ALL SERVER/CLIENT instances
+ * <br><b>INFO 17:13:22,656 Cache entry added on key 4.</b>
+ * <br>Once the cache entry is created, data bean is now available to be retrieved from cache without reaching the
* persistent store.
* Execute the above command consecutively for several times.
- * -get <lineNum>
+ * <br><b>-get <-lineNum-></b>
* Notice there will be NO log entry similar to below
- * INFO 17:13:22,652 Loaded data bean from persistent datastore on key 4.
- * Since there will be no data bean load from persistent data store and the data bean is now loaded from
+ * <br><b>INFO 17:13:22,652 Loaded data bean from persistent datastore on key 4.</b>
+ * <br>Since there will be no data bean load from persistent data store and the data bean is now loaded from
* cache.
+ * <p>
* (e) DistributedLogManager has two Apache Gora data stores instances.
* dataStore - which call directly underline persistent data store.
* cacheStore - which call same persistent data store via the caching layer.
* Simple benchmarking purposes use
- * -benchmark <startLineNum> <endLineNum> <iterations>
- * to compare data beans read for two cases. ( Cache layer is present and Not present when executing
+ * <br><b>-benchmark <-startLineNum-> <-endLineNum-> <-iterations-></b>
+ * <br>to compare data beans read for two cases. ( Cache layer is present and Not present when executing
* consecutive data reads for same data items in nearby intervals )
* It generates LOG entries similar to below which indicates time spent for two cases in milliseconds
- * INFO 17:13:22,652 Direct Backend took 1973 ms
- * INFO 17:18:49,252 Via Cache took 1923 ms
- *
- * <p>In the data model, keys are the line numbers in the log file,
+ * <br><b>INFO 17:13:22,652 Direct Backend took 1973 ms</b>
+ * <br><b>INFO 17:18:49,252 Via Cache took 1923 ms</b>
+ * <p>
+ * (f) For standalone/single node DistributedLogManager usage, Start the DistributedLogManager in SERVER mode.
+ * Follow the the commands over the command line console of SERVER instance.
+ * <p>
+ * In the data model, keys are the line numbers in the log file,
* and the values are Pageview objects, generated from
* <code>gora-tutorial/src/main/avro/pageview.json</code>.
*
* <p>See the tutorial.html file in docs or go to the
* <a href="http://gora.apache.org/docs/current/tutorial.html">
- * web site</a>for more information.</p>
+ * web site</a> for more information.</p>
*/
public class DistributedLogManager {
[3/6] gora git commit: fixing formatting
Posted by le...@apache.org.
fixing formatting
Project: http://git-wip-us.apache.org/repos/asf/gora/repo
Commit: http://git-wip-us.apache.org/repos/asf/gora/commit/ba277032
Tree: http://git-wip-us.apache.org/repos/asf/gora/tree/ba277032
Diff: http://git-wip-us.apache.org/repos/asf/gora/diff/ba277032
Branch: refs/heads/master
Commit: ba277032722bcba8710cbdcb7c0573c9a8c9649d
Parents: ee6b6c0
Author: Kevin <dj...@yahoo.com>
Authored: Mon Aug 15 01:27:22 2016 +0530
Committer: Kevin <dj...@yahoo.com>
Committed: Mon Aug 15 01:27:22 2016 +0530
----------------------------------------------------------------------
.../apache/gora/tutorial/log/DistributedLogManager.java | 11 +----------
1 file changed, 1 insertion(+), 10 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/gora/blob/ba277032/gora-tutorial/src/main/java/org/apache/gora/tutorial/log/DistributedLogManager.java
----------------------------------------------------------------------
diff --git a/gora-tutorial/src/main/java/org/apache/gora/tutorial/log/DistributedLogManager.java b/gora-tutorial/src/main/java/org/apache/gora/tutorial/log/DistributedLogManager.java
index 6df11d8..4ef9231 100644
--- a/gora-tutorial/src/main/java/org/apache/gora/tutorial/log/DistributedLogManager.java
+++ b/gora-tutorial/src/main/java/org/apache/gora/tutorial/log/DistributedLogManager.java
@@ -109,7 +109,7 @@ import java.util.StringTokenizer;
* now data bean ( key/value ) is now loaded to Hazelcast DATA GRID, entries created data beans
* are now available to all the SERVER and CLIENT instances. Data beans which were loaded to Hazelcast
* DATA Grid can be retrieved from cache so that the latency is reduced compared to when data bean is
- * direct retrieved from persistent data store.
+ * direct retrieved from persistent data store.
* (d) Executing with (b) will not create cache entries on keys since the data beans were directly put into
* to persistent store.
* Executing following command
@@ -238,7 +238,6 @@ public class DistributedLogManager {
new Configuration());
//this dataStore talks to persistent store via the cache
cacheStore = DataStoreFactory.getDataStore(Long.class, Pageview.class, new Configuration(), true);
-
}
/**
@@ -289,7 +288,6 @@ public class DistributedLogManager {
String referrer = matcher.nextToken("\"");
matcher.nextToken("\"");
String userAgent = matcher.nextToken("\"");
-
//construct and return pageview object
Pageview pageview = new Pageview();
pageview.setIp(new Utf8(ip));
@@ -300,7 +298,6 @@ public class DistributedLogManager {
pageview.setResponseSize(responseSize);
pageview.setReferrer(new Utf8(referrer));
pageview.setUserAgent(new Utf8(userAgent));
-
return pageview;
}
@@ -346,9 +343,7 @@ public class DistributedLogManager {
//set the properties of query
query.setStartKey(startKey);
query.setEndKey(endKey);
-
Result<Long, Pageview> result = query.execute();
-
printResult(result);
}
@@ -371,7 +366,6 @@ public class DistributedLogManager {
//set the properties of query
query.setStartKey(startKey);
query.setEndKey(endKey);
-
cacheStore.deleteByQuery(query);
log.info("pageviews with keys between {} and {} are deleted.", startKey, endKey);
}
@@ -381,11 +375,9 @@ public class DistributedLogManager {
while (result.next()) { //advances the Result object and breaks if at end
long resultKey = result.getKey(); //obtain current key
Pageview resultPageview = result.get(); //obtain current value object
-
log.info("{} :", resultKey);
printPageview(resultPageview);
}
-
log.info("Number of pageviews from the query: {}", result.getOffset());
}
@@ -403,7 +395,6 @@ public class DistributedLogManager {
private void deleteSchema() {
cacheStore.deleteSchema();
log.info("Deleted schema on dataStore");
-
}
private void close() throws Exception {