You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by tv...@apache.org on 2015/04/14 15:30:04 UTC
svn commit: r1673421 -
/commons/proper/jcs/trunk/xdocs/getting_started/intro.xml
Author: tv
Date: Tue Apr 14 13:30:04 2015
New Revision: 1673421
URL: http://svn.apache.org/r1673421
Log:
JCS-124 Make the code in Step 5 on the JCS overview page a full working class that can compile
Modified:
commons/proper/jcs/trunk/xdocs/getting_started/intro.xml
Modified: commons/proper/jcs/trunk/xdocs/getting_started/intro.xml
URL: http://svn.apache.org/viewvc/commons/proper/jcs/trunk/xdocs/getting_started/intro.xml?rev=1673421&r1=1673420&r2=1673421&view=diff
==============================================================================
--- commons/proper/jcs/trunk/xdocs/getting_started/intro.xml (original)
+++ commons/proper/jcs/trunk/xdocs/getting_started/intro.xml Tue Apr 14 13:30:04 2015
@@ -19,143 +19,141 @@
-->
<document>
- <properties>
- <title>Getting Started -- Introduction</title>
- <author email="asmuts@apache.org">Aaron Smuts</author>
- </properties>
-
- <body>
-
- <section name="Getting Started">
- <p>
- To start using JCS you need to (1) understand the core
- concepts, (2) download JCS, (3) get the required
- dependencies, (4) configure JCS, and (5) then start
- programming to it. The purpose of the getting started
- guide is to help you get up and running with JCS as
- quickly as possible. In depth documentation on the
- various features of JCS is provided in the User's Guide.
- </p>
- </section>
-
- <section name="STEP 1: Understand the Core Concepts">
- <p>
- In order to use JCS, you must understand a few core
- concepts, most importantly you need to know the
- difference between "elements," "regions," and
- "auxiliaries".
- </p>
- <p>
- JCS is an object cache. You can put objects, or
- "elements," into JCS and reference them via a key, much
- like a hashtable.
- </p>
- <p>
- You can think of JCS as a collection of hashtables that
- you reference by name. Each of these hashtables is
- called a "region," and each region can be configured
- independently of the others. For instance, I may have a
- region called Cities where I cache City objects that
- change infrequently. I may also define a region called
- Products where I cache product data that changes more
- frequently. I would configure the volatile Product
- region to expire elements more quickly than the City
- region.
- </p>
- <p>
- "Auxiliaries" are optional plugins that a region can
- use. The core auxiliaries are the Indexed Disk Cache,
- the TCP Lateral Cache, and the Remote Cache Server. The
- Disk Cache, for example, allows you to swap items onto
- disk when a memory threshold is reached. You can read
- more about the available auxiliaries
- <a href="../JCSPlugins.html">HERE</a>
- .
- </p>
- </section>
-
-
- <section name="STEP 2: Download JCS">
- <p>
- Download the latest version of JCS. The latest JCS
- builds are located
- <a
- href="http://www.apache.org/dist/commons/jcs/">
- HERE
- </a>
- </p>
- <p>
- If you would like to build JCS yourself, check it out
- from Subversion and build it as you would any other
- project built by Maven. The location of the
- repository is documented in the project info pages that
- are linked via the left nav.
- </p>
- </section>
+ <properties>
+ <title>Getting Started -- Introduction</title>
+ <author email="asmuts@apache.org">Aaron Smuts</author>
+ </properties>
- <section name="STEP 3: Get the Required Dependencies">
+ <body>
+
+ <section name="Getting Started">
+ <p>
+ To start using JCS you need to (1) understand the core
+ concepts, (2) download JCS, (3) get the required
+ dependencies, (4) configure JCS, and (5) then start
+ programming to it. The purpose of the getting started
+ guide is to help you get up and running with JCS as
+ quickly as possible. In depth documentation on the
+ various features of JCS is provided in the User's Guide.
+ </p>
+ </section>
+
+ <section name="STEP 1: Understand the Core Concepts">
+ <p>
+ In order to use JCS, you must understand a few core
+ concepts, most importantly you need to know the
+ difference between "elements," "regions," and
+ "auxiliaries".
+ </p>
+ <p>
+ JCS is an object cache. You can put objects, or
+ "elements," into JCS and reference them via a key, much
+ like a hashtable.
+ </p>
+ <p>
+ You can think of JCS as a collection of maps that
+ you reference by name. Each of these maps is
+ called a "region," and each region can be configured
+ independently of the others. For instance, I may have a
+ region called Cities where I cache City objects that
+ change infrequently. I may also define a region called
+ Products where I cache product data that changes more
+ frequently. I would configure the volatile Product
+ region to expire elements more quickly than the City
+ region.
+ </p>
+ <p>
+ "Auxiliaries" are optional plugins that a region can
+ use. The core auxiliaries are the Indexed Disk Cache,
+ the TCP Lateral Cache, and the Remote Cache Server. The
+ Disk Cache, for example, allows you to swap items onto
+ disk when a memory threshold is reached. You can read
+ more about the available auxiliaries
+ <a href="../JCSPlugins.html">HERE</a>
+ .
+ </p>
+ </section>
+
+
+ <section name="STEP 2: Download JCS">
+ <p>
+ Download the latest version of JCS. The latest JCS
+ builds are located
+ <a
+ href="http://www.apache.org/dist/commons/jcs/">
+ HERE
+ </a>
+ </p>
+ <p>
+ If you would like to build JCS yourself, check it out
+ from Subversion and build it as you would any other
+ project built by Maven. The location of the
+ repository is documented in the project info pages that
+ are linked via the left nav.
+ </p>
+ </section>
+
+ <section name="STEP 3: Get the Required Dependencies">
<p>
Beginning with version 2.0 the core of JCS (the LRU memory
cache, the indexed disk cache, the TCP lateral, and the
RMI remote server) requires only commons-logging.
</p>
- <p>
- Beginning with version 1.2.7.0 and up to version 1.3, the core of
+ <p>
+ Beginning with version 1.2.7.0 and up to version 1.3, the core of
JCS (the LRU memory
- cache, the indexed disk cache, the TCP lateral, and the
- RMI remote server) requires only two other jars.
- </p>
- <p>
- <a href="http://gee.cs.oswego.edu/dl/classes/EDU/oswego/cs/dl/util/concurrent/intro.html">
- concurrent
- </a>
- </p>
- <p>commons-logging</p>
- <p>
- Versions 1.2.6.9 and below also require the following
- two additional jars:
- </p>
- <p>commons-collections</p>
- <p>commons-lang</p>
- <p>
- All of the other dependencies listed on the project info
- page are for optional plugins.
- </p>
- </section>
-
- <section name="STEP 4: Configure JCS">
- <p>
- JCS is configured from a properties file called
- "cache.ccf". There are alternatives to using this file,
- but they are beyond the scope of the getting started
- guide.
- </p>
- <p>
- The cache configuration has three parts: default,
- regions, and auxiliaries. You can think of the
- auxiliaries as log4j appenders and the regions as log4j
- categories. For each region (or category) you can
- specify and auxiliary (or appender to use). If you don't
- define a region in the cache.ccf, then the default
- settings are used. The difference between JCS and log4j
- is that in JCS, pre-defined regions do not inherent
- auxiliaries from the default region.
- </p>
- <p>
- The following cache.ccf file defines one region called
- "testCache1" and uses the Indexed Disk Cache, here
- called "DC" by default. The LRU Memory Cache is selected
- as the memory manager.
- </p>
- <source>
- <![CDATA[
+ cache, the indexed disk cache, the TCP lateral, and the
+ RMI remote server) requires only two other jars.
+ </p>
+ <p>
+ <a href="http://gee.cs.oswego.edu/dl/classes/EDU/oswego/cs/dl/util/concurrent/intro.html">
+ concurrent
+ </a>
+ </p>
+ <p>commons-logging</p>
+ <p>
+ Versions 1.2.6.9 and below also require the following
+ two additional jars:
+ </p>
+ <p>commons-collections</p>
+ <p>commons-lang</p>
+ <p>
+ All of the other dependencies listed on the project info
+ page are for optional plugins.
+ </p>
+ </section>
+
+ <section name="STEP 4: Configure JCS">
+ <p>
+ JCS is configured from a properties file called
+ "cache.ccf". There are alternatives to using this file,
+ but they are beyond the scope of the getting started
+ guide.
+ </p>
+ <p>
+ The cache configuration has three parts: default,
+ regions, and auxiliaries. You can think of the
+ auxiliaries as log4j appenders and the regions as log4j
+ categories. For each region (or category) you can
+ specify and auxiliary (or appender to use). If you don't
+ define a region in the cache.ccf, then the default
+ settings are used. The difference between JCS and log4j
+ is that in JCS, pre-defined regions do not inherent
+ auxiliaries from the default region.
+ </p>
+ <p>
+ The following cache.ccf file defines one region called
+ "testCache1" and uses the Indexed Disk Cache, here
+ called "DC" by default. The LRU Memory Cache is selected
+ as the memory manager.
+ </p>
+ <source>
+ <![CDATA[
# DEFAULT CACHE REGION
jcs.default=DC
-jcs.default.cacheattributes=
- org.apache.commons.jcs.engine.CompositeCacheAttributes
+jcs.default.cacheattributes=org.apache.commons.jcs.engine.CompositeCacheAttributes
jcs.default.cacheattributes.MaxObjects=1000
-jcs.default.cacheattributes.MemoryCacheName=
- org.apache.commons.jcs.engine.memory.lru.LRUMemoryCache
+jcs.default.cacheattributes.MemoryCacheName=org.apache.commons.jcs.engine.memory.lru.LRUMemoryCache
jcs.default.cacheattributes.UseMemoryShrinker=false
jcs.default.cacheattributes.MaxMemoryIdleTime=3600
jcs.default.cacheattributes.ShrinkerInterval=60
@@ -169,11 +167,9 @@ jcs.default.elementattributes.IsLateral=
# PRE-DEFINED CACHE REGIONS
jcs.region.testCache1=DC
-jcs.region.testCache1.cacheattributes=
- org.apache.commons.jcs.engine.CompositeCacheAttributes
+jcs.region.testCache1.cacheattributes=org.apache.commons.jcs.engine.CompositeCacheAttributes
jcs.region.testCache1.cacheattributes.MaxObjects=1000
-jcs.region.testCache1.cacheattributes.MemoryCacheName=
- org.apache.commons.jcs.engine.memory.lru.LRUMemoryCache
+jcs.region.testCache1.cacheattributes.MemoryCacheName=org.apache.commons.jcs.engine.memory.lru.LRUMemoryCache
jcs.region.testCache1.cacheattributes.UseMemoryShrinker=false
jcs.region.testCache1.cacheattributes.MaxMemoryIdleTime=3600
jcs.region.testCache1.cacheattributes.ShrinkerInterval=60
@@ -182,93 +178,145 @@ jcs.region.testCache1.elementattributes=
jcs.region.testCache1.elementattributes.IsEternal=false
# AVAILABLE AUXILIARY CACHES
-jcs.auxiliary.DC=
- org.apache.commons.jcs.auxiliary.disk.indexed.IndexedDiskCacheFactory
-jcs.auxiliary.DC.attributes=
- org.apache.commons.jcs.auxiliary.disk.indexed.IndexedDiskCacheAttributes
+jcs.auxiliary.DC=org.apache.commons.jcs.auxiliary.disk.indexed.IndexedDiskCacheFactory
+jcs.auxiliary.DC.attributes=org.apache.commons.jcs.auxiliary.disk.indexed.IndexedDiskCacheAttributes
jcs.auxiliary.DC.attributes.DiskPath=${user.dir}/jcs_swap
jcs.auxiliary.DC.attributes.MaxPurgatorySize=10000000
jcs.auxiliary.DC.attributes.MaxKeySize=1000000
jcs.auxiliary.DC.attributes.MaxRecycleBinSize=5000
jcs.auxiliary.DC.attributes.OptimizeAtRemoveCount=300000
jcs.auxiliary.DC.attributes.ShutdownSpoolTimeLimit=60
- ]]>
- </source>
- <p>
- Basic JCS configuration is described in more detail
- <a href="../BasicJCSConfiguration.html">HERE</a>
- </p>
- <p>
- Element level configuration is described in more detail
- <a href="../ElementAttributes.html">HERE</a>
- </p>
- <p>
- For more information on advanced configuration options
- and the available plugins, see the User's Guide.
- </p>
- </section>
-
- <section name="STEP 5: Programming to JCS">
- <p>
- JCS provides a few convenient classes that should meet all
- your needs.
- </p>
- <p>
- To get a cache region you simply ask JCS for the region
- by name. If you wanted to use JCS for City objects, you
- would do something like this:
- </p>
- <source>
- <![CDATA[
+]]>
+ </source>
+ <p>
+ Basic JCS configuration is described in more detail
+ <a href="../BasicJCSConfiguration.html">HERE</a>
+ </p>
+ <p>
+ Element level configuration is described in more detail
+ <a href="../ElementAttributes.html">HERE</a>
+ </p>
+ <p>
+ For more information on advanced configuration options
+ and the available plugins, see the User's Guide.
+ </p>
+ </section>
+
+ <section name="STEP 5: Programming to JCS">
+ <p>
+ JCS provides a few convenient classes that should meet all
+ your needs.
+ </p>
+ <p>
+ To get a cache region you simply ask JCS for the region
+ by name. If you wanted to use JCS for City objects, you
+ would do something like this:
+ </p>
+ <source>
+ <![CDATA[
+import java.io.Serializable;
import org.apache.commons.jcs.JCS;
import org.apache.commons.jcs.access.CacheAccess;
import org.apache.commons.jcs.access.exception.CacheException;
-. . .
-
- private static final String cacheRegionName = "city";
+public class JcsExample
+{
+ public static void main( String[] args )
+ {
+ JcsExample example = new JcsExample();
+ example.testCache();
+ }
private CacheAccess<String, City> cache = null;
-. . .
- // in your constructor you might do this
- try
+ public JcsExample()
{
- CacheAccess<String, City> c = JCS.getInstance( this.getCacheRegionName() );
- setCache( c );
+ try
+ {
+ cache = JCS.getInstance( "default" );
+ }
+ catch ( CacheException e )
+ {
+ System.out.println( String.format( "Problem initializing cache: %s", e.getMessage() ) );
+ }
}
- catch ( CacheException e )
+
+ public void putInCache( City city )
{
- log.error( "Problem initializing cache for region name ["
- + this.getCacheRegionName() + "].", e );
+ String key = city.name;
+ try
+ {
+ cache.put( key, city );
+ }
+ catch ( CacheException e )
+ {
+ System.out.println( String.format( "Problem putting city %s in the cache, for key %s%n%s",
+ city.name, key, e.getMessage() ) );
+ }
}
-. . .
-
- // to get a city out of the cache by id you might do this:
- String key = "cityId:" + String.valueOf( id );
+ public City retrieveFromCache( String cityKey )
+ {
+ return cache.get( cityKey );
+ }
- City city = cache.get( key );
+ public void testCache()
+ {
+ City zurich = new City( "Zürich", "Switzerland", 366765 );
+ putInCache( zurich );
+
+ City berlin = new City( "Berlin", "Germany", 3502000 );
+ putInCache( berlin );
+
+ City johannesburg = new City( "Johannesburg", "South Africa", 12200000 );
+ putInCache( johannesburg );
-. . .
+ City retrievedCity1 = retrieveFromCache( "Berlin" );
+ if ( retrievedCity1 != null )
+ {
+ System.out.println( retrievedCity1.toString() );
+ }
+ else
+ {
+ System.out.println( "No object was found in the cache for the key \"Berlin\"" );
+ }
- // to put a city object in the cache, you could do this:
- try
- {
- // if it isn't null, insert it
- if ( city != null )
+ City retrievedCity2 = retrieveFromCache( "New York" );
+ if ( retrievedCity2 != null )
{
- cache.put( key, city );
+ System.out.println( retrievedCity2.toString() );
+ }
+ else
+ {
+ System.out.println( "No object was found in the cache for the key \"New York\"" );
}
}
- catch ( CacheException e )
+
+ // defined as a nested inner class to reduce number of .java files in the example
+ public class City implements Serializable
{
- log.error( "Problem putting "
- + city + " in the cache, for key " + key, e );
+ private static final long serialVersionUID = 6392376146163510146L;
+ public String name;
+ public String country;
+ public int population;
+
+ public City( String name, String country, int population )
+ {
+ this.name = name;
+ this.country = country;
+ this.population = population;
+ }
+
+ @Override
+ public String toString()
+ {
+ return String.format( "%s is a city in the country %s with a population of %d", name, country, population );
+ }
}
- ]]>
+}
+]]>
</source>
- </section>
+ </section>
- </body>
+ </body>
</document>