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>
<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