Author: asmuts
Date: Wed Nov 9 17:42:08 2005
New Revision: 332192
URL: http://svn.apache.org/viewcvs?rev=332192&view=rev
Log:
Added a unit test for a reported problem where an object with the same key but
a different
value is not sent across the tcp lateral cache properly. I couldn't replicate
the problem on jdk 1.3 or 1.4.
I suspect that the equals method of the user's object is problematic. The
object output stream tries to reuse
the serialed form of objects that it thinks are the same.
If this turns out not to be the
case then we can either set the reset frequency to 1 or make it configurable.
With jdk1.4 there is a writeUnshared method that would prevent any such issues
whatsoever.
Modified:
jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/lateral/socket/tcp/LateralTCPSender.java
jakarta/jcs/trunk/src/test/org/apache/jcs/auxiliary/lateral/socket/tcp/TestTCPLateral.java
Modified:
jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/lateral/socket/tcp/LateralTCPSender.java
URL:
http://svn.apache.org/viewcvs/jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/lateral/socket/tcp/LateralTCPSender.java?rev=332192&r1=332191&r2=332192&view=diff
==============================================================================
---
jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/lateral/socket/tcp/LateralTCPSender.java
(original)
+++
jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/lateral/socket/tcp/LateralTCPSender.java
Wed Nov 9 17:42:08 2005
@@ -59,7 +59,13 @@
private int sendCnt = 0;
// reset the ObjectOutputStream every 70 calls
- //private static final int RESET_FREQUENCY = 70;
+ // private static final int RESET_FREQUENCY = 70;
+ // Perhaps we need to resett every time until we move to jdk 1.4
+ // then we can call writeUnshared to make sure
+ // that the object definetely gets across and not
+ // a stream cached version.
+ // I can't replicate an issue that was reported, so I'm not changing the
+ // reset frequency for now.
private final static int RESET_FREQUENCY = 70;
/**
Modified:
jakarta/jcs/trunk/src/test/org/apache/jcs/auxiliary/lateral/socket/tcp/TestTCPLateral.java
URL:
http://svn.apache.org/viewcvs/jakarta/jcs/trunk/src/test/org/apache/jcs/auxiliary/lateral/socket/tcp/TestTCPLateral.java?rev=332192&r1=332191&r2=332192&view=diff
==============================================================================
---
jakarta/jcs/trunk/src/test/org/apache/jcs/auxiliary/lateral/socket/tcp/TestTCPLateral.java
(original)
+++
jakarta/jcs/trunk/src/test/org/apache/jcs/auxiliary/lateral/socket/tcp/TestTCPLateral.java
Wed Nov 9 17:42:08 2005
@@ -5,7 +5,6 @@
import org.apache.jcs.JCS;
import org.apache.jcs.auxiliary.lateral.LateralCacheAttributes;
import org.apache.jcs.auxiliary.lateral.LateralElementDescriptor;
-import org.apache.jcs.auxiliary.lateral.behavior.ILateralCacheAttributes;
import org.apache.jcs.engine.CacheElement;
import org.apache.jcs.engine.behavior.ICacheElement;
import org.apache.jcs.engine.behavior.ICompositeCacheManager;
@@ -94,7 +93,6 @@
// start the listener
LateralTCPListener listener = (LateralTCPListener)
LateralTCPListener.getInstance( lattr, cacheMgr );
-
TCPLateralCacheAttributes lattr2 = new TCPLateralCacheAttributes();
lattr2.setTcpListenerPort( 1102 );
lattr2.setTransmissionTypeName( "TCP" );
@@ -115,6 +113,46 @@
System.out.println( "cache. getPutCount = " +
cacheMgr.getCache().getUpdateCount() );
assertEquals( "Didn't get the correct number", cnt,
cacheMgr.getCache().getUpdateCount() );
+ }
+
+ /**
+ * Send objects with the same key but different values.
+ * @throws Exception
+ */
+ public void testSameKeyDifferentObject()
+ throws Exception
+ {
+ TCPLateralCacheAttributes lattr = new TCPLateralCacheAttributes();
+ lattr.setTcpListenerPort( 1101 );
+ lattr.setTransmissionTypeName( "TCP" );
+ CompositeCacheManagerMockImpl cacheMgr = new
CompositeCacheManagerMockImpl();
+ System.out.println( "mock cache = " + cacheMgr.getCache( "test" ) );
+
+ // get the listener started
+ // give it our mock cache manager
+ LateralTCPListener listener = (LateralTCPListener)
LateralTCPListener.getInstance( lattr, cacheMgr );
+
+ TCPLateralCacheAttributes lattr2 = new TCPLateralCacheAttributes();
+ lattr2.setTcpListenerPort( 1102 );
+ lattr2.setTransmissionTypeName( "TCP" );
+ lattr2.setTcpServer( "localhost:1101" );
+
+ LateralTCPService service = new LateralTCPService( lattr2 );
+ service.setListenerId( 123456 );
+
+ ICacheElement element = new CacheElement( "test", "key", "value1" );
+ service.update( element );
+
+ Thread.sleep( 300 );
+
+ ICacheElement element2 = new CacheElement( "test", "key", "value2" );
+ service.update( element2 );
+
+ Thread.sleep( 1000 );
+
+ ICacheElement cacheElement = cacheMgr.getCache().get( "key" );
+ System.out.println( "cacheElement = " + cacheElement );
+ assertEquals( "Didn't get the correct object", element2.getVal(),
cacheElement.getVal() );
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]