org.apache.geode_examples.cq.Example.java Source code

Java tutorial

Introduction

Here is the source code for org.apache.geode_examples.cq.Example.java

Source

/*
 * 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.geode_examples.cq;

import org.apache.geode.cache.Region;
import org.apache.geode.cache.client.ClientCache;
import org.apache.geode.cache.client.ClientCacheFactory;
import org.apache.geode.cache.client.ClientRegionShortcut;
import org.apache.geode.cache.query.*;
import java.util.concurrent.ThreadLocalRandom;
import java.util.concurrent.TimeUnit;

import com.google.common.base.Stopwatch;

public class Example {

    private ClientCache cache;
    private Region<Integer, Integer> region;
    private CqQuery randomTracker;

    private void init() throws CqException, RegionNotFoundException, CqExistsException {
        // init cache, region, and CQ

        // connect to the locator using default port 10334
        this.cache = connectToLocallyRunningGeode();

        // create a local region that matches the server region
        this.region = cache.<Integer, Integer>createClientRegionFactory(ClientRegionShortcut.PROXY)
                .create("example-region");

        this.randomTracker = this.startCQ(this.cache, this.region);
    }

    private void run() throws InterruptedException {

        this.startPuttingData(this.region);

    }

    private void close() throws CqException {

        // close the CQ and Cache
        this.randomTracker.close();
        this.cache.close();

    }

    public static void main(String[] args) throws Exception {

        Example mExample = new Example();

        mExample.init();

        mExample.run();

        mExample.close();

        System.out.println("\n---- So that is CQ's----\n");

    }

    private CqQuery startCQ(ClientCache cache, Region region)
            throws CqException, RegionNotFoundException, CqExistsException {
        // Get cache and queryService - refs to local cache and QueryService

        CqAttributesFactory cqf = new CqAttributesFactory();
        cqf.addCqListener(new RandomEventListener());
        CqAttributes cqa = cqf.create();

        String cqName = "randomTracker";

        String queryStr = "SELECT * FROM /example-region i where i > 70";

        QueryService queryService = region.getRegionService().getQueryService();
        CqQuery randomTracker = queryService.newCq(cqName, queryStr, cqa);
        randomTracker.execute();

        System.out.println("------- CQ is running\n");

        return randomTracker;
    }

    private void startPuttingData(Region region) throws InterruptedException {

        // Example will run for 20 second

        Stopwatch stopWatch = Stopwatch.createStarted();

        while (stopWatch.elapsed(TimeUnit.SECONDS) < 20) {

            // 500ms delay to make this easier to follow
            Thread.sleep(500);
            int randomKey = ThreadLocalRandom.current().nextInt(0, 99 + 1);
            int randomValue = ThreadLocalRandom.current().nextInt(0, 100 + 1);
            region.put(randomKey, randomValue);
            System.out.println("Key: " + randomKey + "     Value: " + randomValue);

        }

        stopWatch.stop();

    }

    private ClientCache connectToLocallyRunningGeode() {

        ClientCache cache = new ClientCacheFactory().addPoolLocator("127.0.0.1", 10334)
                .setPoolSubscriptionEnabled(true).set("log-level", "WARN").create();

        return cache;
    }

}