Title: Melding
Hi there!
 
Today I introduced OSCACHE in our SQLMap application, what a performace boost! :-)
 
I have some heavy queries, doing a lot of stuff, some is' pretty static, so bringing
in the cache is a nice feature.
 
Anyway I have discovered something realy strange I think, not sure where the "error" or
smart behavior is located, it's most unwanted since I have to write extra code to avoid it!
 
I'm working with hierarchy of categories, pointing to itself. The CategoryBean is
one of our value/transfer objects.
 
--
 
public class CategoryBean extends GeneralBean implements Serializable {
 
    private List subCategories;     // List of CategoryBean's ....
    ..
 
}
 
----
 
So what I do, I query the database to retrieve two levels of the hierarchy in a Oracle
database, returning 21 rows, where the first row is the root.
 
After the rows are returned from this query:
 
list = Collections.synchronizedList(sqlMap.queryForList("retrieveFirstPageCategories", null));
 
              (Have tried with/without synchronized to see if that helped = NOT :)
 
The query using this cache:
 
    <cacheModel id="category-cache" type="OSCACHE">
        <flushInterval hours="1"/>
        <flushOnExecute statement="insertCategory"/>
        <flushOnExecute statement="updateCategory"/>
    </cacheModel>
--
 
I create the rootBean of the first row in the list, then add the other 20 rows to the subCategories.
 
So far so good, BUT when I run the query twice or more when the OSCACHE is up and running
(sqlMap has returned the connection to the pool between the runs) .... I still get 21 rows from
the same query back, BUT now the first one in the list (the rootBean) already have those 20 subCategories
listed, I added in the first run ! That's impressive :-) but most unwanted behavior since  I have to write extra
code to not add those 20 rows again = 40 subCategories... Of course after 3 runs, 60 subCategories etc.
 
How can I avoid this "smart" behavior ??? hmm Is it a bug ? I guess not, something
to tune in SQLMap, OSCACHE ? or ? hmmm Some guy here mention something about
adding the hashCode() and equals() to my CategoryBean ... is that the rigth path to go ?
He have already added the hashCode and equals, but a "simple" logic ... what's requried
to avoid this smart behavior ?
 
 
Thanks for any help!
 
 
Best regards,
Erlend Bjørge

Reply via email to