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]

Reply via email to