Here is the portion of the stacktrace you are probably most interested
in:

[ERROR] 13:13:14 org.apache.jcs.engine.control.CompositeCache.get -
java.lang.ClassCastException
        at net.sf.hibernate.cache.QueryKey.equals(QueryKey.java:35)
        at java.util.Hashtable.remove(Hashtable.java:434)
        at
org.apache.jcs.engine.memory.lru.LRUMemoryCache.remove(LRUMemoryCache.java:274)
        at
org.apache.jcs.engine.control.CompositeCache.remove(CompositeCache.java:727)
        at
org.apache.jcs.engine.control.CompositeCache.remove(CompositeCache.java:690)
        at
org.apache.jcs.engine.control.CompositeCache.get(CompositeCache.java:490)
        at
org.apache.jcs.engine.control.CompositeCache.get(CompositeCache.java:440)
        at org.apache.jcs.access.CacheAccess.get(CacheAccess.java:236)
        at net.sf.hibernate.cache.JCSCache.get(JCSCache.java:30)
        at net.sf.hibernate.cache.QueryCache.get(QueryCache.java:61)
        at
net.sf.hibernate.hql.QueryTranslator.find(QueryTranslator.java:964)
        at net.sf.hibernate.impl.SessionImpl.find(SessionImpl.java:1483)


Here is my cache.ccf file:

jcs.default=
jcs.default.cacheattributes=org.apache.jcs.engine.CompositeCacheAttributes
jcs.default.cacheattributes.MaxObjects=100
jcs.default.cacheattributes.MemoryCacheName=org.apache.jcs.engine.memory.lru.LRUMemoryCache
jcs.default.elementattributes=org.apache.jcs.engine.ElementAttributes
jcs.default.elementattributes.IsEternal=false
jcs.default.elementattributes.MaxLifeSeconds=15


Here is a snippet of code that is using Hibernate with caching:

    public List getAllActiveContainerTypes() {
        final String queryString = 
                "from ContainerType containerType where
containerType.status = 'ACTIVE'";
        return getHibernateTemplate().executeFind(new
HibernateCallback() {
            public Object doInHibernate(Session session) throws
HibernateException, SQLException {
                Query query = session.createQuery(queryString);
                query.setCacheable(true);
                return query.list();
            }
        });
    }


Here is where the QueryKey class is breaking:

        public boolean equals(Object other) {
                QueryKey that = (QueryKey) other;
                ...

This object passed in is a CacheElement. Where is is cast to a QueryKey,
the exception is thrown. I have attached the code for the entire class,
but I don't think it will be useful.

Thanks for the help.

Ryan


Aaron Smuts wrote:
> 
> Can you send me a stack trace also.
> 
> > -----Original Message-----
> > From: Ryan Breidenbach [mailto:[EMAIL PROTECTED]
> > Sent: Thursday, November 13, 2003 11:51 AM
> > To: [EMAIL PROTECTED]
> > Subject: CacheElement hashCode problem
> >
> > I am using JCS with Hibernate for caching, and I came across a
> problem.
> > When JCS encounters an object whose MaxLifeSeconds has been exceeded,
> I
> > am getting a ClassCastException. This is actually being thrown by the
> > net.sf.hibernate.cache.QueryKey, but I think the root of the problem
> is
> > the hashCode method of the CacheElement class:
> >
> >     public int hashCode()
> >     {
> >         return key.hashCode();
> >     }
> >
> > Why does it do this? The problem happens when there is a QueryKey
> object
> > *and* and CacheElement object that wraps a QueryKey object both in the
> > cache (Hashtable). This doesn't seem right. Any thoughts?
> >
> > Ryan
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail:
> [EMAIL PROTECTED]
> > For additional commands, e-mail:
> [EMAIL PROTECTED]
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]

Attachment: QueryKey.java
Description: application/unknown-content-type-java_auto_file

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to