Can you share the code for your class that extends the linked hash map.

Thanks

On Thu, Aug 10, 2017 at 11:05 PM Vivek Bhide <vivek.bh...@target.com> wrote:

> Thank You Pramod and Thomas for all your inputs.
>
> Hi Pramod,
> Jira https://issues.apache.org/jira/browse/APEXMALHAR-2526 that Thomas
> referred seem to be the one inline with what you suggested as a possible
> solution. I see there is new class KryoJavaSerializer.java (new in malhar
> and not present with 3.7.0 version that I am using) which is doing the
> work,
> though its not related to this particular issue
>
> Regarding my statement of Kryo not working with LinkedHashMap, to put it
> precisely,/ it doesn't work for a class that extends LinkedHashMap/. In my
> case its LRUCache class. It does work with standard LinkedHashMap and I
> could verified this with past few version of kryo. Below is the class i
> tested with
>
> public class KryoSerDeTest {
>   public static void main(String[] args) throws FileNotFoundException {
>     TestClass clazz = new TestClass();
>     clazz.getCache().put("ABC", "ABCDE");
>     clazz.getCache().put("GHI", "GHIJK");
>
>     Kryo kryo = new Kryo();
>     Output output = new Output(new FileOutputStream("file.bin"));
>     kryo.writeObject(output, clazz);
>     output.close();
>     Input input = new Input(new FileInputStream("file.bin"));
>     TestClass clazz1 = kryo.readObject(input, TestClass.class);
>     input.close();
>
>     System.out.println(clazz1.getCache().get("ABC"));
>     System.out.println(clazz1.getCache().get("GHI"));
>   }
> }
>
> class TestClass {
>
>   LRUCache<String, String> cache;
>
>   public TestClass() {
>     cache = new LRUCache<String, String>(10, false);
>   }
>
>   public LRUCache<String, String> getCache() {
>     return cache;
>   }
>
>   public void setCache(LRUCache<String, String> cache) {
>     this.cache = cache;
>   }
> }
>
> class LRUCache<K, V> extends LinkedHashMap<K, V> {
>
>   private static final long serialVersionUID = 1L;
>   public int capacity; // Maximum number of items in the cache.
>
>   public int getCapacity() {
>     return capacity;
>   }
>
>   public void setCapacity(int capacity) {
>     this.capacity = capacity;
>   }
>
>   public LRUCache() {
>     super();
>   }
>
>   public LRUCache(int capacity, boolean accessOrder) {
>     super(capacity + 1, 1.0f, accessOrder); // Pass 'true' for accessOrder.
>     setCapacity(capacity);
>   }
>
>   @Override
>   public boolean removeEldestEntry(Map.Entry<K, V> entry) {
>     return (size() > getCapacity());
>   }
> }
>
>
> In the above example, if you replace all references of LRUCache from
> TestClass with LinkedHashMap then everything works but not with LRUCache
>
> I will update my workaround with your suggestion
>
> Regards
> Vivek
>
>
>
> --
> View this message in context:
> http://apache-apex-users-list.78494.x6.nabble.com/How-the-application-recovery-works-when-its-started-with-originalAppId-tp1821p1834.html
> Sent from the Apache Apex Users list mailing list archive at Nabble.com.
>

Reply via email to