Armin Waibel <arminw <at> apache.org> writes:
>
> Hi Ravi,
>
> I can't find significant changes between 0.98 and 1.0.x. The main change
> is, that the target object of the AfterLookupEvent Object was
> immediately nullified after fire the event (because for better
> performance OJB reuse the AfterLookupEvent Object and therefore the
> target object of the event will be nullified after the "fireEvent"
> method return).
>
> class RsIterator:
> // materialize object
> ...
> // lookup reused event object and set current object as target
> getAfterLookupEvent().setTarget(obj);
> // fire event
> getBroker().fireBrokerEvent(getAfterLookupEvent());
> // nullify the target object to prepare event instance for reuse
> getAfterLookupEvent().setTarget(null);
> ...
>
> Thus, if you queue the AfterLookupEvent objects you will run into
> problems, e.g. NPE when try to use the target object. In this case you
> should store the target object in a separate "queue object" when the
> event is fired.
Hi Armin
Thanks for your response.
I am having problem only with batch load. To make it simple, I created two
classes TestA and TestB with TestA having reference to TestB and printing
TestB's name in afterLookUp().
If I load TestA objects individually by Id using a criteria like below, it
works fine and prints TestB's name correctly.
Criteria criteria = new Criteria();
criteria.addEqualTo( "id", id );
QueryByCriteria qByCriteria = new QueryByCriteria( TestA.class, criteria );
return broker.getObjectByQuery( qByCriteria ) );
If I do batch load by an empty Criteria like below, I get NullPointerException
in afterLookUp() as TestB is null.
Criteria criteria = new Criteria();
QueryByCriteria qByCriteria = new QueryByCriteria( TestA.class, criteria );
return broker.getCollectionByQuery( qByCriteria );
Following are the classes and mappings.
public class TestA extends OJBDomainImpl implements PersistenceBrokerAware
{
private TestB testB;
private Integer testBId;
public TestB getTestB()
{
return testB;
}
public void setTestB(TestB testB)
{
this.testB = testB;
}
/**
* this method is called as the first operation before perform an
* object update.
*/
public void beforeUpdate(PersistenceBroker broker) throws
PersistenceBrokerException {
}
/**
* this method is called as the last operation within an update
* operation.
*/
public void afterUpdate(PersistenceBroker broker) throws
PersistenceBrokerException {
}
/**
* this method is called as the first operation before perform an
* object insert.
*/
public void beforeInsert(PersistenceBroker broker) throws
PersistenceBrokerException {
}
/**
* this method is called as the last operation within an insert
* operation.
*/
public void afterInsert(PersistenceBroker broker) throws
PersistenceBrokerException {
}
/**
* this method is called as the first operation within a call to
* PersistenceBroker.delete(...).
*/
public void beforeDelete(PersistenceBroker broker) throws
PersistenceBrokerException {
}
/**
* this method is called as the last operation within a call to
* PersistenceBroker.delete(...).
*/
public void afterDelete(PersistenceBroker broker) throws
PersistenceBrokerException {
}
/**
* this method is called as the last operation within a call to
* PersistenceBroker.getObjectByXXX() or
* PersistenceBroker.getCollectionByXXX().
*/
public void afterLookup(PersistenceBroker broker) throws
PersistenceBrokerException
{
System.out.println(" Retrieved Test B's name : "+ testB.getName());
}
}
public class TestB extends OJBDomainImpl
{
private String name;
public String getName()
{
return name;
}
public void setName(String name)
{
this.name = name;
}
}
<class-descriptor class="com.wbbs.model.TestA" table="TEST_A">
<field-descriptor
name="id"
column="ID"
jdbc-type="INTEGER"
primarykey="true"
autoincrement="true"
/>
<field-descriptor
name="testBId"
column="TESTB_ID"
jdbc-type="INTEGER"
/>
<reference-descriptor
name="testB"
class-ref="com.wbbs.model.TestB"
auto-retrieve="true"
auto-update="true"
auto-delete="false"
>
<foreignkey field-ref="testBId"/>
</reference-descriptor>
</class-descriptor>
<class-descriptor class="com.wbbs.model.TestB" table="TEST_B">
<field-descriptor
name="id"
column="ID"
jdbc-type="INTEGER"
primarykey="true"
autoincrement="true"
/>
<field-descriptor
name="name"
column="NAME"
jdbc-type="VARCHAR"
/>
</class-descriptor>
Same testes work fine with OJB o.98.
Please help..
Regards
Ravi
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]