UNPKG

apache-ignite-client

Version:

NodeJS Client for Apache Ignite

129 lines (112 loc) 4.74 kB
/* * 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. */ const FS = require('fs'); const IgniteClient = require('apache-ignite-client'); const ObjectType = IgniteClient.ObjectType; const ComplexObjectType = IgniteClient.ComplexObjectType; const BinaryObject = IgniteClient.BinaryObject; const CacheEntry = IgniteClient.CacheEntry; const ScanQuery = IgniteClient.ScanQuery; const IgniteClientConfiguration = IgniteClient.IgniteClientConfiguration; const ENDPOINT = 'localhost:10800'; const USER_NAME = 'ignite'; const PASSWORD = 'ignite'; const TLS_KEY_FILE_NAME = __dirname + '/certs/client.key'; const TLS_CERT_FILE_NAME = __dirname + '/certs/client.crt'; const TLS_CA_FILE_NAME = __dirname + '/certs/ca.crt'; const CACHE_NAME = 'AuthTlsExample_cache'; // This example demonstrates how to establish a secure connection to an Ignite node and use username/password authentication, // as well as basic Key-Value Queries operations for primitive types: // - connects to a node using TLS and providing username/password // - creates a cache, if it doesn't exist // - specifies key and value type of the cache // - put data of primitive types into the cache // - get data from the cache // - destroys the cache class AuthTlsExample { async start() { const igniteClient = new IgniteClient(this.onStateChanged.bind(this)); try { const connectionOptions = { 'key' : FS.readFileSync(TLS_KEY_FILE_NAME), 'cert' : FS.readFileSync(TLS_CERT_FILE_NAME), 'ca' : FS.readFileSync(TLS_CA_FILE_NAME) }; await igniteClient.connect(new IgniteClientConfiguration(ENDPOINT). setUserName(USER_NAME). setPassword(PASSWORD). setConnectionOptions(true, connectionOptions)); const cache = (await igniteClient.getOrCreateCache(CACHE_NAME)). setKeyType(ObjectType.PRIMITIVE_TYPE.INTEGER). setValueType(ObjectType.PRIMITIVE_TYPE.SHORT_ARRAY); await this.putGetData(cache); await igniteClient.destroyCache(CACHE_NAME); } catch (err) { console.log('ERROR: ' + err.message); } finally { igniteClient.disconnect(); } } async putGetData(cache) { let keys = [1, 2, 3]; let values = keys.map(key => this.generateValue(key)); // put multiple values in parallel await Promise.all([ await cache.put(keys[0], values[0]), await cache.put(keys[1], values[1]), await cache.put(keys[2], values[2]) ]); console.log('Cache values put successfully'); // get values sequentially let value; for (let i = 0; i < keys.length; i++) { value = await cache.get(keys[i]); if (!this.compareValues(value, values[i])) { console.log('Unexpected cache value!'); return; } } console.log('Cache values get successfully'); } compareValues(array1, array2) { return array1.length === array2.length && array1.every((value1, index) => value1 === array2[index]); } generateValue(key) { const length = key + 5; const result = new Array(length); for (let i = 0; i < length; i++) { result[i] = key * 10 + i; } return result; } onStateChanged(state, reason) { if (state === IgniteClient.STATE.CONNECTED) { console.log('Client is started'); } else if (state === IgniteClient.STATE.DISCONNECTED) { console.log('Client is stopped'); if (reason) { console.log(reason); } } } } const authTlsExample = new AuthTlsExample(); authTlsExample.start();