All Downloads are FREE. Search and download functionalities are using the official Maven repository.

flashcache.Quote Maven / Gradle / Ivy

There is a newer version: 2.0-BETA
Show newest version
/*
 * Copyright (c) 2010-2015 Pivotal Software, Inc. All rights reserved.
 *
 * Licensed 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. See accompanying
 * LICENSE file.
 */
package flashcache;

import com.gemstone.gemfire.cache.Cache;
import com.gemstone.gemfire.cache.CacheFactory;
import com.gemstone.gemfire.cache.CacheListener;
import com.gemstone.gemfire.cache.ExpirationAttributes;
import static com.gemstone.gemfire.cache.RegionShortcut.*;
import com.gemstone.gemfire.cache.Region;
import com.gemstone.gemfire.cache.RegionFactory;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Properties;

/** 
 * This class is an interactive command-line application that looks up
 * NASDAQ stock symbols and displays current quote information.  A
 * cache loader, QuoteLoader, is used to read quotes from
 * quotes.nasdaq.com and cache them in the distributed GemFire cache
 * for quicker access.
 *
 * 

* * Quotes are cached for 20 seconds. At that time the cached data is * invalidated by GemFire and, if the symbol is queried again, the * QuoteLoader will be invoked to read an updated quote from NASDAQ. * *

* * The program is run like this, assuming that you have followed the instructions for setting up your * environment. * *

 * $ java flashcache.Quote 
 * Enter symbol: ORCL
 * (QuoteLoader netSearching for ORCL)
 * (QuoteLoader querying nasdaq for ORCL)
 * ORCL: last sale=9.85  net change=-0.34  volume=26,526,419
 * Enter next symbol: AMZN
 * (QuoteLoader netSearching for AMZN)
 * (QuoteLoader querying nasdaq for AMZN)
 * AMZN: last sale=36.37  net change=-0.19  volume=5,668,938
 * Enter next symbol: 
 *
 * 
* * The main prompts for a NASDAQ stock symbol. Enter a symbol, such * as SUNW, to request a quote. Enter no symbol to exit. The cached * quotes are distributed to other GemFire caches connected to the same * distributed system. Optimistic distribution is used, so there is no * locking or acknowledgment of updates, and quotes are distributed * asynchronously. * * @author GemStone Systems, Inc. * * @since 2.0 */ public class Quote { /** The GemFire region that caches quotes obtained from NASDAQ */ private Region quotes; public static void main(String args[]) throws Exception { for (int i = 0; i < args.length; i++) { System.out.println("Ignoring command line argument: " + args[i]); } Quote instance = new Quote(); instance.initializeDistSystem(System.getProperty("systemDirectory")); BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); try { System.out.print("Enter symbol: "); String symbol = reader.readLine(); while (symbol != null && symbol.length() != 0) { System.out.println(instance.getQuote(symbol)); System.out.print("Enter next symbol: "); symbol = reader.readLine(); } } catch (IOException e) { System.out.println(e.getMessage()); } System.exit(0); } /** this method returns a cached quote */ public String getQuote(String symbol) throws Exception { String anObj = (String)quotes.get(symbol); return anObj; } /** this method initializes the distributed system */ public void initializeDistSystem(String sysDir) throws Exception { Properties dsProps = new java.util.Properties(); dsProps.put("log-file", "quote.log"); dsProps.put("mcast-port", "0"); // use default properties to connect to the distributed system // and create the cache and region Cache cache = new CacheFactory(dsProps).create(); initializeCache(cache, null); } /** this method initializes the cache */ public void initializeCache(Cache cache, CacheListener aListener) throws Exception { RegionFactory rf = cache.createRegionFactory(REPLICATE); rf.setCacheLoader(new QuoteLoader()); rf.setEntryTimeToLive(new ExpirationAttributes(20)); if ( aListener != null ) { rf.addCacheListener(aListener); } //create the region quotes = rf.create("NASDAQ Quotes"); } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy