You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by dm...@apache.org on 2016/03/24 12:41:19 UTC
[17/25] ignite git commit: IGNITE-2415: CacheLoadOnlyStoreAdapter use
example. - Fixes #569.
IGNITE-2415: CacheLoadOnlyStoreAdapter use example. - Fixes #569.
Signed-off-by: shtykh_roman <rs...@yahoo.com>
Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/2f64ab0b
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/2f64ab0b
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/2f64ab0b
Branch: refs/heads/ignite-2849
Commit: 2f64ab0b4739a646dfb2c3b1fb2ed5b8039b43b4
Parents: 66f9a34
Author: shtykh_roman <rs...@yahoo.com>
Authored: Thu Mar 24 11:00:21 2016 +0900
Committer: shtykh_roman <rs...@yahoo.com>
Committed: Thu Mar 24 11:00:21 2016 +0900
----------------------------------------------------------------------
.../store/CacheLoadOnlyStoreExample.java | 166 +++++++++++++++++++
examples/src/main/resources/person.csv | 20 +++
.../ignite/examples/CacheExamplesSelfTest.java | 8 +
3 files changed, 194 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ignite/blob/2f64ab0b/examples/src/main/java/org/apache/ignite/examples/datagrid/store/CacheLoadOnlyStoreExample.java
----------------------------------------------------------------------
diff --git a/examples/src/main/java/org/apache/ignite/examples/datagrid/store/CacheLoadOnlyStoreExample.java b/examples/src/main/java/org/apache/ignite/examples/datagrid/store/CacheLoadOnlyStoreExample.java
new file mode 100644
index 0000000..4635c16
--- /dev/null
+++ b/examples/src/main/java/org/apache/ignite/examples/datagrid/store/CacheLoadOnlyStoreExample.java
@@ -0,0 +1,166 @@
+/*
+ * 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.ignite.examples.datagrid.store;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.Serializable;
+import java.util.Iterator;
+import java.util.NoSuchElementException;
+import java.util.Scanner;
+import javax.cache.configuration.FactoryBuilder;
+import javax.cache.integration.CacheLoaderException;
+import org.apache.ignite.Ignite;
+import org.apache.ignite.IgniteCache;
+import org.apache.ignite.IgniteException;
+import org.apache.ignite.Ignition;
+import org.apache.ignite.cache.CacheMode;
+import org.apache.ignite.cache.CachePeekMode;
+import org.apache.ignite.cache.store.CacheLoadOnlyStoreAdapter;
+import org.apache.ignite.configuration.CacheConfiguration;
+import org.apache.ignite.examples.ExampleNodeStartup;
+import org.apache.ignite.examples.model.Person;
+import org.apache.ignite.internal.util.IgniteUtils;
+import org.apache.ignite.internal.util.typedef.T2;
+import org.apache.ignite.lang.IgniteBiTuple;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * Example of how to load data from CSV file using {@link CacheLoadOnlyStoreAdapter}.
+ * <p>
+ * The adapter is intended to be used in cases when you need to pre-load a cache from text or file of any other format.
+ * <p>
+ * Remote nodes can be started with {@link ExampleNodeStartup} in another JVM which will
+ * start node with {@code examples/config/example-ignite.xml} configuration.
+ */
+public class CacheLoadOnlyStoreExample {
+ /** Cache name. */
+ private static final String CACHE_NAME = CacheLoadOnlyStoreExample.class.getSimpleName();
+
+ /**
+ * Executes example.
+ *
+ * @param args Command line arguments, none required.
+ * @throws IgniteException If example execution failed.
+ */
+ public static void main(String[] args) throws IgniteException {
+ try (Ignite ignite = Ignition.start("examples/config/example-ignite.xml")) {
+ System.out.println();
+ System.out.println(">>> CacheLoadOnlyStoreExample started.");
+
+ ProductLoader productLoader = new ProductLoader("examples/src/main/resources/person.csv");
+
+ productLoader.setThreadsCount(2);
+ productLoader.setBatchSize(10);
+ productLoader.setBatchQueueSize(1);
+
+ try (IgniteCache<Long, Person> cache = ignite.getOrCreateCache(cacheConfiguration(productLoader))) {
+ // load data.
+ cache.loadCache(null);
+
+ System.out.println(">>> Loaded number of items: " + cache.size(CachePeekMode.PRIMARY));
+
+ System.out.println(">>> Data for the person by id1: " + cache.get(1L));
+ }
+ finally {
+ // Distributed cache could be removed from cluster only by #destroyCache() call.
+ ignite.destroyCache(CACHE_NAME);
+ }
+ }
+ }
+
+ /**
+ * Creates cache configurations for the loader.
+ *
+ * @return {@link CacheConfiguration}.
+ */
+ private static CacheConfiguration cacheConfiguration(ProductLoader productLoader) {
+ CacheConfiguration cacheCfg = new CacheConfiguration();
+
+ cacheCfg.setCacheMode(CacheMode.PARTITIONED);
+ cacheCfg.setName(CACHE_NAME);
+
+ // provide the loader.
+ cacheCfg.setCacheStoreFactory(new FactoryBuilder.SingletonFactory(productLoader));
+
+ return cacheCfg;
+ }
+
+ /**
+ * Csv data loader for product data.
+ */
+ private static class ProductLoader extends CacheLoadOnlyStoreAdapter<Long, Person, String> implements Serializable {
+ /** Csv file name. */
+ final String csvFileName;
+
+ /** Constructor. */
+ ProductLoader(String csvFileName) {
+ this.csvFileName = csvFileName;
+ }
+
+ /** {@inheritDoc} */
+ @Override protected Iterator<String> inputIterator(@Nullable Object... args) throws CacheLoaderException {
+ final Scanner scanner;
+
+ try {
+ File path = IgniteUtils.resolveIgnitePath(csvFileName);
+
+ if (path == null)
+ throw new CacheLoaderException("Failed to open the source file: " + csvFileName);
+
+ scanner = new Scanner(path);
+
+ scanner.useDelimiter("\\n");
+ }
+ catch (FileNotFoundException e) {
+ throw new CacheLoaderException("Failed to open the source file " + csvFileName, e);
+ }
+
+ /**
+ * Iterator for text input. The scanner is implicitly closed when there's nothing to scan.
+ */
+ return new Iterator<String>() {
+ /** {@inheritDoc} */
+ @Override public boolean hasNext() {
+ if (!scanner.hasNext()) {
+ scanner.close();
+
+ return false;
+ }
+
+ return true;
+ }
+
+ /** {@inheritDoc} */
+ @Override public String next() {
+ if (!hasNext())
+ throw new NoSuchElementException();
+
+ return scanner.next();
+ }
+ };
+ }
+
+ /** {@inheritDoc} */
+ @Nullable @Override protected IgniteBiTuple<Long, Person> parse(String rec, @Nullable Object... args) {
+ String[] p = rec.split("\\s*,\\s*");
+ return new T2<>(Long.valueOf(p[0]), new Person(Long.valueOf(p[0]), Long.valueOf(p[1]),
+ p[2], p[3], Double.valueOf(p[4]), p[5].trim()));
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/ignite/blob/2f64ab0b/examples/src/main/resources/person.csv
----------------------------------------------------------------------
diff --git a/examples/src/main/resources/person.csv b/examples/src/main/resources/person.csv
new file mode 100644
index 0000000..6f45854
--- /dev/null
+++ b/examples/src/main/resources/person.csv
@@ -0,0 +1,20 @@
+1,201,name1,surname1,1000,r1
+2,202,name2,surname2,2000,r2
+3,203,name3,surname3,3000,r3
+4,204,name4,surname4,4000,r4
+5,205,name5,surname5,5000,r5
+6,206,name6,surname6,6000,r6
+7,207,name7,surname7,7000,r7
+8,208,name8,surname8,8000,r8
+9,209,name9,surname9,9000,r9
+10,210,name10,surname10,10000,r10
+11,211,name11,surname11,11000,r11
+12,212,name12,surname12,12000,r12
+13,213,name13,surname13,13000,r13
+14,214,name14,surname14,14000,r14
+15,215,name15,surname15,15000,r15
+16,216,name16,surname16,16000,r16
+17,217,name17,surname17,17000,r17
+18,218,name18,surname18,18000,r18
+19,219,name19,surname19,19000,r19
+20,220,name20,surname20,20000,r20
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/ignite/blob/2f64ab0b/examples/src/test/java/org/apache/ignite/examples/CacheExamplesSelfTest.java
----------------------------------------------------------------------
diff --git a/examples/src/test/java/org/apache/ignite/examples/CacheExamplesSelfTest.java b/examples/src/test/java/org/apache/ignite/examples/CacheExamplesSelfTest.java
index 39c2ea6..541291b 100644
--- a/examples/src/test/java/org/apache/ignite/examples/CacheExamplesSelfTest.java
+++ b/examples/src/test/java/org/apache/ignite/examples/CacheExamplesSelfTest.java
@@ -26,6 +26,7 @@ import org.apache.ignite.examples.datagrid.CachePutGetExample;
import org.apache.ignite.examples.datagrid.CacheQueryExample;
import org.apache.ignite.examples.datagrid.CacheTransactionExample;
import org.apache.ignite.examples.datagrid.starschema.CacheStarSchemaExample;
+import org.apache.ignite.examples.datagrid.store.CacheLoadOnlyStoreExample;
import org.apache.ignite.examples.datastructures.IgniteAtomicLongExample;
import org.apache.ignite.examples.datastructures.IgniteAtomicReferenceExample;
import org.apache.ignite.examples.datastructures.IgniteAtomicSequenceExample;
@@ -158,4 +159,11 @@ public class CacheExamplesSelfTest extends GridAbstractExamplesTest {
public void testCacheContinuousQueryExample() throws Exception {
CacheContinuousQueryExample.main(EMPTY_ARGS);
}
+
+ /**
+ * @throws Exception If failed.
+ */
+ public void testCacheLoadOnlyStoreExample() throws Exception {
+ CacheLoadOnlyStoreExample.main(EMPTY_ARGS);
+ }
}