首页 > 其他 > 详细

缓存提供者CachingProvider

时间:2014-04-23 04:52:01      阅读:1117      评论:0      收藏:0      [点我收藏+]

缓存提供者CachingProvider

缓存提供者是Java缓存API的一个核心概念,它的作用是通过一个CachingProvider,开发者获得CacheManager,并通过CacheManager和缓存交互。

通过CachingProvider可以:

●获取默认的CacheManager实例。

●通过唯一确定的URI为标识,创建CacheManager实例。

         例如一个实现可能要求CacheManager声明一个类路径中指定的配置文件,据此允许实现通过路径装载资源。

cachingProvider.getCacheManager(“/sample/ConfigurationFile.xml”);

●通过URI和ClassLoader的范围界定管理CacheManager实例。

●关闭和释放指定的CacheManager或相关CacheManager的集合。

●查询CachingProvider实现的功能,包括对可选功能的支持。    

 

CacheManager的标识和配置

CacheManager在逻辑上由URI标识,被用来在一个CachingProvider的范围内创建这些CacheManager。而应用程序通常使用默认的URI作为定义的标识,并通过CachingProvider获取CacheManager,应用程序也可以使用特定的URI以支持CacheManagers的高级配置。

例如一个实现允许URI被用作定义配置文件的位置,通常用于预配置缓存。

cachingProvider.getCacheManager(“/sample/ConfigurationFile.xml”);

应用程序部署中以相同URI定义的两个或两个以上的CacheManager,在逻辑上是等同的,在实现上可以管理相同的缓存。

例如支持分布式缓存拓扑结构的两个应用程序,使用相同URI可以在逻辑上共享同一缓存的名称和内容。在这种情况下,在一个应用程序中更改缓存条目可能对其他应用程序是可见的。

但与只支持本地缓存拓扑结构的两个应用程序,使用相同的URI可以使得它们使用同一个缓存名称,但不会共享缓存的内容。在这种情况下,一个应用程序中更改缓存条目对其他应用程序是不可见的。

下表概述了CacheManage的URI针对同一名称的使用如何影响到缓存,仅支持本地(非共享)对比分布式(或共享)的缓存拓扑。

CacheManager URI

本地(非共享) 缓存拓扑

分布式/ 共享缓存拓扑

相同

缓存使用相同的配置。
可能拥有不同的条目。

缓存使用相同的配置。
可能拥有相同的条目。

不同

缓存可能拥有不同的配置。

可能拥有不同的条目。

缓存可能拥有不同的配置。

可能拥有不同的条目。

 

CachingProvider接口定义如下:

public interface CachingProvider extends Closeable {

  CacheManager getCacheManager(URI uri, ClassLoader classLoader, Properties properties);

  ClassLoader getDefaultClassLoader();

  URI getDefaultURI();

  Properties getDefaultProperties();

  CacheManager getCacheManager(URI uri, ClassLoader classLoader);

  CacheManager getCacheManager();

  void close();

  void close(ClassLoader classLoader);

  void close(URI uri, ClassLoader classLoader);

  boolean isSupported(OptionalFeature optionalFeature);

}

 

尽管可选,在Java SE环境中获取CachingProvider实例的主要手段是使用Caching引导类。

Caching引导类提供了三种机制,以便定位和实例化一个或多个CachingProvider:

●假定实现中被定义为一个服务,并通过使用一个java.util.ServiceLoader来解析它。
●允许开发人员通过设置javax.cache.CachingProvider的 Java系统属性定义所需的CachingProvider的完全限定类名来指定默认的实现。
●允许应用程序使用完全限定类名显式地定义CachingProvider。

虽然开发人员可以选择使用和具体技术相关的实现获取CachingProvider,但这样做能会降低CachingProvider实现之间的应用程序的可移植性。

在Java EE环境中,CachingProvider在内部使用,用以管理CacheManager,被用来注入所需的缓存到应用程序中。

CachingProvider的实现会由缓存引导类java.util.ServiceLoader自动定位,应用程序实现的CachingProvider必须依照JAR文件规范,在META-INF/services/javax.cache.spi.CachingProvider配置文件中定义CachingProvider的完全限定类名。

该javax.cache.spi.CachingProvider配置文件用于定义特定的CachingProvider缓存引导类的实现类,从而使其能够自动定位,加载,并为应用程序提供实例化请求。

javax.cache.spi.CachingProvider配置文件的内容简单地包含一个或多个完全限定类名,每一个单独的行中,指定一个可用的CachingProvider实现类名称。

例如:
一个Java缓存API实现者,ACME的缓存产品,附带一个名为acme.jar的JAR,里面包含了CachingProvider的实现。该JAR的内容中既包括CachingProvider实现类,又包含javax.cache.spi.CachingProvider配置文件。

META-INF/services/javax.cache.spi.CachingProvider

com/acme/cache/ACMECachingProvider.class

...

文件META-INF/services/javax.cache.spi.CachingProvider的内容仅仅包含下面一行实现类的名称:

com.acme.cache.ACMECachingProvider

应用程序可以使用多个CachingProvider实现,只要正确配置META-INF/services/javax.cache.spi.CachingProvider文件。当在多个CachingProviders的情况下,从缓存引导类要求返回默认的CachingProvider会导致抛出异常。

Caching缓存引导类方法定义如下:

public final class Caching {

  public static ClassLoader getDefaultClassLoader()

  public void setDefaultClassLoader(ClassLoader classLoader)

  public static CachingProvider getCachingProvider()

  public static CachingProvider getCachingProvider(ClassLoader classLoader)

  public static Iterable<CachingProvider> getCachingProviders()

  public static Iterable<CachingProvider> getCachingProviders(

      ClassLoader classLoader)

  public static CachingProvider getCachingProvider(String fullyQualifiedClassName)

  public static CachingProvider getCachingProvider(

             String fullyQualifiedClassName,

             ClassLoader classLoader)

}

缓存提供者CachingProvider,布布扣,bubuko.com

缓存提供者CachingProvider

原文:http://blog.csdn.net/wilbertzhou/article/details/24314731

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!