| /* |
| * 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.binary.datagrid; |
| |
| import java.sql.Timestamp; |
| import java.util.ArrayList; |
| import java.util.Collection; |
| import java.util.HashMap; |
| import java.util.Map; |
| import org.apache.ignite.Ignite; |
| import org.apache.ignite.IgniteCache; |
| import org.apache.ignite.Ignition; |
| import org.apache.ignite.binary.BinaryObject; |
| import org.apache.ignite.cache.CacheAtomicityMode; |
| import org.apache.ignite.cache.CacheMode; |
| import org.apache.ignite.configuration.CacheConfiguration; |
| import org.apache.ignite.examples.model.Address; |
| import org.apache.ignite.examples.model.Organization; |
| import org.apache.ignite.examples.model.OrganizationType; |
| |
| /** |
| * This example demonstrates use of binary objects with Ignite cache. |
| * Specifically it shows that binary objects are simple Java POJOs and do not require any special treatment. |
| * <p> |
| * The example executes several put-get operations on Ignite cache with binary values. Note that |
| * it demonstrates how binary object can be retrieved in fully-deserialized form or in binary object |
| * format using special cache projection. |
| * <p> |
| * Remote nodes should always be started with the following command: |
| * {@code 'ignite.{sh|bat} examples/config/example-ignite.xml'} |
| * <p> |
| * Alternatively you can run {@link org.apache.ignite.examples.ExampleNodeStartup} in another JVM which will |
| * start a node with {@code examples/config/example-ignite.xml} configuration. |
| */ |
| @SuppressWarnings("TypeMayBeWeakened") |
| public class CacheClientBinaryPutGetExample { |
| /** Cache name. */ |
| private static final String CACHE_NAME = CacheClientBinaryPutGetExample.class.getSimpleName(); |
| |
| /** |
| * Executes example. |
| * |
| * @param args Command line arguments, none required. |
| */ |
| public static void main(String[] args) { |
| try (Ignite ignite = Ignition.start("examples/config/example-ignite.xml")) { |
| System.out.println(); |
| System.out.println(">>> Binary objects cache put-get example started."); |
| |
| CacheConfiguration<Integer, Organization> cfg = new CacheConfiguration<>(); |
| |
| cfg.setCacheMode(CacheMode.PARTITIONED); |
| cfg.setName(CACHE_NAME); |
| cfg.setAtomicityMode(CacheAtomicityMode.ATOMIC); |
| |
| try (IgniteCache<Integer, Organization> cache = ignite.getOrCreateCache(cfg)) { |
| if (ignite.cluster().forDataNodes(cache.getName()).nodes().isEmpty()) { |
| System.out.println(); |
| System.out.println(">>> This example requires remote cache node nodes to be started."); |
| System.out.println(">>> Please start at least 1 remote cache node."); |
| System.out.println(">>> Refer to example's javadoc for details on configuration."); |
| System.out.println(); |
| |
| return; |
| } |
| |
| putGet(cache); |
| putGetBinary(cache); |
| putGetAll(cache); |
| putGetAllBinary(cache); |
| |
| System.out.println(); |
| } |
| finally { |
| // Delete cache with its content completely. |
| ignite.destroyCache(CACHE_NAME); |
| } |
| } |
| } |
| |
| /** |
| * Execute individual put and get. |
| * |
| * @param cache Cache. |
| */ |
| private static void putGet(IgniteCache<Integer, Organization> cache) { |
| // Create new Organization binary object to store in cache. |
| Organization org = new Organization( |
| "Microsoft", // Name. |
| new Address("1096 Eddy Street, San Francisco, CA", 94109), // Address. |
| OrganizationType.PRIVATE, // Type. |
| new Timestamp(System.currentTimeMillis())); // Last update time. |
| |
| // Put created data entry to cache. |
| cache.put(1, org); |
| |
| // Get recently created organization as a strongly-typed fully de-serialized instance. |
| Organization orgFromCache = cache.get(1); |
| |
| System.out.println(); |
| System.out.println(">>> Retrieved organization instance from cache: " + orgFromCache); |
| } |
| |
| /** |
| * Execute individual put and get, getting value in binary format, without de-serializing it. |
| * |
| * @param cache Cache. |
| */ |
| private static void putGetBinary(IgniteCache<Integer, Organization> cache) { |
| // Create new Organization binary object to store in cache. |
| Organization org = new Organization( |
| "Microsoft", // Name. |
| new Address("1096 Eddy Street, San Francisco, CA", 94109), // Address. |
| OrganizationType.PRIVATE, // Type. |
| new Timestamp(System.currentTimeMillis())); // Last update time. |
| |
| // Put created data entry to cache. |
| cache.put(1, org); |
| |
| // Get cache that will get values as binary objects. |
| IgniteCache<Integer, BinaryObject> binaryCache = cache.withKeepBinary(); |
| |
| // Get recently created organization as a binary object. |
| BinaryObject po = binaryCache.get(1); |
| |
| // Get organization's name from binary object (note that |
| // object doesn't need to be fully deserialized). |
| String name = po.field("name"); |
| |
| System.out.println(); |
| System.out.println(">>> Retrieved organization name from binary object: " + name); |
| } |
| |
| /** |
| * Execute bulk {@code putAll(...)} and {@code getAll(...)} operations. |
| * |
| * @param cache Cache. |
| */ |
| private static void putGetAll(IgniteCache<Integer, Organization> cache) { |
| // Create new Organization binary objects to store in cache. |
| Organization org1 = new Organization( |
| "Microsoft", // Name. |
| new Address("1096 Eddy Street, San Francisco, CA", 94109), // Address. |
| OrganizationType.PRIVATE, // Type. |
| new Timestamp(System.currentTimeMillis())); // Last update time. |
| |
| Organization org2 = new Organization( |
| "Red Cross", // Name. |
| new Address("184 Fidler Drive, San Antonio, TX", 78205), // Address. |
| OrganizationType.NON_PROFIT, // Type. |
| new Timestamp(System.currentTimeMillis())); // Last update time. |
| |
| Map<Integer, Organization> map = new HashMap<>(); |
| |
| map.put(1, org1); |
| map.put(2, org2); |
| |
| // Put created data entries to cache. |
| cache.putAll(map); |
| |
| // Get recently created organizations as a strongly-typed fully de-serialized instances. |
| Map<Integer, Organization> mapFromCache = cache.getAll(map.keySet()); |
| |
| System.out.println(); |
| System.out.println(">>> Retrieved organization instances from cache:"); |
| |
| for (Organization org : mapFromCache.values()) |
| System.out.println(">>> " + org); |
| } |
| |
| /** |
| * Execute bulk {@code putAll(...)} and {@code getAll(...)} operations, |
| * getting values in binary format, without de-serializing it. |
| * |
| * @param cache Cache. |
| */ |
| private static void putGetAllBinary(IgniteCache<Integer, Organization> cache) { |
| // Create new Organization binary objects to store in cache. |
| Organization org1 = new Organization( |
| "Microsoft", // Name. |
| new Address("1096 Eddy Street, San Francisco, CA", 94109), // Address. |
| OrganizationType.PRIVATE, // Type. |
| new Timestamp(System.currentTimeMillis())); // Last update time. |
| |
| Organization org2 = new Organization( |
| "Red Cross", // Name. |
| new Address("184 Fidler Drive, San Antonio, TX", 78205), // Address. |
| OrganizationType.NON_PROFIT, // Type. |
| new Timestamp(System.currentTimeMillis())); // Last update time. |
| |
| Map<Integer, Organization> map = new HashMap<>(); |
| |
| map.put(1, org1); |
| map.put(2, org2); |
| |
| // Put created data entries to cache. |
| cache.putAll(map); |
| |
| // Get cache that will get values as binary objects. |
| IgniteCache<Integer, BinaryObject> binaryCache = cache.withKeepBinary(); |
| |
| // Get recently created organizations as binary objects. |
| Map<Integer, BinaryObject> poMap = binaryCache.getAll(map.keySet()); |
| |
| Collection<String> names = new ArrayList<>(); |
| |
| // Get organizations' names from binary objects (note that |
| // objects don't need to be fully deserialized). |
| for (BinaryObject po : poMap.values()) |
| names.add(po.<String>field("name")); |
| |
| System.out.println(); |
| System.out.println(">>> Retrieved organization names from binary objects: " + names); |
| } |
| } |