com.espertech.esper.regression.db.TestDatabaseQueryResultCache.java Source code

Java tutorial

Introduction

Here is the source code for com.espertech.esper.regression.db.TestDatabaseQueryResultCache.java

Source

/*
 * *************************************************************************************
 *  Copyright (C) 2008 EsperTech, Inc. All rights reserved.                            *
 *  http://esper.codehaus.org                                                          *
 *  http://www.espertech.com                                                           *
 *  ---------------------------------------------------------------------------------- *
 *  The software in this package is published under the terms of the GPL license       *
 *  a copy of which has been included with this distribution in the license.txt file.  *
 * *************************************************************************************
 */

package com.espertech.esper.regression.db;

import com.espertech.esper.client.scopetest.SupportUpdateListener;
import junit.framework.TestCase;
import com.espertech.esper.client.*;
import com.espertech.esper.support.epl.SupportDatabaseService;
import com.espertech.esper.support.bean.SupportBean_S0;
import com.espertech.esper.support.client.SupportConfigFactory;
import com.espertech.esper.client.EventBean;

import java.util.Properties;
import java.util.Random;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

public class TestDatabaseQueryResultCache extends TestCase {
    private EPServiceProvider epService;
    private SupportUpdateListener listener;

    protected void tearDown() throws Exception {
        listener = null;
        epService.destroy();
    }

    public void testExpireCacheNoPurge() {
        ConfigurationDBRef configDB = getDefaultConfig();
        configDB.setExpiryTimeCache(1.0d, Double.MAX_VALUE);
        tryCache(configDB, 5000, 1000, false);
    }

    public void testLRUCache() {
        ConfigurationDBRef configDB = getDefaultConfig();
        configDB.setLRUCache(100);
        tryCache(configDB, 2000, 1000, false);
    }

    public void testLRUCache25k() {
        ConfigurationDBRef configDB = getDefaultConfig();
        configDB.setLRUCache(100);
        tryCache(configDB, 7000, 25000, false);
    }

    public void testExpireCache25k() {
        ConfigurationDBRef configDB = getDefaultConfig();
        configDB.setExpiryTimeCache(2, 2);
        tryCache(configDB, 7000, 25000, false);
    }

    public void testExpireRandomKeys() {
        ConfigurationDBRef configDB = getDefaultConfig();
        configDB.setExpiryTimeCache(1, 1);
        tryCache(configDB, 7000, 25000, true);
    }

    private void tryCache(ConfigurationDBRef configDB, long assertMaximumTime, int numEvents,
            boolean useRandomLookupKey) {
        Configuration configuration = SupportConfigFactory.getConfiguration();
        configuration.addDatabaseReference("MyDB", configDB);

        epService = EPServiceProviderManager.getProvider("TestDatabaseQueryResultCache", configuration);
        epService.initialize();

        long startTime = System.currentTimeMillis();
        trySendEvents(epService, numEvents, useRandomLookupKey);
        long endTime = System.currentTimeMillis();
        log.info(".tryCache " + configDB.getDataCacheDesc() + " delta=" + (endTime - startTime));
        assertTrue(endTime - startTime < assertMaximumTime);
    }

    private void trySendEvents(EPServiceProvider engine, int numEvents, boolean useRandomLookupKey) {
        Random random = new Random();
        String stmtText = "select myint from " + SupportBean_S0.class.getName() + " as s0,"
                + " sql:MyDB ['select myint from mytesttable where ${id} = mytesttable.mybigint'] as s1";

        EPStatement statement = engine.getEPAdministrator().createEPL(stmtText);
        listener = new SupportUpdateListener();
        statement.addListener(listener);

        log.debug(".trySendEvents Sending " + numEvents + " events");
        for (int i = 0; i < numEvents; i++) {
            int id = 0;
            if (useRandomLookupKey) {
                id = random.nextInt(1000);
            } else {
                id = i % 10 + 1;
            }

            SupportBean_S0 bean = new SupportBean_S0(id);
            engine.getEPRuntime().sendEvent(bean);

            if ((!useRandomLookupKey) || ((id >= 1) && (id <= 10))) {
                EventBean received = listener.assertOneGetNewAndReset();
                assertEquals(id * 10, received.get("myint"));
            }
        }

        log.debug(".trySendEvents Stopping statement");
        statement.stop();
    }

    private ConfigurationDBRef getDefaultConfig() {
        ConfigurationDBRef configDB = new ConfigurationDBRef();
        configDB.setDriverManagerConnection(SupportDatabaseService.DRIVER, SupportDatabaseService.FULLURL,
                new Properties());
        configDB.setConnectionLifecycleEnum(ConfigurationDBRef.ConnectionLifecycleEnum.RETAIN);
        return configDB;
    }

    private static final Log log = LogFactory.getLog(TestDatabaseQueryResultCache.class);
}