Hi Ernst,
OJB version 1.0.1 has a bug in hash codes of ObjectCacheDefaultImpl making it act like you noticed. Try some other cache implementation, version 1.0 or 1.0.2 pre from cvs.
-- Ilkka
Ernst Temp wrote:
Hello,
I am using OJB in my application (Mysql 4.1, Java 1.4.1, Mac OS X) mainly as DB access layer. I am using the persistence broker, and had strange behavior of the cache. It delivered table entries that were not what i queried for.
Assume a table contents like Key1 , key2 , name -------------------------- 1 , 1, foo 2 , 1, bar key 1 and 2 are forming the primary key of the table.
Caching turned off: I ask for (1,1) -> I get (1,1,foo) I ask for (2,1) -> I get (2,1,bar)
Same with caching turned on (everything else unchanged) I ask for (1,1) -> I get (1,1,foo) I ask for (2,1) -> I get (1,1,foo)
Details below:
The test snippet:
.....SNIP
PersistenceBroker pb = PersistenceBrokerFactory.defaultPersistenceBroker();
for (int key1 = 0; key1 < 1000; key1++) {
for (int key2 = 90000; key2 < 100000; key2 ++) {
// I have queired by identity, etc, but always got the same result.
String query = new String ("Select * from Testtable where key1 =" + key1 +" and key2= " + key2 + "");
Query q2 = QueryFactory.newQuery(Histrate.class, query);
Iterator it = pb.getIteratorByQuery(q2);
try {
Testtable tt (Testtable) (it.next()); // This should never happen.
if ( (key1 != (int)(tt.getKey1())) || (key2 != (int)(tt.getKey2()) ) ) {
logger.warning("*** EEEEEEEEEEHHHHHH: "+key1+" = "+tt.getKey1() + ", " + key2 + " = "+ tt.getKey2());
}
} catch (Exception e){
//
}
}
}
logger.info("ended");
.... SNIP
if I use the non-chacheing version of the Persistance Broker, ( in OJB.properties: # this works ObjectCacheClass=org.apache.ojb.broker.cache.ObjectCacheEmptyImpl ) I get no EEEEEEEEHHHHH messages like *** EEEEEEEEEEHHHHHH ...
but if I use the standard version,: # this fails because of cache problems ObjectCacheClass=org.apache.ojb.broker.cache.ObjectCacheDefaultImpl
I get Thousands of EEEEHHH messages like this one: *** EEEEEEEEEEHHHHHH 6 = 7, 98037=98000 it looks like the cache is delivering an old key pair.
The table class looks like
<class-descriptor class="ojb.tables.Testtable" table="Testtable" > <field-descriptor id="1" name="key1" column="key1" jdbc-type="INTEGER" primarykey="true" /> <field-descriptor id="2" name="key2" column="key2" jdbc-type="INTEGER" primarykey="true" /> .....
Has any kind soul a hint for me - what did I do wrong? I spent a long time debugging that problem, but did not succeed.
Kind regards, Ernst
--------------------------------------------------------------------- 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]