Author: cbegin
Date: Mon Sep 29 22:15:47 2008
New Revision: 700338

URL: http://svn.apache.org/viewvc?rev=700338&view=rev
Log:
More new thoughts on cache configuration and a start on the implementation

Modified:
    
ibatis/trunk/java/ibatis-3/ibatis-3-monarch/src/main/java/org/apache/ibatis/monarch/builder/MapperParser.java
    
ibatis/trunk/java/ibatis-3/ibatis-3-monarch/src/test/java/org/apache/ibatis/monarch/example/BlogMapper.xml
    
ibatis/trunk/java/ibatis-3/ibatis-3-monarch/src/test/java/org/apache/ibatis/monarch/example/MapperConfig.xml

Modified: 
ibatis/trunk/java/ibatis-3/ibatis-3-monarch/src/main/java/org/apache/ibatis/monarch/builder/MapperParser.java
URL: 
http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-monarch/src/main/java/org/apache/ibatis/monarch/builder/MapperParser.java?rev=700338&r1=700337&r2=700338&view=diff
==============================================================================
--- 
ibatis/trunk/java/ibatis-3/ibatis-3-monarch/src/main/java/org/apache/ibatis/monarch/builder/MapperParser.java
 (original)
+++ 
ibatis/trunk/java/ibatis-3/ibatis-3-monarch/src/main/java/org/apache/ibatis/monarch/builder/MapperParser.java
 Mon Sep 29 22:15:47 2008
@@ -4,12 +4,15 @@
 import org.apache.ibatis.reflection.MetaClass;
 import org.apache.ibatis.type.*;
 import org.apache.ibatis.xml.*;
+import org.apache.ibatis.cache.impl.PerpetualCache;
+import org.apache.ibatis.cache.Cache;
 
 import java.io.Reader;
 import java.util.*;
 
 public class MapperParser extends BaseParser {
 
+  protected String namespace;
   protected Reader reader;
   protected NodeletParser parser;
 
@@ -22,6 +25,8 @@
   private Discriminator.Builder discriminatorBuilder;
   private HashMap<String, String> discriminatorMap;
 
+  private Cache cache;
+
   public MapperParser(Reader reader, MonarchConfiguration configuration) {
     this.reader = reader;
 
@@ -44,6 +49,38 @@
     parser.parse(reader);
   }
 
+  //  <configuration namespace="com.domain.MapperClass" />
+  @Nodelet("/configuration")
+  public void configurationElement(NodeletContext context) throws Exception {
+    namespace = context.getStringAttribute("namespace");
+    if (namespace == null) {
+      throw new BuilderException("The configuration element requires a 
namespace attribute to be specified.");
+    }
+  }
+
+  //  <cache type="LRU" flushInterval="3600000" size="1000" readOnly="false" />
+  @Nodelet("/configuration/cache")
+  public void cacheTemplateElement(NodeletContext context) throws Exception {
+    String type = context.getStringAttribute("type","LRU");
+    type = typeAliasRegistry.resolveAlias(type);
+    Class typeClass = Class.forName(type);
+
+    long flushInterval = context.getLongAttribute("flushInterval",3600000L);
+    int size = context.getIntAttribute("size",1000);
+    boolean readOnly = context.getBooleanAttribute("readOnly",false);
+
+    Properties props = context.getChildrenAsProperties();
+
+    cache = new CacheBuilder(namespace)
+        .implementation(PerpetualCache.class)
+        .addDecorator(typeClass)
+        .clearInterval(flushInterval)
+        .size(size)
+        .readWrite(!readOnly)
+        .properties(props)
+        .build();
+  }
+
   //  <parameterMap id="" type="">
   @Nodelet("/mapper/parameterMap")
   public void parameterMapElement(NodeletContext context) throws Exception {
@@ -229,9 +266,9 @@
 
   private void setStatementCache(NodeletContext context, 
MappedStatement.Builder statementBuilder) {
     boolean isSelect = "select".equals(context.getNode().getNodeName());
-    boolean cache = context.getBooleanAttribute("cache",isSelect);
+    boolean useCache = context.getBooleanAttribute("useCache",isSelect);
     boolean flushCache = context.getBooleanAttribute("flushCache",!isSelect);
-    statementBuilder.cache(null);
+    statementBuilder.cache(cache);
   }
 
   private void setStatementParameterMap(NodeletContext context, 
MappedStatement.Builder statementBuilder) {

Modified: 
ibatis/trunk/java/ibatis-3/ibatis-3-monarch/src/test/java/org/apache/ibatis/monarch/example/BlogMapper.xml
URL: 
http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-monarch/src/test/java/org/apache/ibatis/monarch/example/BlogMapper.xml?rev=700338&r1=700337&r2=700338&view=diff
==============================================================================
--- 
ibatis/trunk/java/ibatis-3/ibatis-3-monarch/src/test/java/org/apache/ibatis/monarch/example/BlogMapper.xml
 (original)
+++ 
ibatis/trunk/java/ibatis-3/ibatis-3-monarch/src/test/java/org/apache/ibatis/monarch/example/BlogMapper.xml
 Mon Sep 29 22:15:47 2008
@@ -1,5 +1,11 @@
-<mapper namespace="com.domain.PersonMapper" 
cacheNamespace="com.domain.PersonMapper">
+<mapper namespace="com.domain.PersonMapper">
 
+  <cache-ref namespace=""/>
+
+  <cache type="LRU" flushInterval="3600000" size="1000" readOnly="false">
+    <property name="" value=""/>
+  </cache>
+  
   <resultMap id="" type="" extends="">
     <constructor>
       <id column="" javaType="" jdbcType="" typeHandler=""/>
@@ -20,7 +26,7 @@
            mode="" scale="" resultMap=""/>
   </parameterMap>
 
-  <select id="selectAllPeople" cache="true" flushCache="false" 
parameterType="" resultType="" resultMap="">
+  <select id="selectAllPeople" useCache="true" flushCache="false" 
parameterType="" resultType="" resultMap="">
     select * from PERSON order by
     
${opts.order,javaType="",jdbcType="",typeHandler="",mode="",scale="",resultMap=""}
   </select>

Modified: 
ibatis/trunk/java/ibatis-3/ibatis-3-monarch/src/test/java/org/apache/ibatis/monarch/example/MapperConfig.xml
URL: 
http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-monarch/src/test/java/org/apache/ibatis/monarch/example/MapperConfig.xml?rev=700338&r1=700337&r2=700338&view=diff
==============================================================================
--- 
ibatis/trunk/java/ibatis-3/ibatis-3-monarch/src/test/java/org/apache/ibatis/monarch/example/MapperConfig.xml
 (original)
+++ 
ibatis/trunk/java/ibatis-3/ibatis-3-monarch/src/test/java/org/apache/ibatis/monarch/example/MapperConfig.xml
 Mon Sep 29 22:15:47 2008
@@ -20,8 +20,6 @@
     <setting name="" value=""/>
   </settings>
 
-  <cache type="LRU" flushInterval="3600000" size="1000" readOnly="false" />
-
   <environments default="development">
     <environment id="development">
       <transactionManager type="JDBC|JTA|EXTERNAL">


Reply via email to