Thomas,


I tried using the method in tutorial4 to look up objects by OID, but I kept getting "javax.jdo.JDOUserException: Given object is not a valid OID." This is the relevant code section, basically copied out of org.apache.ojb.tutorial5.UCEditProduct and adapted slightly:

========

    PersistenceManagerFactory pmf = new OjbStorePMF();
    PersistenceManager pm = pmf.getPersistenceManager();

    Building example = new Building();
    example.setBuildingID(4);

    Identity oid = new Identity(example);
    pm.currentTransaction().begin();

Building building = (Building) pm.getObjectById(oid, false);

========

oid.toString() returns "org.lbjnow.calvin.location.Building{4}" which certainly looks plausible.

As a result, the work-around does not work :-/. This happens with all my objects; I just picked the simplest to demonstrate. The repository_user.xml section is:

========

<class-descriptor class="org.lbjnow.calvin.location.Building"
    table="building">
<field-descriptor id="1" name="buildingID" column="building_id"
    jdbc-type="INTEGER" primarykey="true"  autoincrement="true"
    sequence-name="building_id_seq" />
<field-descriptor id="2" name="shortName" column="short_name"
    jdbc-type="VARCHAR"/>
<field-descriptor id="3" name="longName" column="long_name"
    jdbc-type="VARCHAR"/>
</class-descriptor>

========

The part of the .jdo file for that class is:

========

<class name="Building" identity-type="application"
    objectid-class="java.lang.Integer">
    <field name="buildingID" primary-key="true"
        null-value="exception" />
    <field name="shortName" />
    <field name="longName" />
</class>

========

The class itself is rather simple right now, with just the fields listed above and the appropriate getter/setter methods. The rest of the exception looks like this:

========

javax.jdo.JDOUserException: Given object is not a valid OID.
FailedObject:org.lbjnow.calvin.location.Building{4}
NestedThrowables:
java.lang.IllegalArgumentException: arg1
at com.sun.jdori.common.CacheManagerImpl.createNewSM(Unknown Source)
at com.sun.jdori.common.CacheManagerImpl.getStateManager(Unknown Source)
at com.sun.jdori.common.CacheManagerImpl.getObjectById(Unknown Source)
at com.sun.jdori.common.PersistenceManagerImpl.getObjectById(Unknown Source)
at com.sun.jdori.common.PersistenceManagerWrapper.getObjectById(Unknown Source)
at org.apache.jsp.tj_jsp._jspService(tj_jsp.java:83)


========

If I can get lookups to work this way, that would certainly suffice for my needs.



Thomas Mahler wrote:

Hi again ketan,

Ketan Gangatirkar wrote:


The only problem seems to be that I did not manage to transfer the correct
state information during the retrieval of extents. Only if you rely on this
state information you'll get problems...



Ah, there it is. I have this problem when retrieving objects from JDOQL queries as well as using the methods defined by Extent. Did I misunderstand you?


No, that's what I meant. JDOQL queries rely on extents, that's why.
The tutorial app does only edit objects based on a primary key lookup...



--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]



Reply via email to