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">