/** * Licensed to Apereo under one or more contributor license agreements. See the NOTICE file * distributed with this work for additional information regarding copyright ownership. Apereo * licenses this file to you 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 the * following location: * * <p>http://www.apache.org/licenses/LICENSE-2.0 * * <p>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. */ package org.apereo.portal.services; import org.apereo.portal.EntityIdentifier; import org.apereo.portal.IBasicEntity; import org.apereo.portal.concurrency.CachingException; import org.apereo.portal.concurrency.IEntityCachingService; import org.apereo.portal.spring.locator.EntityCachingServiceLocator; import org.apereo.portal.utils.threading.SingletonDoubleCheckedCreator; /** * This class presents a facade for the IEntityCachingService implementation that lets clients cache * and retrieve <code>IBasicEntities</code>. It hides such details as the physical structure of the * cache and whether it is running in a multi- or single-JVM environment. * * <p>An <code>IBasicEntity</code> can answer its type and key. * * <p>Caching consists of asking the service to add, retrieve, update and remove elements from the * cache, e.g., * * <p><code> * // Retrieve the entity from its store:<br> * Class type = getEntityClass();<br> * String key = getEntityKey();<br> * IBasicEntity ent = findEntity(key); <br> * ... <br> * // Cache the entity:<br> * EntityCachingService.add(ent);<br> * ... <br> * // Retrieve the entity from the cache:<br> * IEntity aCopy = EntityCachingService.get(type, key);<br> * ...<br> * // Update the entity and then:<br> * EntityCachingService..update(aCopy); // notifies peer caches.<br> * ...<br> * // Or delete the entity and:<br> * EntityCachingService.remove(type, key); // notifies peer caches.<br> * </code> * * <p> * * @deprecated Where possible the Spring managed {@link IEntityCachingService} bean should be * injected instead of using this lookup class. */ @Deprecated public class EntityCachingService implements IEntityCachingService { // Singleton instance of the bootstrap class: private static final SingletonDoubleCheckedCreator<EntityCachingService> instanceHolder = new SingletonDoubleCheckedCreator<EntityCachingService>() { @Override protected EntityCachingService createSingleton(Object... args) { return new EntityCachingService(); } }; /** @deprecated Use {@link #getEntityCachingService()} instead. */ @Deprecated public static EntityCachingService instance() throws CachingException { return instanceHolder.get(); } public static IEntityCachingService getEntityCachingService() { return instanceHolder.get(); } /** Creates new EntityLockService */ private EntityCachingService() throws CachingException { super(); } /** * Adds the entity to the cache. * * @param ent org.apereo.portal.IBasicEntity * @exception org.apereo.portal.concurrency.CachingException */ public void add(IBasicEntity ent) throws CachingException { EntityCachingServiceLocator.getEntityCachingService().add(ent); } /** * Returns the cached entity identified by type and key. * * @param type Class * @param key String * @return IBasicEntity entity * @exception org.apereo.portal.concurrency.CachingException */ public IBasicEntity get(Class<? extends IBasicEntity> type, String key) throws CachingException { return EntityCachingServiceLocator.getEntityCachingService().get(type, key); } /** * Returns the cached entity referred to by entityID. * * @param entityID entity identifier * @return IBasicEntity entity * @exception org.apereo.portal.concurrency.CachingException */ public IBasicEntity get(EntityIdentifier entityID) throws CachingException { return EntityCachingServiceLocator.getEntityCachingService() .get(entityID.getType(), entityID.getKey()); } /** * Removes the entity identified by type and key from the cache and notifies peer caches. * * @param type Class * @param key String * @exception org.apereo.portal.concurrency.CachingException */ public void remove(Class<? extends IBasicEntity> type, String key) throws CachingException { EntityCachingServiceLocator.getEntityCachingService().remove(type, key); } /** * Removes the entity referred to by entityID from the cache and notifies peer caches. * * @param entityID * @exception org.apereo.portal.concurrency.CachingException */ public void remove(EntityIdentifier entityID) throws CachingException { this.remove(entityID.getType(), entityID.getKey()); } /** * Removes the <code>IBasicEntity</code> from the cache and notifies peer caches. * * @param ent org.apereo.portal.IBasicEntity * @exception org.apereo.portal.concurrency.CachingException */ public void remove(IBasicEntity ent) throws CachingException { this.remove(ent.getEntityIdentifier()); } /** * Updates the entity in the cache and notifies peer caches. * * @param ent org.apereo.portal.concurrency.IBasicEntity * @exception org.apereo.portal.concurrency.CachingException */ public void update(IBasicEntity ent) throws CachingException { EntityCachingServiceLocator.getEntityCachingService().update(ent); } }