You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by aa...@apache.org on 2008/03/05 22:33:07 UTC
svn commit: r634039 - in
/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test:
java/org/apache/cayenne/access/ClientServerChannelQueryTest.java
resources/dml/access.ClientServerChannelQueryTest.xml
Author: aadamchik
Date: Wed Mar 5 13:33:06 2008
New Revision: 634039
URL: http://svn.apache.org/viewvc?rev=634039&view=rev
Log:
CAY-998 ROP paginated lists must recover from server LRU query cache overflow
(unit test to demonstrate the problem)
Modified:
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/access/ClientServerChannelQueryTest.java
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/resources/dml/access.ClientServerChannelQueryTest.xml
Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/access/ClientServerChannelQueryTest.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/access/ClientServerChannelQueryTest.java?rev=634039&r1=634038&r2=634039&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/access/ClientServerChannelQueryTest.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/access/ClientServerChannelQueryTest.java Wed Mar 5 13:33:06 2008
@@ -22,11 +22,12 @@
import java.util.List;
import org.apache.cayenne.CayenneContext;
-import org.apache.cayenne.DataChannel;
+import org.apache.cayenne.ObjectContext;
import org.apache.cayenne.ValueHolder;
-import org.apache.cayenne.access.ClientServerChannel;
+import org.apache.cayenne.cache.QueryCache;
import org.apache.cayenne.exp.Expression;
import org.apache.cayenne.query.NamedQuery;
+import org.apache.cayenne.query.Ordering;
import org.apache.cayenne.query.SelectQuery;
import org.apache.cayenne.remote.ClientChannel;
import org.apache.cayenne.remote.service.LocalConnection;
@@ -40,18 +41,53 @@
public class ClientServerChannelQueryTest extends CayenneCase {
+ private ObjectContext context;
+ private ClientServerChannel serverChannel;
+
+ @Override
+ protected void setUp() throws Exception {
+ super.setUp();
+
+ serverChannel = new ClientServerChannel(getDomain());
+ LocalConnection connector = new LocalConnection(
+ serverChannel,
+ LocalConnection.HESSIAN_SERIALIZATION);
+
+ context = new CayenneContext(new ClientChannel(connector));
+ }
+
@Override
protected AccessStack buildAccessStack() {
- return CayenneResources
- .getResources()
- .getAccessStack(MULTI_TIER_ACCESS_STACK);
+ return CayenneResources.getResources().getAccessStack(MULTI_TIER_ACCESS_STACK);
+ }
+
+ public void testPaginatedQueryServerCacheOverflow() throws Exception {
+ createTestData("testPaginatedQueryServerCacheOverflow");
+
+ SelectQuery query = new SelectQuery(ClientMtTable1.class);
+ query.addOrdering(ClientMtTable1.GLOBAL_ATTRIBUTE1_PROPERTY, Ordering.ASC);
+ query.setPageSize(3);
+
+ List<?> results = context.performQuery(query);
+
+ // read page 1
+ assertTrue(results.get(0) instanceof ClientMtTable1);
+
+ // now kick out the server-side list from local cache, and see if the query would
+ // recover...
+ QueryCache qc = serverChannel.getQueryCache();
+ assertEquals(1, qc.size());
+ qc.clear();
+ assertEquals(0, qc.size());
+
+ // assertTrue(results.get(3) instanceof ClientMtTable1);
}
public void testNamedQuery() throws Exception {
createTestData("prepare");
NamedQuery q = new NamedQuery("AllMtTable1");
- List<?> results = buildContext().performQuery(q);
+ List<?> results = context.performQuery(q);
assertEquals(2, results.size());
assertTrue(results.get(0) instanceof ClientMtTable1);
@@ -61,7 +97,7 @@
createTestData("prepare");
SelectQuery q = new SelectQuery("MtTable1");
- List<?> results = buildContext().performQuery(q);
+ List<?> results = context.performQuery(q);
assertEquals(2, results.size());
@@ -72,7 +108,7 @@
createTestData("prepare");
SelectQuery q = new SelectQuery(ClientMtTable1.class);
- List<?> results = buildContext().performQuery(q);
+ List<?> results = context.performQuery(q);
assertEquals(2, results.size());
assertTrue(results.get(0) instanceof ClientMtTable1);
@@ -83,7 +119,7 @@
SelectQuery q = new SelectQuery(ClientMtTable1.class, Expression
.fromString("globalAttribute1 = 'g1'"));
- List<?> results = buildContext().performQuery(q);
+ List<?> results = context.performQuery(q);
assertEquals(1, results.size());
@@ -95,7 +131,7 @@
SelectQuery q = new SelectQuery(ClientMtTable1.class, Expression
.fromString("table2Array.globalAttribute = 'g1'"));
- List<?> results = buildContext().performQuery(q);
+ List<?> results = context.performQuery(q);
assertEquals(1, results.size());
assertTrue(results.get(0) instanceof ClientMtTable1);
@@ -106,7 +142,7 @@
SelectQuery q = new SelectQuery("MtTable1");
q.addOrdering(ClientMtTable1.GLOBAL_ATTRIBUTE1_PROPERTY, true);
- List<?> results = buildContext().performQuery(q);
+ List<?> results = context.performQuery(q);
assertEquals(2, results.size());
@@ -119,7 +155,7 @@
q.clearOrderings();
q.addOrdering(ClientMtTable1.GLOBAL_ATTRIBUTE1_PROPERTY, false);
- List<?> results1 = buildContext().performQuery(q);
+ List<?> results1 = context.performQuery(q);
assertEquals(2, results1.size());
@@ -134,7 +170,7 @@
SelectQuery q = new SelectQuery(ClientMtTable2.class, Expression
.fromString("globalAttribute = 'g1'"));
q.addPrefetch(ClientMtTable2.TABLE1_PROPERTY);
- List<?> results = buildContext().performQuery(q);
+ List<?> results = context.performQuery(q);
assertEquals(1, results.size());
@@ -156,7 +192,7 @@
SelectQuery q = new SelectQuery(ClientMtTable1.class, Expression
.fromString("globalAttribute1 = 'g1'"));
q.addPrefetch(ClientMtTable1.TABLE2ARRAY_PROPERTY);
- List<?> results = buildContext().performQuery(q);
+ List<?> results = context.performQuery(q);
assertEquals(1, results.size());
@@ -168,18 +204,5 @@
PersistentObjectList objectHolder = (PersistentObjectList) holder;
assertFalse(objectHolder.isFault());
assertEquals(2, objectHolder.size());
- }
-
- /**
- * Prepares ClientObjectContext that would access regular Cayenne stack over local
- * adapter with Hessian serialization.
- */
- protected CayenneContext buildContext() {
- DataChannel handler = new ClientServerChannel(getDomain());
- LocalConnection connector = new LocalConnection(
- handler,
- LocalConnection.HESSIAN_SERIALIZATION);
-
- return new CayenneContext(new ClientChannel(connector));
}
}
Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/resources/dml/access.ClientServerChannelQueryTest.xml
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/resources/dml/access.ClientServerChannelQueryTest.xml?rev=634039&r1=634038&r2=634039&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/resources/dml/access.ClientServerChannelQueryTest.xml (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/resources/dml/access.ClientServerChannelQueryTest.xml Wed Mar 5 13:33:06 2008
@@ -34,6 +34,41 @@
</value></constructor-arg>
</bean>
+ <bean id="INSERT_MT_TABLE13" class="org.apache.cayenne.unit.util.UpdatingSQLTemplate">
+ <constructor-arg type="java.lang.Class"><value>org.apache.cayenne.testdo.mt.MtTable1</value></constructor-arg>
+ <constructor-arg><value>
+ insert into MT_TABLE1 (TABLE1_ID, GLOBAL_ATTRIBUTE1, SERVER_ATTRIBUTE1) values (3, 'g3', 's3')
+ </value></constructor-arg>
+ </bean>
+
+ <bean id="INSERT_MT_TABLE14" class="org.apache.cayenne.unit.util.UpdatingSQLTemplate">
+ <constructor-arg type="java.lang.Class"><value>org.apache.cayenne.testdo.mt.MtTable1</value></constructor-arg>
+ <constructor-arg><value>
+ insert into MT_TABLE1 (TABLE1_ID, GLOBAL_ATTRIBUTE1, SERVER_ATTRIBUTE1) values (4, 'g4', 's4')
+ </value></constructor-arg>
+ </bean>
+
+ <bean id="INSERT_MT_TABLE15" class="org.apache.cayenne.unit.util.UpdatingSQLTemplate">
+ <constructor-arg type="java.lang.Class"><value>org.apache.cayenne.testdo.mt.MtTable1</value></constructor-arg>
+ <constructor-arg><value>
+ insert into MT_TABLE1 (TABLE1_ID, GLOBAL_ATTRIBUTE1, SERVER_ATTRIBUTE1) values (5, 'g5', 's5')
+ </value></constructor-arg>
+ </bean>
+
+ <bean id="INSERT_MT_TABLE16" class="org.apache.cayenne.unit.util.UpdatingSQLTemplate">
+ <constructor-arg type="java.lang.Class"><value>org.apache.cayenne.testdo.mt.MtTable1</value></constructor-arg>
+ <constructor-arg><value>
+ insert into MT_TABLE1 (TABLE1_ID, GLOBAL_ATTRIBUTE1, SERVER_ATTRIBUTE1) values (6, 'g6', 's6')
+ </value></constructor-arg>
+ </bean>
+
+ <bean id="INSERT_MT_TABLE17" class="org.apache.cayenne.unit.util.UpdatingSQLTemplate">
+ <constructor-arg type="java.lang.Class"><value>org.apache.cayenne.testdo.mt.MtTable1</value></constructor-arg>
+ <constructor-arg><value>
+ insert into MT_TABLE1 (TABLE1_ID, GLOBAL_ATTRIBUTE1, SERVER_ATTRIBUTE1) values (7, 'g7', 's7')
+ </value></constructor-arg>
+ </bean>
+
<bean id="INSERT_MT_TABLE21" class="org.apache.cayenne.unit.util.UpdatingSQLTemplate">
<constructor-arg type="java.lang.Class"><value>org.apache.cayenne.testdo.mt.MtTable2</value></constructor-arg>
<constructor-arg><value>
@@ -62,6 +97,22 @@
<ref bean="INSERT_MT_TABLE12"/>
<ref bean="INSERT_MT_TABLE21"/>
<ref bean="INSERT_MT_TABLE22"/>
+ </list>
+ </constructor-arg>
+ </bean>
+
+ <bean id="testPaginatedQueryServerCacheOverflow" class="java.util.ArrayList">
+ <constructor-arg>
+ <list>
+ <ref bean="DELETE_MT_TABLE2"/>
+ <ref bean="DELETE_MT_TABLE1"/>
+ <ref bean="INSERT_MT_TABLE11"/>
+ <ref bean="INSERT_MT_TABLE12"/>
+ <ref bean="INSERT_MT_TABLE13"/>
+ <ref bean="INSERT_MT_TABLE14"/>
+ <ref bean="INSERT_MT_TABLE15"/>
+ <ref bean="INSERT_MT_TABLE16"/>
+ <ref bean="INSERT_MT_TABLE17"/>
</list>
</constructor-arg>
</bean>