This one time, at band camp, [EMAIL PROTECTED] said:

>> Christian,
>> 
>> Have you tried specifying the key generator only on the Person
>> object and not on the Kunde object?
>> 
>> Bruce
>
>
>Thanks for your help, Bruce. It now is working :)
>But as I solved this problem, I got another one instead...
>
>I've got a Class, that has all methods I need to store and load objects from
>the Database.
>It looks roughly like this:
>
>// BEGIN CLASS
>public class DbBackend {
>
>  private Logger logger = null;
>  private JDO jdo = null;
>  private Database database = null;
>  
>  public IR_Datenbank(String xmlDbSchema, String dbName) throws Exception {
>    jdo = new JDO(dbName);
>    jdo.setConfiguration(xmlDbSchema);
>    jdo.setDatabaseName(dbName);
>    database = jdo.getDatabase();
>    database.setAutoStore(true);
>  }
>  
>  public void insertObject(Object object) throws Exception {
>    database.begin();
>    database.create(object);
>    database.commit();
>  }
>
>}
>// END CLASS
>
>
>And I've written a Test class, to test, if I can insert, update and load
>objects from the database.
>In this class, I execute this code:
>
>  // Create a Kunde object
>  Kunde kunde = createTestKunde();
>
>  // Database backend
>  DbBacken backend = new DbBackend("src/jvfa/test/database.xml", "jvfa");
>
>  // Insert the kunde into the database
>  backend.insertObject(kunde);
>
>
>That works fine. The Kunde object gets perfectly written to the database.
>But now it comes. When I try to access the fields of my kunde-object 
>(e.g. to find out what ID was generated by the key-generator) after
>the insert, I got an Exception. I've debugged it, and found out, that
>a DataObjectAccessException is thrown in TransactionContext.create().
>
>I simply added after "backend.insertObject(kunde)" the following line :
>
>  System.out.println("Generated ID:");
>  System.out.println(kunde.getId());
>
>And then I got the exception. The most curious thing is:
>I've set a breakpoint after the insertObject() method. But he never arrives
>there.
>Even the System.out.println("Generated ID:") is not executed.
>
>My Idea is, that the database.create() method is threaded and the code is
>executed at the
>same time. So Castor has a lock on the Kunde object that protects access on
>it. 
>What do I have to do, that the insertObject() method waits until Castor has
>finished it's
>transaction and I can access the Kunde object.

Castor shouldn't be holding any lock on the database because the
insertObject() method calls commit(). This should free up any locks it
had to create the object.

What happens if you reload the Kunde object instance like so?:

    // Just load all the Kunde objects - no WHERE clause
    db.getOQLQuery( "select k from jvfa.modules.kunden.Kunde k" );

Do you receive a valid id from the call to kunde.getId() after this?

Bruce
-- 
perl -e 'print unpack("u30","<0G)[EMAIL PROTECTED]&5R\"F9E<G)E=\$\!F<FEI+F-O;0\`\`");'

The Castor Project 
http://www.castor.org/

Apache Geronimo 
http://incubator.apache.org/projects/geronimo.html

----------------------------------------------------------- 
If you wish to unsubscribe from this mailing, send mail to
[EMAIL PROTECTED] with a subject of:
        unsubscribe castor-dev

Reply via email to