Main Page | Packages | Class Hierarchy | Alphabetical List | Class List | File List | Class Members | Related Pages

ResultCacheTable.java

00001 /**
00002  * C-JDBC: Clustered JDBC.
00003  * Copyright (C) 2002-2004 French National Institute For Research In Computer
00004  * Science And Control (INRIA).
00005  * Contact: c-jdbc@objectweb.org
00006  * 
00007  * This library is free software; you can redistribute it and/or modify it
00008  * under the terms of the GNU Lesser General Public License as published by the
00009  * Free Software Foundation; either version 2.1 of the License, or any later
00010  * version.
00011  * 
00012  * This library is distributed in the hope that it will be useful, but WITHOUT
00013  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
00014  * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
00015  * for more details.
00016  * 
00017  * You should have received a copy of the GNU Lesser General Public License
00018  * along with this library; if not, write to the Free Software Foundation,
00019  * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
00020  *
00021  * Initial developer(s): Emmanuel Cecchet.
00022  * Contributor(s): Nicolas Modzyk.
00023  */
00024 
00025 package org.objectweb.cjdbc.controller.cache.result;
00026 
00027 import java.util.Iterator;
00028 
00029 import org.objectweb.cjdbc.common.sql.AbstractWriteRequest;
00030 import org.objectweb.cjdbc.common.sql.ParsingGranularities;
00031 import org.objectweb.cjdbc.common.sql.SelectRequest;
00032 import org.objectweb.cjdbc.common.sql.UpdateRequest;
00033 import org.objectweb.cjdbc.controller.cache.result.entries.CacheEntry;
00034 import org.objectweb.cjdbc.controller.cache.result.schema.CacheDatabaseTable;
00035 
00036 /**
00037  * This is a query cache implementation with a table granularity:
00038  * <ul>
00039  * <li><code>TABLE</code>: table granularity, entries in the cache are
00040  * invalidated based on table dependencies.</li>
00041  * </ul>
00042  * 
00043  * @author <a href="mailto:Emmanuel.Cecchet@inria.fr">Emmanuel Cecchet </a>
00044  * @author <a href="mailto:Nicolas.Modrzyk@inrialpes.fr">Nicolas Modrzyk </a>
00045  * @version 1.0
00046  */
00047 public class ResultCacheTable extends ResultCache
00048 {
00049   /**
00050    * Builds a new ResultCache with a table granularity.
00051    * 
00052    * @param maxEntries maximum number of entries
00053    * @param pendingTimeout pending timeout for concurrent queries
00054    */
00055   public ResultCacheTable(int maxEntries, int pendingTimeout)
00056   {
00057     super(maxEntries, pendingTimeout);
00058     parsingGranularity = ParsingGranularities.TABLE;
00059   }
00060 
00061   /**
00062    * @see org.objectweb.cjdbc.controller.cache.result.ResultCache#processAddToCache
00063    */
00064   protected void processAddToCache(CacheEntry qe)
00065   {
00066     SelectRequest request = qe.getRequest();
00067     for (Iterator i = request.getFrom().iterator(); i.hasNext();)
00068       cdbs.getTable((String) i.next()).addCacheEntry(qe);
00069   }
00070 
00071   /**
00072    * @see org.objectweb.cjdbc.controller.cache.result.AbstractResultCache#isUpdateNecessary(org.objectweb.cjdbc.common.sql.UpdateRequest)
00073    */
00074   public boolean isUpdateNecessary(UpdateRequest request)
00075   {
00076     return true;
00077   }
00078 
00079   /**
00080    * @see org.objectweb.cjdbc.controller.cache.result.ResultCache#processWriteNotify(org.objectweb.cjdbc.common.sql.AbstractWriteRequest)
00081    */
00082   protected void processWriteNotify(AbstractWriteRequest request)
00083   {
00084     CacheDatabaseTable cdt = cdbs.getTable(request.getTableName());
00085 
00086     if (cdt != null)
00087       cdt.invalidateAll();
00088     else
00089     {
00090       logger.warn("Table " + request.getTableName()
00091           + " not found in cache schema. Flushing whole cache.");
00092       flushCache();
00093     }
00094   }
00095 
00096   /**
00097    * @see org.objectweb.cjdbc.controller.cache.result.ResultCache#getName()
00098    */
00099   public String getName()
00100   {
00101     return "table";
00102   }
00103 }

Generated on Mon Apr 11 22:01:34 2005 for C-JDBC by  doxygen 1.3.9.1