
org.datanucleus.cache.JavaxCacheLevel2Cache Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of datanucleus-core Show documentation
Show all versions of datanucleus-core Show documentation
DataNucleus Core provides the primary components of a heterogenous Java persistence solution.
It supports persistence API's being layered on top of the core functionality.
Also includes the JDO API.
/**********************************************************************
Copyright (c) 2012 Andy Jefferson and others. 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.
Contributors:
...
**********************************************************************/
package org.datanucleus.cache;
import java.util.Arrays;
import java.util.Collection;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import javax.cache.Cache;
import javax.cache.CacheException;
import javax.cache.CacheManager;
import javax.cache.configuration.MutableConfiguration;
import javax.cache.spi.CachingProvider;
import javax.cache.Caching;
import org.datanucleus.NucleusContext;
import org.datanucleus.Configuration;
import org.datanucleus.PropertyNames;
import org.datanucleus.cache.AbstractLevel2Cache;
import org.datanucleus.cache.CachedPC;
import org.datanucleus.exceptions.NucleusException;
import org.datanucleus.identity.IdentityUtils;
import org.datanucleus.metadata.AbstractClassMetaData;
import org.datanucleus.metadata.IdentityType;
import org.datanucleus.util.NucleusLogger;
/**
* Simple implementation of a plugin for use of javax.cache (v0.61+) product with DataNucleus.
*/
public class JavaxCacheLevel2Cache extends AbstractLevel2Cache
{
private static final long serialVersionUID = 3218890128547271239L;
/** The cache to use. */
private final Cache cache;
/**
* Constructor.
* @param nucleusCtx Context
*/
public JavaxCacheLevel2Cache(NucleusContext nucleusCtx)
{
super(nucleusCtx);
try
{
CachingProvider cacheProvider = Caching.getCachingProvider();
CacheManager cacheMgr = cacheProvider.getCacheManager();
Cache tmpcache = cacheMgr.getCache(cacheName);
if (tmpcache == null)
{
MutableConfiguration cacheConfig = new MutableConfiguration();
Configuration conf = nucleusCtx.getConfiguration();
if (conf.hasProperty(PropertyNames.PROPERTY_CACHE_L2_READ_THROUGH))
{
cacheConfig.setReadThrough(conf.getBooleanProperty(PropertyNames.PROPERTY_CACHE_L2_READ_THROUGH));
}
if (conf.hasProperty(PropertyNames.PROPERTY_CACHE_L2_WRITE_THROUGH))
{
cacheConfig.setWriteThrough(conf.getBooleanProperty(PropertyNames.PROPERTY_CACHE_L2_WRITE_THROUGH));
}
if (conf.hasProperty(PropertyNames.PROPERTY_CACHE_L2_STATISTICS_ENABLED))
{
cacheConfig.setStatisticsEnabled(conf.getBooleanProperty(PropertyNames.PROPERTY_CACHE_L2_STATISTICS_ENABLED));
}
if (conf.hasProperty(PropertyNames.PROPERTY_CACHE_L2_STORE_BY_VALUE))
{
cacheConfig.setStoreByValue(conf.getBooleanProperty(PropertyNames.PROPERTY_CACHE_L2_STORE_BY_VALUE));
}
if (timeout > 0)
{
// TODO Some way to set the timeout/expiry
}
cacheMgr.createCache(cacheName, cacheConfig);
tmpcache = cacheMgr.getCache(cacheName);
}
cache = tmpcache;
}
catch (CacheException e)
{
throw new NucleusException("Error creating cache", e);
}
}
/**
* Method to close the cache when no longer needed. Provides a hook to release resources etc.
*/
public void close()
{
if (clearAtClose)
{
evictAll();
}
}
/**
* Accessor for whether the cache contains the specified id.
* @see org.datanucleus.cache.Level2Cache#containsOid(java.lang.Object)
*/
public boolean containsOid(Object oid)
{
return (get(oid) != null);
}
/**
* Accessor for an object in the cache.
* @see org.datanucleus.cache.Level2Cache#get(java.lang.Object)
*/
public CachedPC get(Object oid)
{
return (CachedPC) cache.get(oid);
}
/* (non-Javadoc)
* @see org.datanucleus.cache.AbstractLevel2Cache#getAll(java.util.Collection)
*/
@Override
public Map
© 2015 - 2025 Weber Informatics LLC | Privacy Policy