package com.anjlab.ping.services.dao.impl.cache; import static com.anjlab.ping.services.dao.impl.cache.CacheHelper.getEntityCacheKey; import javax.cache.Cache; import org.apache.tapestry5.ioc.annotations.Inject; import com.anjlab.ping.entities.Account; import com.anjlab.ping.services.dao.impl.AccountDAOImpl; public class AccountDAOImplCache extends AccountDAOImpl { @Inject private Cache cache; @SuppressWarnings("unchecked") @Override public Account find(Long id) { Object entityCacheKey = getEntityCacheKey(Account.class, id); Account result = (Account) cache.get(entityCacheKey); if (result != null) { return result; } result = super.find(id); if (result != null) { cache.put(entityCacheKey, result); } return result; } @SuppressWarnings("unchecked") @Override public Account getAccount(String email) { Object entityCacheKey = getEntityCacheKey(Account.class, email); Account result = (Account) cache.get(entityCacheKey); if (result != null) { return result; } result = super.getAccount(email); if (result != null) { cache.put(entityCacheKey, result); } return result; } @Override public void delete(Long id) { super.delete(id); Object entityCacheKey = getEntityCacheKey(Account.class, id); cache.remove(entityCacheKey); // TODO Account with email as a key will remain in cache, remove it also } @SuppressWarnings("unchecked") @Override public void update(Account account) { super.update(account); Object entityCacheKey = getEntityCacheKey(Account.class, account.getId()); cache.put(entityCacheKey, account); entityCacheKey = getEntityCacheKey(Account.class, account.getEmail()); cache.put(entityCacheKey, account); } }