<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!-- NewPage -->
<html lang="en">
<head>
<link rel="canonical" href="https://ignite.apache.org/jcache/1.0.0/javadoc/javax/cache/configuration/package-summary.html" />
<!-- Generated by javadoc (version 1.7.0_25) on Fri Mar 28 13:34:25 EST 2014 -->
<meta http-equiv="Content-Type" content="text/html" charset="UTF-8">
<title>javax.cache.configuration (JSR107 API and SPI 1.0.0 API)</title>
<meta name="date" content="2014-03-28">
<link rel="stylesheet" type="text/css" href="../../../stylesheet.css" title="Style">

<script>
  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
  })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');

  ga('create', 'UA-61232409-1', 'auto');
  ga('send', 'pageview');

</script></head>
<body>
<script type="text/javascript"><!--
    if (location.href.indexOf('is-external=true') == -1) {
        parent.document.title="javax.cache.configuration (JSR107 API and SPI 1.0.0 API)";
    }
//-->
</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="topNav"><a name="navbar_top">
<!--   -->
</a><a href="#skip-navbar_top" title="Skip navigation links"></a><a name="navbar_top_firstrow">
<!--   -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../../overview-summary.html">Overview</a></li>
<li class="navBarCell1Rev">Package</li>
<li>Class</li>
<li><a href="package-use.html">Use</a></li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../../index-all.html">Index</a></li>
<li><a href="../../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList">
<li><a href="../../../javax/cache/annotation/package-summary.html">Prev Package</a></li>
<li><a href="../../../javax/cache/event/package-summary.html">Next Package</a></li>
</ul>
<ul class="navList">
<li><a href="../../../index.html?javax/cache/configuration/package-summary.html" target="_top">Frames</a></li>
<li><a href="package-summary.html" target="_top">No Frames</a></li>
</ul>
<ul class="navList" id="allclasses_navbar_top">
<li><a href="../../../allclasses-noframe.html">All Classes</a></li>
</ul>
<div>
<script type="text/javascript"><!--
  allClassesLink = document.getElementById("allclasses_navbar_top");
  if(window==top) {
    allClassesLink.style.display = "block";
  }
  else {
    allClassesLink.style.display = "none";
  }
  //-->
</script>
</div>
<a name="skip-navbar_top">
<!--   -->
</a></div>
<!-- ========= END OF TOP NAVBAR ========= -->
<div class="header">
<h1 title="Package" class="title">Package&nbsp;javax.cache.configuration</h1>
<div class="docSummary">
<div class="block">This package contains configuration classes and interfaces.</div>
</div>
<p>See:&nbsp;<a href="#package_description">Description</a></p>
</div>
<div class="contentContainer">
<ul class="blockList">
<li class="blockList">
<table class="packageSummary" border="0" cellpadding="3" cellspacing="0" summary="Interface Summary table, listing interfaces, and an explanation">
<caption><span>Interface Summary</span><span class="tabEnd">&nbsp;</span></caption>
<tr>
<th class="colFirst" scope="col">Interface</th>
<th class="colLast" scope="col">Description</th>
</tr>
<tbody>
<tr class="altColor">
<td class="colFirst"><a href="../../../javax/cache/configuration/CacheEntryListenerConfiguration.html" title="interface in javax.cache.configuration">CacheEntryListenerConfiguration</a>&lt;K,V&gt;</td>
<td class="colLast">
<div class="block">Defines the configuration requirements for a
 <a href="../../../javax/cache/event/CacheEntryListener.html" title="interface in javax.cache.event"><code>CacheEntryListener</code></a> and a <a href="../../../javax/cache/configuration/Factory.html" title="interface in javax.cache.configuration"><code>Factory</code></a> for its
 creation.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><a href="../../../javax/cache/configuration/CompleteConfiguration.html" title="interface in javax.cache.configuration">CompleteConfiguration</a>&lt;K,V&gt;</td>
<td class="colLast">
<div class="block">A read-only representation of the complete JCache <a href="../../../javax/cache/Cache.html" title="interface in javax.cache"><code>Cache</code></a>
 configuration.</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><a href="../../../javax/cache/configuration/Configuration.html" title="interface in javax.cache.configuration">Configuration</a>&lt;K,V&gt;</td>
<td class="colLast">
<div class="block">A basic read-only representation of a <a href="../../../javax/cache/Cache.html" title="interface in javax.cache"><code>Cache</code></a> configuration.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><a href="../../../javax/cache/configuration/Factory.html" title="interface in javax.cache.configuration">Factory</a>&lt;T&gt;</td>
<td class="colLast">
<div class="block">Constructs and returns a fully configured instance of a specific factory type.</div>
</td>
</tr>
</tbody>
</table>
</li>
<li class="blockList">
<table class="packageSummary" border="0" cellpadding="3" cellspacing="0" summary="Class Summary table, listing classes, and an explanation">
<caption><span>Class Summary</span><span class="tabEnd">&nbsp;</span></caption>
<tr>
<th class="colFirst" scope="col">Class</th>
<th class="colLast" scope="col">Description</th>
</tr>
<tbody>
<tr class="altColor">
<td class="colFirst"><a href="../../../javax/cache/configuration/FactoryBuilder.html" title="class in javax.cache.configuration">FactoryBuilder</a></td>
<td class="colLast">
<div class="block">A convenience class that defines generically typed static methods to aid in
 the building of <a href="../../../javax/cache/configuration/Factory.html" title="interface in javax.cache.configuration"><code>Factory</code></a> instances.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><a href="../../../javax/cache/configuration/FactoryBuilder.ClassFactory.html" title="class in javax.cache.configuration">FactoryBuilder.ClassFactory</a>&lt;T&gt;</td>
<td class="colLast">
<div class="block">A <a href="../../../javax/cache/configuration/Factory.html" title="interface in javax.cache.configuration"><code>Factory</code></a> that instantiates a specific Class.</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><a href="../../../javax/cache/configuration/FactoryBuilder.SingletonFactory.html" title="class in javax.cache.configuration">FactoryBuilder.SingletonFactory</a>&lt;T&gt;</td>
<td class="colLast">
<div class="block">A <a href="../../../javax/cache/configuration/Factory.html" title="interface in javax.cache.configuration"><code>Factory</code></a> that always returns a specific instance.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><a href="../../../javax/cache/configuration/MutableCacheEntryListenerConfiguration.html" title="class in javax.cache.configuration">MutableCacheEntryListenerConfiguration</a>&lt;K,V&gt;</td>
<td class="colLast">
<div class="block">A convenience class providing a mutable, serializable implementation of a
 <a href="../../../javax/cache/configuration/CacheEntryListenerConfiguration.html" title="interface in javax.cache.configuration"><code>CacheEntryListenerConfiguration</code></a>.</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><a href="../../../javax/cache/configuration/MutableConfiguration.html" title="class in javax.cache.configuration">MutableConfiguration</a>&lt;K,V&gt;</td>
<td class="colLast">
<div class="block">A simple mutable implementation of a <a href="../../../javax/cache/configuration/Configuration.html" title="interface in javax.cache.configuration"><code>Configuration</code></a>.</div>
</td>
</tr>
</tbody>
</table>
</li>
<li class="blockList">
<table class="packageSummary" border="0" cellpadding="3" cellspacing="0" summary="Enum Summary table, listing enums, and an explanation">
<caption><span>Enum Summary</span><span class="tabEnd">&nbsp;</span></caption>
<tr>
<th class="colFirst" scope="col">Enum</th>
<th class="colLast" scope="col">Description</th>
</tr>
<tbody>
<tr class="altColor">
<td class="colFirst"><a href="../../../javax/cache/configuration/OptionalFeature.html" title="enum in javax.cache.configuration">OptionalFeature</a></td>
<td class="colLast">
<div class="block">Optional features that may be present in an implementation.</div>
</td>
</tr>
</tbody>
</table>
</li>
</ul>
<a name="package_description">
<!--   -->
</a>
<h2 title="Package javax.cache.configuration Description">Package javax.cache.configuration Description</h2>
<div class="block">This package contains configuration classes and interfaces.
 <p>
 Rather than configuration accepting user instances of interfaces for maximum
 portability factories are configured instead, so that instances can be
 instantiated where needed. To aid in this, FactoryBuilder can build factories
 of the required type as shown in the following example.
 <pre><code>
  MutableConfiguration&lt;String, Integer&gt; config = new MutableConfiguration&lt;String, Integer&gt;();

  config.setTypes(String.class, Integer.class)
        .setStoreByValue(false)
        .setStatisticsEnabled(true)
        .setExpiryPolicyFactory(FactoryBuilder.factoryOf(
            new AccessedExpiryPolicy&lt;String&gt;(new Duration(TimeUnit.HOURS, 1))));
 </code></pre>
 <p>
 <a href="../../../javax/cache/configuration/OptionalFeature.html" title="enum in javax.cache.configuration"><code>OptionalFeature</code></a>, though not specific to
 cache configuration, allows application to determine the optional features
 supported at runtime.</div>
<dl><dt><span class="strong">Since:</span></dt>
  <dd>1.0</dd>
<dt><span class="strong">Author:</span></dt>
  <dd>Greg Luck</dd></dl>
</div>
<!-- ======= START OF BOTTOM NAVBAR ====== -->
<div class="bottomNav"><a name="navbar_bottom">
<!--   -->
</a><a href="#skip-navbar_bottom" title="Skip navigation links"></a><a name="navbar_bottom_firstrow">
<!--   -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../../overview-summary.html">Overview</a></li>
<li class="navBarCell1Rev">Package</li>
<li>Class</li>
<li><a href="package-use.html">Use</a></li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../../index-all.html">Index</a></li>
<li><a href="../../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList">
<li><a href="../../../javax/cache/annotation/package-summary.html">Prev Package</a></li>
<li><a href="../../../javax/cache/event/package-summary.html">Next Package</a></li>
</ul>
<ul class="navList">
<li><a href="../../../index.html?javax/cache/configuration/package-summary.html" target="_top">Frames</a></li>
<li><a href="package-summary.html" target="_top">No Frames</a></li>
</ul>
<ul class="navList" id="allclasses_navbar_bottom">
<li><a href="../../../allclasses-noframe.html">All Classes</a></li>
</ul>
<div>
<script type="text/javascript"><!--
  allClassesLink = document.getElementById("allclasses_navbar_bottom");
  if(window==top) {
    allClassesLink.style.display = "block";
  }
  else {
    allClassesLink.style.display = "none";
  }
  //-->
</script>
</div>
<a name="skip-navbar_bottom">
<!--   -->
</a></div>
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<p class="legalCopy"><small>Copyright &#169; 2014. All Rights Reserved.</small></p>
</body>
</html>
