Collection proxy(Map) bug with Long values as keys
ratang2000 Mar 8, 2006 10:08 AMI'm using TreeCacheAOP (JBOSSCache version 1.2.4SP1) for which im storing a map in the cache.
When i retrieve the map and do a get() or a containsKey() it returns a null or a false value respectively for the given key.
This happens only when i have a Long object stored as a key in my HashMap. When I use a string it works perfectly.
And also,when we do similar operations on regular java Maps they work.Its an issue with the Proxy map that is returned by the getObject();
My key looks like 8225676592564383 .
So I insert my values like map.put(new Long("8225676592564383"),"prateek");
Below is a code sample of what Im doing:
public class AOPTest extends HttpServlet { protected void doGet(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws ServletException, IOException { TreeCacheAop cache = (TreeCacheAop) getServletContext().getAttribute("treecache"); Map nonCacheMap = (Map) getServletContext().getAttribute("noncachemap"); try { Map guidMap = (Map) cache.getObject("/aop/guidmap"); Map guidMap2 = (Map) cache.getObject("/aop/guidmap2"); System.out.println(guidMap.containsKey("8225676592564383"));//This works-Its a string key System.out.println(guidMap2.containsKey("8225676592564383"));//this returns false.Its a long. } catch (CacheException e) { e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates. } } public void init() throws ServletException { TreeCacheAop cache = null; try { cache = new TreeCacheAop(); PropertyConfigurator config = new PropertyConfigurator(); config.configure(cache, "META-INF/jbosscache-config.xml"); cache.start(); Map guidMap = new HashMap(); Map guidMap2 = new HashMap(); cache.putObject("/aop/guidmap", guidMap); cache.putObject("/aop/guidmap2", guidMap2); guidMap = (Map) cache.getObject("/aop/guidmap"); guidMap2 = (Map) cache.getObject("/aop/guidmap"); guidMap.put("8225676592564383", "abhishek"); guidMap2.put(new Long("8225676592564383"), "abhishek"); getServletContext().setAttribute("treecache", cache); } catch (ConfigureException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } } }
Please tell me a solution for this ..I want to use the Long key only in my map.