I'm using JBossCache for a product in Hewlett Packard and here I have seen a 
strange issue that I have not been able to resolve.

The problem is that I have a HashMap wrapped in a annotated class that also 
holds some additional information. When I draw the keyset from the HashMap and 
iterate over the keys I see is that the type of the keys entered have changed 
to String.

I positively know that I put a Long as the key in the HashMap, however when I 
iterate usign the set returned from the keyset all the keys have "changed" type 
to String.

I have created a small test application that I have entered into the examples 
directory in the JBossCache 1.3.0.SP1 kit that I have downloaded. I have made a 
copy of the annotated50 example and modified this to present my problem to 
ensure that I have no impact from "other" sources.

I run with Suns 1.5_06 Java

The code for the "main" part of the application is very simple and looks like 
this. The result of the code is that the text "This is a String" is printed on 
stdout.


  |     try {
  |       distributedInfo = new TreeCacheAop();
  |       PropertyConfigurator config = new PropertyConfigurator();
  |       config.configure(distributedInfo, "META-INF/replSync-service.xml");   
   
  |       distributedInfo.setClusterName("ClassCastIssue");
  |       distributedInfo.start();
  |     } catch (Exception e) {
  |       e.printStackTrace();
  |     }
  | 
  |     // Add the map container element for the distribution
  |     try {
  |      map = new CachedMap();
  |      distributedInfo.putObject(NODE_JOB_RELATION_CACHE_PATH, map);
  |     } catch (CacheException e) {
  |       e.printStackTrace();
  |     }
  |     
  |     map.put(new Long(123), new Integer(234));
  |     
  |     Iterator i = map.keySet().iterator();
  |     
  |     Object obj = i.next();
  |           
  |     System.out.println("Class name = " + obj.getClass().getName());
  |           
  |     if (obj instanceof String) {
  |       System.out.println("This is a String");
  |     }
  |           
  |     if (obj instanceof Long) {
  |       System.out.println("This is a Long");
  |     }
  | 

The code for the annotated wrapper class including the map looks like this:


  | @org.jboss.cache.aop.annotation.PojoCacheable
  | public class CachedMap
  | {
  |   private HashMap map = new HashMap();
  |   
  |   public void put(Long id, Object bean)
  |   {
  |     map.put(id, bean);
  |   }
  |   
  |   public Object get(Long id)
  |   {
  |    return map.get(id); 
  |   }
  |   
  |   public void remove(Long id)
  |   {
  |     map.remove(id);
  |   }
  |   
  |   public Set keySet()
  |   {
  |     return map.keySet();
  |   }
  | }
  | 

Can anyone tell me what is happening here - am I doing anything wrong - to me 
this mostly seems like a bug!

Regards

Peter

View the original post : 
http://www.jboss.com/index.html?module=bb&op=viewtopic&p=3948074#3948074

Reply to the post : 
http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=3948074


-------------------------------------------------------
All the advantages of Linux Managed Hosting--Without the Cost and Risk!
Fully trained technicians. The highest number of Red Hat certifications in
the hosting industry. Fanatical Support. Click to learn more
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=107521&bid=248729&dat=121642
_______________________________________________
JBoss-user mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/jboss-user

Reply via email to