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]
