objectbridge-developers Mailing List for ObJectRelationalBridge (Page 56)
Brought to you by:
thma
You can subscribe to this list here.
2000 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
(14) |
Dec
(20) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2001 |
Jan
(33) |
Feb
(8) |
Mar
(3) |
Apr
(1) |
May
(18) |
Jun
(6) |
Jul
(15) |
Aug
(71) |
Sep
(29) |
Oct
(43) |
Nov
(77) |
Dec
(54) |
2002 |
Jan
(54) |
Feb
(147) |
Mar
(144) |
Apr
(163) |
May
(307) |
Jun
(240) |
Jul
|
Aug
|
Sep
(1) |
Oct
|
Nov
|
Dec
|
From: <tho...@it...> - 2001-01-24 16:14:22
|
> -----Urspr=FCngliche Nachricht----- > Von: obj...@li... > [mailto:obj...@li...]Im Auftrag > von Dixon-Peugh, David > Gesendet: Dienstag, 23. Januar 2001 22:30 > An: 'Thomas Mahler' > Cc: 'objectbridge' > Betreff: RE: [Objectbridge-developers] OJB Homepage, OQL > > > I'm worried about code duplication then. > > Basically, so far Transaction implementation has been done completely > from the ODMG side of things. It seems like we need to move the > implementation > of the transactions to the Broker side of things. I don't understand your argument. Say we type A mapped to db oracle and type B mapped to db mysql then we could have the following ODMG session: Implementation odmg =3D OJB.getInstance(); Database db =3D odmg.newDatabase(); db.open(databaseName, Database.OPEN_READ_WRITE); Transaction tx =3D odmg.newTransaction(); tx.begin(); // 1. get OID's A a =3D new A(); a.setId(89); B b =3D new B(); b.setId(103); String oid-a =3D odmg.getObjectId(a); String oid-b =3D odmg.getObjectId(b); // 2. lookup objects by OID a =3D (A) db.lookup(oid-a); b =3D (B) db.lookup(oid-b); // 3. modify objects a.setAttributeX("newValue"); // implicit call to markModified() ! b.setAttributeY("newValue"); // implicit call to markModified() ! // 4. commit try { tx.commit(); } catch (Throwable t) { tx.abort(); } internally the commit results in a call to the transactions ObjectStateTable::commit(). public void commit() { try { broker.beginTransaction(); // broker is a private attribu= te // of type PersistenceBroker Iterator i =3D table.values().iterator(); while (i.hasNext()) { ObjectModification mod =3D (ObjectModification) i.next(); mod.getModificationState().commit(mod); } broker.commitTransaction(); } catch (Throwable t) { broker.abortTransaction(); // the ODMG tx must abort too, when updating one of the // underlying rdbms failed: this.rollback(); } } The PB opens transaction for for the databases oracle and mysql and is sequentially called to store the modified objects a and b. say writing a to oracle succeeds. But writing of b to mysql fails. The Persistencebroker does not need any knowledge about the stored object= s or the sequence in which they had been updated. It simply has to rollback the transactions against oracle and mysql and then to throw an Exception. The database maintain a transaction log and know which operations have to been rolled back. There will be no code doubling and all knowledge about object modificatio= ns will stay in the ODMG part (namely the transactions ObjectStateTable. > > Once its on the broker side, then we can write the ODMG side as just a > simple wrapper. > > BUT- The broker will need to have both explicit and implicit transactio= ns > if the ODMG stuff is going to be a wrapper. > > It almost makes sense to just go ahead and keep the ODMG > transactions where > it is as the explicit transaction. And have the broker use it in build= ing > an implicit one. > > David. > > > -----Original Message----- > From: obj...@li... > [mailto:obj...@li...]On Behalf O= f > Thomas Mahler > Sent: Tuesday, January 23, 2001 4:14 PM > To: Dixon-Peugh, David > Cc: 'objectbridge' > Subject: Re: [Objectbridge-developers] OJB Homepage, OQL > > > "Dixon-Peugh, David" wrote: > > > > Right-o, > > > > I'll look into number 2 then. > > > > Of course your example brings in an interesting point. Right now all > > the transactions are handled in the "ojb.server" section. But the > > broker is responsible for storing the data. > > > > This means the broker will need to be aware of the Transaction which > > may mix the broker/server code together. > > As I see it, there will be no mixing, we just have transaction on > distinct layers: > the ODMG server manages the transactions of all its clients. On > committing these transactions it opens a PersistenceBroker transaction > and now the PB has to manage the transaction against all the backend > RDBMS. > If something goes wrong during the PB commit, all RDBMS operations are > rolled back and the PB transaction fails, which causes the ODMG > transaction to fail also. > As I see it the ODMG server depends on the PB transaction. What the PB > has to do internally to manage all the JDBC transactions is of no > interest to the ODMG layer. The only thing important is: does the PB > compund transaction succeed or not? (the my commit() method below ). > But the PB transaction do not in any way depend on the ODMG > transactions. > > SO we have three layers of transactions: > 1. JDBC transaction against the backend RDBMS > 2. the compound PersistenceBroker transaction, coordinating all tx from > 1) > 3. the ODMG transactions. they need a PB transaction on commiting > > > > > But, anyways, here is what I'm thinking now. > > > > The first thing the broker does, is to check whether a transaction is > > open or not. > > If a transaction is open, then the operations that the broker > > performs > > fall under the current open transaction. > > If a transaction is not open, then the broker does its operat= ion > > under > > an implicit transaction. > > > > This should be close to what CMT does in EJB, and certainly makes the > > transactions > > easier to implement. > > > > David > > > > > > > > -----Original Message----- > > From: obj...@li... > > [mailto:obj...@li...]On Behalf= Of > > Thomas Mahler > > Sent: Tuesday, January 23, 2001 1:49 PM > > To: 'objectbridge' > > Subject: Re: [Objectbridge-developers] OJB Homepage, OQL > > > > "Dixon-Peugh, David" wrote: > > > > > > Except of course, that QBE by itself (without extensions), > > > is capable of everything that SQL does. (They are both > > > languages for Relational Algebra after all.) > > > > > > On another topic. . . > > > > > > I'm thinking about finishing up the Transaction support soon, > > > however I've got some questions about how we want to implement > > > it. Perhaps you two could shed some light on what we should do. > > > > > > Basically, the issue is that if you use the raw JDBC driver, you > > > cannot guarantee that two different connections will either both > > > commit, or both abort. > > > > > > There are three ways around this that I can see: > > > 1. Ignore it. > > > 2. Force all JDBC connections to be the type that can > > > participate in a distributed transaction. > > > 3. Have OJB maintain its own Transaction log which can > > > be used to issue compensating transactions, > or complete > > > transactions when starting up again. > > > > > > One is the easiest to do, but you don't have real transactional > integrity > > > accross the database. > > > > > > Two will work, and it wouldn't be too hard to implement, but it lim= its > > > which JDBC drivers can be used. (I don't think Postgres or some of > > > the other free databases have a distributed capable JDBC driver.) > > > > > > Three will also work, but it is obviously more work, and also leave= s > open > > > issues about ObJectBridge interacting with other more traditional > > software. > > > (The redo/undo of the log could overwrite something from the > other App, > as > > > we don't have exclusive control over it.) > > > > > > > Interesting point! > > The PersistenceBroker (PB) is able to handle classes mapped to differ= ent > > RDBMS. As of today there is no handling of such "inherently distribut= ed" > > in PB. > > Even worse: the store() or delete() method don't declare exceptions t= o > > allow detection of failed DB transactions. I introduced > > beginTransaction(), commitTransaction() and commitTransaction() in th= e > > PB interface, but they do nothing yet. > > > > 1. sounds good :-) > > The question is: do we really have to support the feature of persiste= nce > > against distributed RDBMS? > > It would be quite easy to change the repository.dtd to disallow > > JDBCConnectionDescriptors on a per class basis but to enforce usage o= f a > > one-for-all JDBC-connection. > > This 30-second hack would finish the discussion for some time... (at > > least until somebody asks "why can't I store my objects in different > > databases?" ) > > > > 2. this is my favourite solution. It would take some burden from our > > shoulders through relying on the capabilities of the JDBC drivers and= on > > the JTA standard. > > Take for example the SOAP developers: they don't deal with security > > issues at all in the 1.1 spec, but simply tell you to take care for t= he > > security of your transportlayer on your own. > > I think this is a completely legitimate approach. > > As a small team we have to concentrate our forces on the core things = we > > adress. And that is O/R mapping and not tx coordination between RDBMS. > > So going this way we could offer: you can use PB to store Objects in > > different database when the DB Vendors provide capable drivers. If th= e > > drivers don't support distributed tx you have no proper tx support. > > Sorry, but it's not our fault... > > > > 3. We will definitely need a Transaction log in the ODMG server > > (something like the ojb.server.ObjectStateTable) which tracks the > > modification state of each object touched by a transaction. But I don= 't > > like the idea of keeping a log of the SQL operations as well. (why sh= all > > WE do THEIR job ???) > > > > Here is the design I have in mind: > > > > a Transaction aware version of the ObjectStateTable::commit() method > > could look like this: > > > > /** perform commit on all tx-states */ > > public void commit() > > { > > try > > { > > broker.beginTransaction(); // broker is a private > attribute > > // of type PersistenceBrok= er > > Iterator i =3D table.values().iterator(); > > while (i.hasNext()) > > { > > ObjectModification mod =3D (ObjectModificatio= n) > > i.next(); > > mod.getModificationState().commit(mod); > > } > > broker.commitTransaction(); > > } > > catch (Throwable t) > > { > > // let broker rollback all performed operations > > // this relies only the brokers capability > > // to properly handle distributed tx against > > // multiple RDBMS: > > broker.abortTransaction(); > > > > // the ODMG tx must abort too, when updating one of t= he > > // underlying rdbms failed: > > this.rollback(); > > } > > } > > > > So as far as I see it, from an ojb.server point of view you can ignor= e > > the underlying RDBMS completely by using the PersistenceBroker as a > > blackbox which is responsible for proper 2 phase commits against all > > RDBMS. > > > > what do you think ? > > > > regards, > > the other Thomas :-) > > > > _______________________________________________ > > Objectbridge-developers mailing list > > Obj...@li... > > http://lists.sourceforge.net/lists/listinfo/objectbridge-developers > > > > _______________________________________________ > > Objectbridge-developers mailing list > > Obj...@li... > > http://lists.sourceforge.net/lists/listinfo/objectbridge-developers > > _______________________________________________ > Objectbridge-developers mailing list > Obj...@li... > http://lists.sourceforge.net/lists/listinfo/objectbridge-developers > > _______________________________________________ > Objectbridge-developers mailing list > Obj...@li... > http://lists.sourceforge.net/lists/listinfo/objectbridge-developers |
From: Dixon-Peugh, D. <Dav...@tp...> - 2001-01-24 00:57:07
|
I picked up a bit with the NamedRoots thing. (Check for NULL, moved the txAbort and txCommit into doCommit, doAbort. Moved the DbImpl declaration to the head of the file, etc.) I also created three classes: UpdateTransactionWrapper InsertTransactionWrapper DeleteTransactionWrapper These all extend ObjectTransactionWrapper (with the Update specific stuff moved to UTW) These will be responsible for committing individual objects which have been part of the transaction. As for how to do this with the broker code, I'm not sure. (I'm stuck at work for another 15 minutes, if I think of anything I'll mail.) David. -----Original Message----- From: obj...@li... [mailto:obj...@li...]On Behalf Of Thomas Mahler Sent: Tuesday, January 23, 2001 4:14 PM To: Dixon-Peugh, David Cc: 'objectbridge' Subject: Re: [Objectbridge-developers] OJB Homepage, OQL "Dixon-Peugh, David" wrote: > > Right-o, > > I'll look into number 2 then. > > Of course your example brings in an interesting point. Right now all > the transactions are handled in the "ojb.server" section. But the > broker is responsible for storing the data. > > This means the broker will need to be aware of the Transaction which > may mix the broker/server code together. As I see it, there will be no mixing, we just have transaction on distinct layers: the ODMG server manages the transactions of all its clients. On committing these transactions it opens a PersistenceBroker transaction and now the PB has to manage the transaction against all the backend RDBMS. If something goes wrong during the PB commit, all RDBMS operations are rolled back and the PB transaction fails, which causes the ODMG transaction to fail also. As I see it the ODMG server depends on the PB transaction. What the PB has to do internally to manage all the JDBC transactions is of no interest to the ODMG layer. The only thing important is: does the PB compund transaction succeed or not? (the my commit() method below ). But the PB transaction do not in any way depend on the ODMG transactions. SO we have three layers of transactions: 1. JDBC transaction against the backend RDBMS 2. the compound PersistenceBroker transaction, coordinating all tx from 1) 3. the ODMG transactions. they need a PB transaction on commiting > > But, anyways, here is what I'm thinking now. > > The first thing the broker does, is to check whether a transaction is > open or not. > If a transaction is open, then the operations that the broker > performs > fall under the current open transaction. > If a transaction is not open, then the broker does its operation > under > an implicit transaction. > > This should be close to what CMT does in EJB, and certainly makes the > transactions > easier to implement. > > David > > > > -----Original Message----- > From: obj...@li... > [mailto:obj...@li...]On Behalf Of > Thomas Mahler > Sent: Tuesday, January 23, 2001 1:49 PM > To: 'objectbridge' > Subject: Re: [Objectbridge-developers] OJB Homepage, OQL > > "Dixon-Peugh, David" wrote: > > > > Except of course, that QBE by itself (without extensions), > > is capable of everything that SQL does. (They are both > > languages for Relational Algebra after all.) > > > > On another topic. . . > > > > I'm thinking about finishing up the Transaction support soon, > > however I've got some questions about how we want to implement > > it. Perhaps you two could shed some light on what we should do. > > > > Basically, the issue is that if you use the raw JDBC driver, you > > cannot guarantee that two different connections will either both > > commit, or both abort. > > > > There are three ways around this that I can see: > > 1. Ignore it. > > 2. Force all JDBC connections to be the type that can > > participate in a distributed transaction. > > 3. Have OJB maintain its own Transaction log which can > > be used to issue compensating transactions, or complete > > transactions when starting up again. > > > > One is the easiest to do, but you don't have real transactional integrity > > accross the database. > > > > Two will work, and it wouldn't be too hard to implement, but it limits > > which JDBC drivers can be used. (I don't think Postgres or some of > > the other free databases have a distributed capable JDBC driver.) > > > > Three will also work, but it is obviously more work, and also leaves open > > issues about ObJectBridge interacting with other more traditional > software. > > (The redo/undo of the log could overwrite something from the other App, as > > we don't have exclusive control over it.) > > > > Interesting point! > The PersistenceBroker (PB) is able to handle classes mapped to different > RDBMS. As of today there is no handling of such "inherently distributed" > in PB. > Even worse: the store() or delete() method don't declare exceptions to > allow detection of failed DB transactions. I introduced > beginTransaction(), commitTransaction() and commitTransaction() in the > PB interface, but they do nothing yet. > > 1. sounds good :-) > The question is: do we really have to support the feature of persistence > against distributed RDBMS? > It would be quite easy to change the repository.dtd to disallow > JDBCConnectionDescriptors on a per class basis but to enforce usage of a > one-for-all JDBC-connection. > This 30-second hack would finish the discussion for some time... (at > least until somebody asks "why can't I store my objects in different > databases?" ) > > 2. this is my favourite solution. It would take some burden from our > shoulders through relying on the capabilities of the JDBC drivers and on > the JTA standard. > Take for example the SOAP developers: they don't deal with security > issues at all in the 1.1 spec, but simply tell you to take care for the > security of your transportlayer on your own. > I think this is a completely legitimate approach. > As a small team we have to concentrate our forces on the core things we > adress. And that is O/R mapping and not tx coordination between RDBMS. > So going this way we could offer: you can use PB to store Objects in > different database when the DB Vendors provide capable drivers. If the > drivers don't support distributed tx you have no proper tx support. > Sorry, but it's not our fault... > > 3. We will definitely need a Transaction log in the ODMG server > (something like the ojb.server.ObjectStateTable) which tracks the > modification state of each object touched by a transaction. But I don't > like the idea of keeping a log of the SQL operations as well. (why shall > WE do THEIR job ???) > > Here is the design I have in mind: > > a Transaction aware version of the ObjectStateTable::commit() method > could look like this: > > /** perform commit on all tx-states */ > public void commit() > { > try > { > broker.beginTransaction(); // broker is a private attribute > // of type PersistenceBroker > Iterator i = table.values().iterator(); > while (i.hasNext()) > { > ObjectModification mod = (ObjectModification) > i.next(); > mod.getModificationState().commit(mod); > } > broker.commitTransaction(); > } > catch (Throwable t) > { > // let broker rollback all performed operations > // this relies only the brokers capability > // to properly handle distributed tx against > // multiple RDBMS: > broker.abortTransaction(); > > // the ODMG tx must abort too, when updating one of the > // underlying rdbms failed: > this.rollback(); > } > } > > So as far as I see it, from an ojb.server point of view you can ignore > the underlying RDBMS completely by using the PersistenceBroker as a > blackbox which is responsible for proper 2 phase commits against all > RDBMS. > > what do you think ? > > regards, > the other Thomas :-) > > _______________________________________________ > Objectbridge-developers mailing list > Obj...@li... > http://lists.sourceforge.net/lists/listinfo/objectbridge-developers > > _______________________________________________ > Objectbridge-developers mailing list > Obj...@li... > http://lists.sourceforge.net/lists/listinfo/objectbridge-developers _______________________________________________ Objectbridge-developers mailing list Obj...@li... http://lists.sourceforge.net/lists/listinfo/objectbridge-developers |
From: Dixon-Peugh, D. <Dav...@tp...> - 2001-01-23 21:31:59
|
I'm worried about code duplication then. Basically, so far Transaction implementation has been done completely from the ODMG side of things. It seems like we need to move the implementation of the transactions to the Broker side of things. Once its on the broker side, then we can write the ODMG side as just a simple wrapper. BUT- The broker will need to have both explicit and implicit transactions if the ODMG stuff is going to be a wrapper. It almost makes sense to just go ahead and keep the ODMG transactions where it is as the explicit transaction. And have the broker use it in building an implicit one. David. -----Original Message----- From: obj...@li... [mailto:obj...@li...]On Behalf Of Thomas Mahler Sent: Tuesday, January 23, 2001 4:14 PM To: Dixon-Peugh, David Cc: 'objectbridge' Subject: Re: [Objectbridge-developers] OJB Homepage, OQL "Dixon-Peugh, David" wrote: > > Right-o, > > I'll look into number 2 then. > > Of course your example brings in an interesting point. Right now all > the transactions are handled in the "ojb.server" section. But the > broker is responsible for storing the data. > > This means the broker will need to be aware of the Transaction which > may mix the broker/server code together. As I see it, there will be no mixing, we just have transaction on distinct layers: the ODMG server manages the transactions of all its clients. On committing these transactions it opens a PersistenceBroker transaction and now the PB has to manage the transaction against all the backend RDBMS. If something goes wrong during the PB commit, all RDBMS operations are rolled back and the PB transaction fails, which causes the ODMG transaction to fail also. As I see it the ODMG server depends on the PB transaction. What the PB has to do internally to manage all the JDBC transactions is of no interest to the ODMG layer. The only thing important is: does the PB compund transaction succeed or not? (the my commit() method below ). But the PB transaction do not in any way depend on the ODMG transactions. SO we have three layers of transactions: 1. JDBC transaction against the backend RDBMS 2. the compound PersistenceBroker transaction, coordinating all tx from 1) 3. the ODMG transactions. they need a PB transaction on commiting > > But, anyways, here is what I'm thinking now. > > The first thing the broker does, is to check whether a transaction is > open or not. > If a transaction is open, then the operations that the broker > performs > fall under the current open transaction. > If a transaction is not open, then the broker does its operation > under > an implicit transaction. > > This should be close to what CMT does in EJB, and certainly makes the > transactions > easier to implement. > > David > > > > -----Original Message----- > From: obj...@li... > [mailto:obj...@li...]On Behalf Of > Thomas Mahler > Sent: Tuesday, January 23, 2001 1:49 PM > To: 'objectbridge' > Subject: Re: [Objectbridge-developers] OJB Homepage, OQL > > "Dixon-Peugh, David" wrote: > > > > Except of course, that QBE by itself (without extensions), > > is capable of everything that SQL does. (They are both > > languages for Relational Algebra after all.) > > > > On another topic. . . > > > > I'm thinking about finishing up the Transaction support soon, > > however I've got some questions about how we want to implement > > it. Perhaps you two could shed some light on what we should do. > > > > Basically, the issue is that if you use the raw JDBC driver, you > > cannot guarantee that two different connections will either both > > commit, or both abort. > > > > There are three ways around this that I can see: > > 1. Ignore it. > > 2. Force all JDBC connections to be the type that can > > participate in a distributed transaction. > > 3. Have OJB maintain its own Transaction log which can > > be used to issue compensating transactions, or complete > > transactions when starting up again. > > > > One is the easiest to do, but you don't have real transactional integrity > > accross the database. > > > > Two will work, and it wouldn't be too hard to implement, but it limits > > which JDBC drivers can be used. (I don't think Postgres or some of > > the other free databases have a distributed capable JDBC driver.) > > > > Three will also work, but it is obviously more work, and also leaves open > > issues about ObJectBridge interacting with other more traditional > software. > > (The redo/undo of the log could overwrite something from the other App, as > > we don't have exclusive control over it.) > > > > Interesting point! > The PersistenceBroker (PB) is able to handle classes mapped to different > RDBMS. As of today there is no handling of such "inherently distributed" > in PB. > Even worse: the store() or delete() method don't declare exceptions to > allow detection of failed DB transactions. I introduced > beginTransaction(), commitTransaction() and commitTransaction() in the > PB interface, but they do nothing yet. > > 1. sounds good :-) > The question is: do we really have to support the feature of persistence > against distributed RDBMS? > It would be quite easy to change the repository.dtd to disallow > JDBCConnectionDescriptors on a per class basis but to enforce usage of a > one-for-all JDBC-connection. > This 30-second hack would finish the discussion for some time... (at > least until somebody asks "why can't I store my objects in different > databases?" ) > > 2. this is my favourite solution. It would take some burden from our > shoulders through relying on the capabilities of the JDBC drivers and on > the JTA standard. > Take for example the SOAP developers: they don't deal with security > issues at all in the 1.1 spec, but simply tell you to take care for the > security of your transportlayer on your own. > I think this is a completely legitimate approach. > As a small team we have to concentrate our forces on the core things we > adress. And that is O/R mapping and not tx coordination between RDBMS. > So going this way we could offer: you can use PB to store Objects in > different database when the DB Vendors provide capable drivers. If the > drivers don't support distributed tx you have no proper tx support. > Sorry, but it's not our fault... > > 3. We will definitely need a Transaction log in the ODMG server > (something like the ojb.server.ObjectStateTable) which tracks the > modification state of each object touched by a transaction. But I don't > like the idea of keeping a log of the SQL operations as well. (why shall > WE do THEIR job ???) > > Here is the design I have in mind: > > a Transaction aware version of the ObjectStateTable::commit() method > could look like this: > > /** perform commit on all tx-states */ > public void commit() > { > try > { > broker.beginTransaction(); // broker is a private attribute > // of type PersistenceBroker > Iterator i = table.values().iterator(); > while (i.hasNext()) > { > ObjectModification mod = (ObjectModification) > i.next(); > mod.getModificationState().commit(mod); > } > broker.commitTransaction(); > } > catch (Throwable t) > { > // let broker rollback all performed operations > // this relies only the brokers capability > // to properly handle distributed tx against > // multiple RDBMS: > broker.abortTransaction(); > > // the ODMG tx must abort too, when updating one of the > // underlying rdbms failed: > this.rollback(); > } > } > > So as far as I see it, from an ojb.server point of view you can ignore > the underlying RDBMS completely by using the PersistenceBroker as a > blackbox which is responsible for proper 2 phase commits against all > RDBMS. > > what do you think ? > > regards, > the other Thomas :-) > > _______________________________________________ > Objectbridge-developers mailing list > Obj...@li... > http://lists.sourceforge.net/lists/listinfo/objectbridge-developers > > _______________________________________________ > Objectbridge-developers mailing list > Obj...@li... > http://lists.sourceforge.net/lists/listinfo/objectbridge-developers _______________________________________________ Objectbridge-developers mailing list Obj...@li... http://lists.sourceforge.net/lists/listinfo/objectbridge-developers |
From: Thomas M. <tho...@ho...> - 2001-01-23 21:15:35
|
"Dixon-Peugh, David" wrote: > > Right-o, > > I'll look into number 2 then. > > Of course your example brings in an interesting point. Right now all > the transactions are handled in the "ojb.server" section. But the > broker is responsible for storing the data. > > This means the broker will need to be aware of the Transaction which > may mix the broker/server code together. As I see it, there will be no mixing, we just have transaction on distinct layers: the ODMG server manages the transactions of all its clients. On committing these transactions it opens a PersistenceBroker transaction and now the PB has to manage the transaction against all the backend RDBMS. If something goes wrong during the PB commit, all RDBMS operations are rolled back and the PB transaction fails, which causes the ODMG transaction to fail also. As I see it the ODMG server depends on the PB transaction. What the PB has to do internally to manage all the JDBC transactions is of no interest to the ODMG layer. The only thing important is: does the PB compund transaction succeed or not? (the my commit() method below ). But the PB transaction do not in any way depend on the ODMG transactions. SO we have three layers of transactions: 1. JDBC transaction against the backend RDBMS 2. the compound PersistenceBroker transaction, coordinating all tx from 1) 3. the ODMG transactions. they need a PB transaction on commiting > > But, anyways, here is what I'm thinking now. > > The first thing the broker does, is to check whether a transaction is > open or not. > If a transaction is open, then the operations that the broker > performs > fall under the current open transaction. > If a transaction is not open, then the broker does its operation > under > an implicit transaction. > > This should be close to what CMT does in EJB, and certainly makes the > transactions > easier to implement. > > David > > > > -----Original Message----- > From: obj...@li... > [mailto:obj...@li...]On Behalf Of > Thomas Mahler > Sent: Tuesday, January 23, 2001 1:49 PM > To: 'objectbridge' > Subject: Re: [Objectbridge-developers] OJB Homepage, OQL > > "Dixon-Peugh, David" wrote: > > > > Except of course, that QBE by itself (without extensions), > > is capable of everything that SQL does. (They are both > > languages for Relational Algebra after all.) > > > > On another topic. . . > > > > I'm thinking about finishing up the Transaction support soon, > > however I've got some questions about how we want to implement > > it. Perhaps you two could shed some light on what we should do. > > > > Basically, the issue is that if you use the raw JDBC driver, you > > cannot guarantee that two different connections will either both > > commit, or both abort. > > > > There are three ways around this that I can see: > > 1. Ignore it. > > 2. Force all JDBC connections to be the type that can > > participate in a distributed transaction. > > 3. Have OJB maintain its own Transaction log which can > > be used to issue compensating transactions, or complete > > transactions when starting up again. > > > > One is the easiest to do, but you don't have real transactional integrity > > accross the database. > > > > Two will work, and it wouldn't be too hard to implement, but it limits > > which JDBC drivers can be used. (I don't think Postgres or some of > > the other free databases have a distributed capable JDBC driver.) > > > > Three will also work, but it is obviously more work, and also leaves open > > issues about ObJectBridge interacting with other more traditional > software. > > (The redo/undo of the log could overwrite something from the other App, as > > we don't have exclusive control over it.) > > > > Interesting point! > The PersistenceBroker (PB) is able to handle classes mapped to different > RDBMS. As of today there is no handling of such "inherently distributed" > in PB. > Even worse: the store() or delete() method don't declare exceptions to > allow detection of failed DB transactions. I introduced > beginTransaction(), commitTransaction() and commitTransaction() in the > PB interface, but they do nothing yet. > > 1. sounds good :-) > The question is: do we really have to support the feature of persistence > against distributed RDBMS? > It would be quite easy to change the repository.dtd to disallow > JDBCConnectionDescriptors on a per class basis but to enforce usage of a > one-for-all JDBC-connection. > This 30-second hack would finish the discussion for some time... (at > least until somebody asks "why can't I store my objects in different > databases?" ) > > 2. this is my favourite solution. It would take some burden from our > shoulders through relying on the capabilities of the JDBC drivers and on > the JTA standard. > Take for example the SOAP developers: they don't deal with security > issues at all in the 1.1 spec, but simply tell you to take care for the > security of your transportlayer on your own. > I think this is a completely legitimate approach. > As a small team we have to concentrate our forces on the core things we > adress. And that is O/R mapping and not tx coordination between RDBMS. > So going this way we could offer: you can use PB to store Objects in > different database when the DB Vendors provide capable drivers. If the > drivers don't support distributed tx you have no proper tx support. > Sorry, but it's not our fault... > > 3. We will definitely need a Transaction log in the ODMG server > (something like the ojb.server.ObjectStateTable) which tracks the > modification state of each object touched by a transaction. But I don't > like the idea of keeping a log of the SQL operations as well. (why shall > WE do THEIR job ???) > > Here is the design I have in mind: > > a Transaction aware version of the ObjectStateTable::commit() method > could look like this: > > /** perform commit on all tx-states */ > public void commit() > { > try > { > broker.beginTransaction(); // broker is a private attribute > // of type PersistenceBroker > Iterator i = table.values().iterator(); > while (i.hasNext()) > { > ObjectModification mod = (ObjectModification) > i.next(); > mod.getModificationState().commit(mod); > } > broker.commitTransaction(); > } > catch (Throwable t) > { > // let broker rollback all performed operations > // this relies only the brokers capability > // to properly handle distributed tx against > // multiple RDBMS: > broker.abortTransaction(); > > // the ODMG tx must abort too, when updating one of the > // underlying rdbms failed: > this.rollback(); > } > } > > So as far as I see it, from an ojb.server point of view you can ignore > the underlying RDBMS completely by using the PersistenceBroker as a > blackbox which is responsible for proper 2 phase commits against all > RDBMS. > > what do you think ? > > regards, > the other Thomas :-) > > _______________________________________________ > Objectbridge-developers mailing list > Obj...@li... > http://lists.sourceforge.net/lists/listinfo/objectbridge-developers > > _______________________________________________ > Objectbridge-developers mailing list > Obj...@li... > http://lists.sourceforge.net/lists/listinfo/objectbridge-developers |
From: Dixon-Peugh, D. <Dav...@tp...> - 2001-01-23 19:48:10
|
Right-o, I'll look into number 2 then. Of course your example brings in an interesting point. Right now all the transactions are handled in the "ojb.server" section. But the broker is responsible for storing the data. This means the broker will need to be aware of the Transaction which may mix the broker/server code together. But, anyways, here is what I'm thinking now. The first thing the broker does, is to check whether a transaction is open or not. If a transaction is open, then the operations that the broker performs fall under the current open transaction. If a transaction is not open, then the broker does its operation under an implicit transaction. This should be close to what CMT does in EJB, and certainly makes the transactions easier to implement. David -----Original Message----- From: obj...@li... [mailto:obj...@li...]On Behalf Of Thomas Mahler Sent: Tuesday, January 23, 2001 1:49 PM To: 'objectbridge' Subject: Re: [Objectbridge-developers] OJB Homepage, OQL "Dixon-Peugh, David" wrote: > > Except of course, that QBE by itself (without extensions), > is capable of everything that SQL does. (They are both > languages for Relational Algebra after all.) > > On another topic. . . > > I'm thinking about finishing up the Transaction support soon, > however I've got some questions about how we want to implement > it. Perhaps you two could shed some light on what we should do. > > Basically, the issue is that if you use the raw JDBC driver, you > cannot guarantee that two different connections will either both > commit, or both abort. > > There are three ways around this that I can see: > 1. Ignore it. > 2. Force all JDBC connections to be the type that can > participate in a distributed transaction. > 3. Have OJB maintain its own Transaction log which can > be used to issue compensating transactions, or complete > transactions when starting up again. > > One is the easiest to do, but you don't have real transactional integrity > accross the database. > > Two will work, and it wouldn't be too hard to implement, but it limits > which JDBC drivers can be used. (I don't think Postgres or some of > the other free databases have a distributed capable JDBC driver.) > > Three will also work, but it is obviously more work, and also leaves open > issues about ObJectBridge interacting with other more traditional software. > (The redo/undo of the log could overwrite something from the other App, as > we don't have exclusive control over it.) > Interesting point! The PersistenceBroker (PB) is able to handle classes mapped to different RDBMS. As of today there is no handling of such "inherently distributed" in PB. Even worse: the store() or delete() method don't declare exceptions to allow detection of failed DB transactions. I introduced beginTransaction(), commitTransaction() and commitTransaction() in the PB interface, but they do nothing yet. 1. sounds good :-) The question is: do we really have to support the feature of persistence against distributed RDBMS? It would be quite easy to change the repository.dtd to disallow JDBCConnectionDescriptors on a per class basis but to enforce usage of a one-for-all JDBC-connection. This 30-second hack would finish the discussion for some time... (at least until somebody asks "why can't I store my objects in different databases?" ) 2. this is my favourite solution. It would take some burden from our shoulders through relying on the capabilities of the JDBC drivers and on the JTA standard. Take for example the SOAP developers: they don't deal with security issues at all in the 1.1 spec, but simply tell you to take care for the security of your transportlayer on your own. I think this is a completely legitimate approach. As a small team we have to concentrate our forces on the core things we adress. And that is O/R mapping and not tx coordination between RDBMS. So going this way we could offer: you can use PB to store Objects in different database when the DB Vendors provide capable drivers. If the drivers don't support distributed tx you have no proper tx support. Sorry, but it's not our fault... 3. We will definitely need a Transaction log in the ODMG server (something like the ojb.server.ObjectStateTable) which tracks the modification state of each object touched by a transaction. But I don't like the idea of keeping a log of the SQL operations as well. (why shall WE do THEIR job ???) Here is the design I have in mind: a Transaction aware version of the ObjectStateTable::commit() method could look like this: /** perform commit on all tx-states */ public void commit() { try { broker.beginTransaction(); // broker is a private attribute // of type PersistenceBroker Iterator i = table.values().iterator(); while (i.hasNext()) { ObjectModification mod = (ObjectModification) i.next(); mod.getModificationState().commit(mod); } broker.commitTransaction(); } catch (Throwable t) { // let broker rollback all performed operations // this relies only the brokers capability // to properly handle distributed tx against // multiple RDBMS: broker.abortTransaction(); // the ODMG tx must abort too, when updating one of the // underlying rdbms failed: this.rollback(); } } So as far as I see it, from an ojb.server point of view you can ignore the underlying RDBMS completely by using the PersistenceBroker as a blackbox which is responsible for proper 2 phase commits against all RDBMS. what do you think ? regards, the other Thomas :-) _______________________________________________ Objectbridge-developers mailing list Obj...@li... http://lists.sourceforge.net/lists/listinfo/objectbridge-developers |
From: Thomas M. <tho...@ho...> - 2001-01-23 18:50:29
|
"Dixon-Peugh, David" wrote: > > Except of course, that QBE by itself (without extensions), > is capable of everything that SQL does. (They are both > languages for Relational Algebra after all.) > > On another topic. . . > > I'm thinking about finishing up the Transaction support soon, > however I've got some questions about how we want to implement > it. Perhaps you two could shed some light on what we should do. > > Basically, the issue is that if you use the raw JDBC driver, you > cannot guarantee that two different connections will either both > commit, or both abort. > > There are three ways around this that I can see: > 1. Ignore it. > 2. Force all JDBC connections to be the type that can > participate in a distributed transaction. > 3. Have OJB maintain its own Transaction log which can > be used to issue compensating transactions, or complete > transactions when starting up again. > > One is the easiest to do, but you don't have real transactional integrity > accross the database. > > Two will work, and it wouldn't be too hard to implement, but it limits > which JDBC drivers can be used. (I don't think Postgres or some of > the other free databases have a distributed capable JDBC driver.) > > Three will also work, but it is obviously more work, and also leaves open > issues about ObJectBridge interacting with other more traditional software. > (The redo/undo of the log could overwrite something from the other App, as > we don't have exclusive control over it.) > Interesting point! The PersistenceBroker (PB) is able to handle classes mapped to different RDBMS. As of today there is no handling of such "inherently distributed" in PB. Even worse: the store() or delete() method don't declare exceptions to allow detection of failed DB transactions. I introduced beginTransaction(), commitTransaction() and commitTransaction() in the PB interface, but they do nothing yet. 1. sounds good :-) The question is: do we really have to support the feature of persistence against distributed RDBMS? It would be quite easy to change the repository.dtd to disallow JDBCConnectionDescriptors on a per class basis but to enforce usage of a one-for-all JDBC-connection. This 30-second hack would finish the discussion for some time... (at least until somebody asks "why can't I store my objects in different databases?" ) 2. this is my favourite solution. It would take some burden from our shoulders through relying on the capabilities of the JDBC drivers and on the JTA standard. Take for example the SOAP developers: they don't deal with security issues at all in the 1.1 spec, but simply tell you to take care for the security of your transportlayer on your own. I think this is a completely legitimate approach. As a small team we have to concentrate our forces on the core things we adress. And that is O/R mapping and not tx coordination between RDBMS. So going this way we could offer: you can use PB to store Objects in different database when the DB Vendors provide capable drivers. If the drivers don't support distributed tx you have no proper tx support. Sorry, but it's not our fault... 3. We will definitely need a Transaction log in the ODMG server (something like the ojb.server.ObjectStateTable) which tracks the modification state of each object touched by a transaction. But I don't like the idea of keeping a log of the SQL operations as well. (why shall WE do THEIR job ???) Here is the design I have in mind: a Transaction aware version of the ObjectStateTable::commit() method could look like this: /** perform commit on all tx-states */ public void commit() { try { broker.beginTransaction(); // broker is a private attribute // of type PersistenceBroker Iterator i = table.values().iterator(); while (i.hasNext()) { ObjectModification mod = (ObjectModification) i.next(); mod.getModificationState().commit(mod); } broker.commitTransaction(); } catch (Throwable t) { // let broker rollback all performed operations // this relies only the brokers capability // to properly handle distributed tx against // multiple RDBMS: broker.abortTransaction(); // the ODMG tx must abort too, when updating one of the // underlying rdbms failed: this.rollback(); } } So as far as I see it, from an ojb.server point of view you can ignore the underlying RDBMS completely by using the PersistenceBroker as a blackbox which is responsible for proper 2 phase commits against all RDBMS. what do you think ? regards, the other Thomas :-) |
From: David F. <dw...@la...> - 2001-01-23 15:01:20
|
At 09:13 AM 1/23/2001 -0500, Dixon-Peugh, David wrote: >Except of course, that QBE by itself (without extensions), >is capable of everything that SQL does. (They are both >languages for Relational Algebra after all.) I agree that QBE is very powerful, but how does one do the equivalent of=20 "LIKE" with QBE without extensions? Or the concept of OR's? I'm quite interested in this. Dave >On another topic. . . > >I'm thinking about finishing up the Transaction support soon, >however I've got some questions about how we want to implement >it. Perhaps you two could shed some light on what we should do. > >Basically, the issue is that if you use the raw JDBC driver, you >cannot guarantee that two different connections will either both >commit, or both abort. > >There are three ways around this that I can see: > 1. Ignore it. > 2. Force all JDBC connections to be the type that can > participate in a distributed transaction. > 3. Have OJB maintain its own Transaction log which can > be used to issue compensating transactions, or complete > transactions when starting up again. > >One is the easiest to do, but you don't have real transactional integrity >accross the database. > >Two will work, and it wouldn't be too hard to implement, but it limits >which JDBC drivers can be used. (I don't think Postgres or some of >the other free databases have a distributed capable JDBC driver.) > >Three will also work, but it is obviously more work, and also leaves open >issues about ObJectBridge interacting with other more traditional software. >(The redo/undo of the log could overwrite something from the other App, as >we don't have exclusive control over it.) > >Any suggestions? > >Thanks, > >The other David. > >-----Original Message----- >From: obj...@li... >[mailto:obj...@li...]On Behalf Of >Mahler Thomas >Sent: Tuesday, January 23, 2001 3:12 AM >To: David W. Forslund >Cc: objectbridge >Subject: RE: [Objectbridge-developers] OJB Homepage, OQL > > > > > > -----Urspr=FCngliche Nachricht----- > > Von: obj...@li... > > [mailto:obj...@li...]Im Auftrag > > von David W Forslund > > Gesendet: Montag, 22. Januar 2001 20:41 > > An: Thomas Mahler > > Cc: objectbridge > > Betreff: Re: [Objectbridge-developers] OJB Homepage, OQL > > > > > > QBE, however, does not deal very well with query filters (like > > inequality, similarity). There should be explicit support for that > > (which would map directly to an OQL statement). > > > > Dave > >You are right of course. I was a bit lazy with my definition of QBE. In= fact >I am thinking of an "QBE with extensions" that allows composition of= queries >and query filters as in the SODA approach >(http://www.egroups.com/files/oodb/query.html) or in the approach mentioned >in the COBRA whitepaper. > > > > > > Thomas Mahler writes: > > > Thanks for all your comments regarding OQL and Query by Example (QBE) > > > facilities. > > > > > > IMHO it's the best solution to start with a QBE-facility and only= after > > > that provide an OQL API. > > > Starting with QBE has 2 advantages: > > > - It will provide a useful extension to the PersistenceBroker, so= that > > > it can be used even without the ODMG server > > > - there are some working examples from other projects, that can be > > > easily adopted to our needs > > > > > > Implementing OQL on top of such a facility will work licke follows: > > > - implement a parser that reads OQL-queries and generates query= trees. > > > - provide a mapping from the abstract query trees to QBE query= objects. > > > > > > alternatively one could try to build a parser that directly generates > > > QBE query objects. > > > > > > I will have a look at all the projects you mentioned to find the best > > > possible start for the QBE facility. I liked the SODA approach > > > (www.db4o.com), but I think they are not finished with their spec. > > > > > > I'll start with this asap. Right now I'm doing some performance= tuning > > > deep inside the PersistenceBroker. I'm profiling OJB excution with= the > > > java -Xrunhprof option which gives me some hints about execution hot > > > spots. I already identified some hot spots in the metadata layer... > > > > > > regards, > > > > > > Thomas > > > > > > _______________________________________________ > > > Objectbridge-developers mailing list > > > Obj...@li... > > > http://lists.sourceforge.net/lists/listinfo/objectbridge-developers > > > > _______________________________________________ > > Objectbridge-developers mailing list > > Obj...@li... > > http://lists.sourceforge.net/lists/listinfo/objectbridge-developers > > >_______________________________________________ >Objectbridge-developers mailing list >Obj...@li... >http://lists.sourceforge.net/lists/listinfo/objectbridge-developers David W. Forslund dw...@la... Computer and Computational Sciences http://www.acl.lanl.gov/~dwf Los Alamos National Laboratory Los Alamos, NM 87545 505-665-1907 FAX: 505-665-4939 |
From: Dixon-Peugh, D. <Dav...@tp...> - 2001-01-23 14:15:45
|
Except of course, that QBE by itself (without extensions), is capable of everything that SQL does. (They are both languages for Relational Algebra after all.) On another topic. . . I'm thinking about finishing up the Transaction support soon, however I've got some questions about how we want to implement it. Perhaps you two could shed some light on what we should do. Basically, the issue is that if you use the raw JDBC driver, you cannot guarantee that two different connections will either both commit, or both abort. There are three ways around this that I can see: 1. Ignore it. 2. Force all JDBC connections to be the type that can participate in a distributed transaction. 3. Have OJB maintain its own Transaction log which can be used to issue compensating transactions, or complete transactions when starting up again. One is the easiest to do, but you don't have real transactional = integrity accross the database. Two will work, and it wouldn't be too hard to implement, but it limits=20 which JDBC drivers can be used. (I don't think Postgres or some of the other free databases have a distributed capable JDBC driver.) Three will also work, but it is obviously more work, and also leaves = open issues about ObJectBridge interacting with other more traditional = software. (The redo/undo of the log could overwrite something from the other App, = as we don't have exclusive control over it.) Any suggestions? Thanks, The other David. -----Original Message----- From: obj...@li... [mailto:obj...@li...]On Behalf = Of Mahler Thomas Sent: Tuesday, January 23, 2001 3:12 AM To: David W. Forslund Cc: objectbridge Subject: RE: [Objectbridge-developers] OJB Homepage, OQL > -----Urspr=FCngliche Nachricht----- > Von: obj...@li... > [mailto:obj...@li...]Im = Auftrag > von David W Forslund > Gesendet: Montag, 22. Januar 2001 20:41 > An: Thomas Mahler > Cc: objectbridge > Betreff: Re: [Objectbridge-developers] OJB Homepage, OQL > > > QBE, however, does not deal very well with query filters (like > inequality, similarity). There should be explicit support for that > (which would map directly to an OQL statement). > > Dave You are right of course. I was a bit lazy with my definition of QBE. In = fact I am thinking of an "QBE with extensions" that allows composition of = queries and query filters as in the SODA approach (http://www.egroups.com/files/oodb/query.html) or in the approach = mentioned in the COBRA whitepaper. > > Thomas Mahler writes: > > Thanks for all your comments regarding OQL and Query by Example = (QBE) > > facilities. > > > > IMHO it's the best solution to start with a QBE-facility and only = after > > that provide an OQL API. > > Starting with QBE has 2 advantages: > > - It will provide a useful extension to the PersistenceBroker, so = that > > it can be used even without the ODMG server > > - there are some working examples from other projects, that can be > > easily adopted to our needs > > > > Implementing OQL on top of such a facility will work licke = follows: > > - implement a parser that reads OQL-queries and generates query = trees. > > - provide a mapping from the abstract query trees to QBE query = objects. > > > > alternatively one could try to build a parser that directly = generates > > QBE query objects. > > > > I will have a look at all the projects you mentioned to find the = best > > possible start for the QBE facility. I liked the SODA approach > > (www.db4o.com), but I think they are not finished with their spec. > > > > I'll start with this asap. Right now I'm doing some performance = tuning > > deep inside the PersistenceBroker. I'm profiling OJB excution with = the > > java -Xrunhprof option which gives me some hints about execution = hot > > spots. I already identified some hot spots in the metadata = layer... > > > > regards, > > > > Thomas > > > > _______________________________________________ > > Objectbridge-developers mailing list > > Obj...@li... > > = http://lists.sourceforge.net/lists/listinfo/objectbridge-developers > > _______________________________________________ > Objectbridge-developers mailing list > Obj...@li... > http://lists.sourceforge.net/lists/listinfo/objectbridge-developers _______________________________________________ Objectbridge-developers mailing list Obj...@li... http://lists.sourceforge.net/lists/listinfo/objectbridge-developers |
From: <tho...@it...> - 2001-01-23 08:06:55
|
> -----Urspr=FCngliche Nachricht----- > Von: obj...@li... > [mailto:obj...@li...]Im Auftrag > von David W Forslund > Gesendet: Montag, 22. Januar 2001 20:41 > An: Thomas Mahler > Cc: objectbridge > Betreff: Re: [Objectbridge-developers] OJB Homepage, OQL > > > QBE, however, does not deal very well with query filters (like > inequality, similarity). There should be explicit support for that > (which would map directly to an OQL statement). > > Dave You are right of course. I was a bit lazy with my definition of QBE. In f= act I am thinking of an "QBE with extensions" that allows composition of quer= ies and query filters as in the SODA approach (http://www.egroups.com/files/oodb/query.html) or in the approach mention= ed in the COBRA whitepaper. > > Thomas Mahler writes: > > Thanks for all your comments regarding OQL and Query by Example (QBE= ) > > facilities. > > > > IMHO it's the best solution to start with a QBE-facility and only af= ter > > that provide an OQL API. > > Starting with QBE has 2 advantages: > > - It will provide a useful extension to the PersistenceBroker, so th= at > > it can be used even without the ODMG server > > - there are some working examples from other projects, that can be > > easily adopted to our needs > > > > Implementing OQL on top of such a facility will work licke follows: > > - implement a parser that reads OQL-queries and generates query tree= s. > > - provide a mapping from the abstract query trees to QBE query objec= ts. > > > > alternatively one could try to build a parser that directly generate= s > > QBE query objects. > > > > I will have a look at all the projects you mentioned to find the bes= t > > possible start for the QBE facility. I liked the SODA approach > > (www.db4o.com), but I think they are not finished with their spec. > > > > I'll start with this asap. Right now I'm doing some performance tuni= ng > > deep inside the PersistenceBroker. I'm profiling OJB excution with t= he > > java -Xrunhprof option which gives me some hints about execution hot > > spots. I already identified some hot spots in the metadata layer... > > > > regards, > > > > Thomas > > > > _______________________________________________ > > Objectbridge-developers mailing list > > Obj...@li... > > http://lists.sourceforge.net/lists/listinfo/objectbridge-developers > > _______________________________________________ > Objectbridge-developers mailing list > Obj...@li... > http://lists.sourceforge.net/lists/listinfo/objectbridge-developers |
From: David W F. <dw...@la...> - 2001-01-22 19:40:42
|
QBE, however, does not deal very well with query filters (like inequality, similarity). There should be explicit support for that (which would map directly to an OQL statement). Dave Thomas Mahler writes: > Thanks for all your comments regarding OQL and Query by Example (QBE) > facilities. > > IMHO it's the best solution to start with a QBE-facility and only after > that provide an OQL API. > Starting with QBE has 2 advantages: > - It will provide a useful extension to the PersistenceBroker, so that > it can be used even without the ODMG server > - there are some working examples from other projects, that can be > easily adopted to our needs > > Implementing OQL on top of such a facility will work licke follows: > - implement a parser that reads OQL-queries and generates query trees. > - provide a mapping from the abstract query trees to QBE query objects. > > alternatively one could try to build a parser that directly generates > QBE query objects. > > I will have a look at all the projects you mentioned to find the best > possible start for the QBE facility. I liked the SODA approach > (www.db4o.com), but I think they are not finished with their spec. > > I'll start with this asap. Right now I'm doing some performance tuning > deep inside the PersistenceBroker. I'm profiling OJB excution with the > java -Xrunhprof option which gives me some hints about execution hot > spots. I already identified some hot spots in the metadata layer... > > regards, > > Thomas > > _______________________________________________ > Objectbridge-developers mailing list > Obj...@li... > http://lists.sourceforge.net/lists/listinfo/objectbridge-developers |
From: Thomas M. <tho...@ho...> - 2001-01-22 18:53:42
|
Thanks for all your comments regarding OQL and Query by Example (QBE) facilities. IMHO it's the best solution to start with a QBE-facility and only after that provide an OQL API. Starting with QBE has 2 advantages: - It will provide a useful extension to the PersistenceBroker, so that it can be used even without the ODMG server - there are some working examples from other projects, that can be easily adopted to our needs Implementing OQL on top of such a facility will work licke follows: - implement a parser that reads OQL-queries and generates query trees. - provide a mapping from the abstract query trees to QBE query objects. alternatively one could try to build a parser that directly generates QBE query objects. I will have a look at all the projects you mentioned to find the best possible start for the QBE facility. I liked the SODA approach (www.db4o.com), but I think they are not finished with their spec. I'll start with this asap. Right now I'm doing some performance tuning deep inside the PersistenceBroker. I'm profiling OJB excution with the java -Xrunhprof option which gives me some hints about execution hot spots. I already identified some hot spots in the metadata layer... regards, Thomas |
From: David F. <dw...@la...> - 2001-01-22 15:38:12
|
Another good example is given by the COBRA project at http://www.kimble.easynet.co.uk/cobra/whitepaper.html This is very close to what we are using in our persistent interface. Dave At 04:29 PM 1/20/2001 +0100, Thomas Mahler wrote: >Hi all, > >In the last days I was working on restructuring the documentation in a >way that it can be used offline as well as online. >First visible result: we have a REAL homepage: >http://objectbridge.sourceforge.net. >I hope you like the logo! >I moved the doc directory into src/doc because it needs to be touched by >the build script (for timestamps etc.) so it's cleaner to have it under >src. > >After setting up a structure for documentation we have now no more >excuse for not filling the structure with content. So everyone is >invited to contribute some documents... > >During the last week I was having a look at free OQL implementations. >The Only one I found was from CASTOR (http://castor.exolab.org). I see >one major problem in reusing their OQL implementaion for OJB: it's so >tightly integrated into the rest of their system, that it is virtually >impossible to extract just one or two packages from their source tree... > >I found an OQL grammar description for the ANTLR parser generator on the >ODMG site (http://www.odmg.org, have a look for the file OQL.G in the >download area). This will help us building an OQL parser. But of course >all processing of the parse tree has still to be done... >I'm trying to get a idea what's the best way to go. Any ideas or >suggestions? > >best regards, > >Thomas > >_______________________________________________ >Objectbridge-developers mailing list >Obj...@li... >http://lists.sourceforge.net/lists/listinfo/objectbridge-developers David W. Forslund dw...@la... Computer and Computational Sciences http://www.acl.lanl.gov/~dwf Los Alamos National Laboratory Los Alamos, NM 87545 505-665-1907 FAX: 505-665-4939 |
From: David F. <dw...@la...> - 2001-01-22 15:23:28
|
Have you looked at the ODMG implementation from Ozone? http://www.ozone-db.org ? Also the VBSF software from Objectmatter (http://www.objectmatter.com) illlustrates a way to build up a query (like an OQL query) by a set of calls. There are other examples of this approach, too. We like this building up of a query, because it provides a nice programmatic interface to the query and increases efficiency. It also may reduce the need initially to implement the full OQL parser, since it exposes programmatically the lower level implementation in a consistent way. Dave At 04:29 PM 1/20/2001 +0100, Thomas Mahler wrote: >Hi all, > >In the last days I was working on restructuring the documentation in a >way that it can be used offline as well as online. >First visible result: we have a REAL homepage: >http://objectbridge.sourceforge.net. >I hope you like the logo! >I moved the doc directory into src/doc because it needs to be touched by >the build script (for timestamps etc.) so it's cleaner to have it under >src. > >After setting up a structure for documentation we have now no more >excuse for not filling the structure with content. So everyone is >invited to contribute some documents... > >During the last week I was having a look at free OQL implementations. >The Only one I found was from CASTOR (http://castor.exolab.org). I see >one major problem in reusing their OQL implementaion for OJB: it's so >tightly integrated into the rest of their system, that it is virtually >impossible to extract just one or two packages from their source tree... > >I found an OQL grammar description for the ANTLR parser generator on the >ODMG site (http://www.odmg.org, have a look for the file OQL.G in the >download area). This will help us building an OQL parser. But of course >all processing of the parse tree has still to be done... >I'm trying to get a idea what's the best way to go. Any ideas or >suggestions? > >best regards, > >Thomas > >_______________________________________________ >Objectbridge-developers mailing list >Obj...@li... >http://lists.sourceforge.net/lists/listinfo/objectbridge-developers David W. Forslund dw...@la... Computer and Computational Sciences http://www.acl.lanl.gov/~dwf Los Alamos National Laboratory Los Alamos, NM 87545 505-665-1907 FAX: 505-665-4939 |
From: Janno K. <ja...@ip...> - 2001-01-21 17:28:06
|
Thomas Mahler wrote: > Hi all, > > In the last days I was working on restructuring the documentation in a > way that it can be used offline as well as online. > First visible result: we have a REAL homepage: > http://objectbridge.sourceforge.net. > I hope you like the logo! > I moved the doc directory into src/doc because it needs to be touched by > the build script (for timestamps etc.) so it's cleaner to have it under > src. > > After setting up a structure for documentation we have now no more > excuse for not filling the structure with content. So everyone is > invited to contribute some documents... > > During the last week I was having a look at free OQL implementations. > The Only one I found was from CASTOR (http://castor.exolab.org). I see > one major problem in reusing their OQL implementaion for OJB: it's so > tightly integrated into the rest of their system, that it is virtually > impossible to extract just one or two packages from their source tree... > > I found an OQL grammar description for the ANTLR parser generator on the > ODMG site (http://www.odmg.org, have a look for the file OQL.G in the > download area). This will help us building an OQL parser. But of course > all processing of the parse tree has still to be done... > I'm trying to get a idea what's the best way to go. Any ideas or > suggestions? > Well, one way to make ObjectBridge useable is to implement first 'query by example'. One db that has implemented it is db4o (http://www.db4o.com). I believe that also big OODB vendors have implemented similar concepts. I know that ODMG knows nothing about 'query by example' but it could be later used to implemend OQL, but for right now we wouldn't need to write OQL parser. IHMO 'query by example' is also much more usable than OQL or SQL. query by example looks something like that PersonQuery pq = new PersonQuery(); pq.setName("John"); Collection col = Db.getInstance().find( pq ); // find all persons with name John Even easier way to make OB usable is implement queries similar to EJB's Janno Kusman > > best regards, > > Thomas > > _______________________________________________ > Objectbridge-developers mailing list > Obj...@li... > http://lists.sourceforge.net/lists/listinfo/objectbridge-developers |
From: Thomas M. <tho...@ho...> - 2001-01-20 15:30:28
|
Hi all, In the last days I was working on restructuring the documentation in a way that it can be used offline as well as online. First visible result: we have a REAL homepage: http://objectbridge.sourceforge.net. I hope you like the logo! I moved the doc directory into src/doc because it needs to be touched by the build script (for timestamps etc.) so it's cleaner to have it under src. After setting up a structure for documentation we have now no more excuse for not filling the structure with content. So everyone is invited to contribute some documents... During the last week I was having a look at free OQL implementations. The Only one I found was from CASTOR (http://castor.exolab.org). I see one major problem in reusing their OQL implementaion for OJB: it's so tightly integrated into the rest of their system, that it is virtually impossible to extract just one or two packages from their source tree... I found an OQL grammar description for the ANTLR parser generator on the ODMG site (http://www.odmg.org, have a look for the file OQL.G in the download area). This will help us building an OQL parser. But of course all processing of the parse tree has still to be done... I'm trying to get a idea what's the best way to go. Any ideas or suggestions? best regards, Thomas |
From: Thomas M. <tho...@ho...> - 2001-01-14 12:28:17
|
Thomas Mahler wrote: > > David Forslund wrote: > > [...] > > there are still numerous other Java errors that are not reported as > > failures. > > > > I also get these errors during the JUnit run. These errors are the same > as for the 0.1.41 release: if you run the TestCases separately they > don't appear. Until now I did not investigate which kind of interference > produces these exception. > > The stacktrace of the thrown exception indicate that they have something > to do with the PreparedStatements. There might be problems with > InstantDB (or its JDBCDriver) using Prepared statements. > I've tested the 0.1.41 at my companies site with DB2 UDB 6.1. There were > bugs in their JDBCDriver which resulted in similar Exceptions. > After applying a FixPack to the DB2 Client there were no more errors... > I checked the InstantDB site and found out that the errors in the JUnit runs are due to a bug in the 3.14 release of InstantDB. I integrated the latest IDB 3.25 release into OJB and now don't find any PreparedStatement related errors. I provided a new archive objectbridge-0.1.48a-src.tgz reflecting all neccessary changes under http://sourceforge.net/project/showfiles.php?group_id=13647&release_id=20652 regards Thomas |
From: Thomas M. <tho...@ho...> - 2001-01-14 11:31:04
|
David Forslund wrote: > > Thanks for the new version. The JUnit test seems to fail with one > case, however: > ... > [junit] Time: 2.453 > [junit] > [junit] FAILURES!!! > [junit] Test Results: > [junit] Run: 5 Failures: 1 Errors: 0 > [junit] There was 1 failure: > [junit] 1) testWrongDbName(test.ojb.odmg.OdmgExamples) "should not > be able to open database ThereIsNoSuchFile" > [junit] > > BUILD FAILED > yes, this is still buggy... but for existing files > there are still numerous other Java errors that are not reported as > failures. > I also get these errors during the JUnit run. These errors are the same as for the 0.1.41 release: if you run the TestCases separately they don't appear. Until now I did not investigate which kind of interference produces these exception. The stacktrace of the thrown exception indicate that they have something to do with the PreparedStatements. There might be problems with InstantDB (or its JDBCDriver) using Prepared statements. I've tested the 0.1.41 at my companies site with DB2 UDB 6.1. There were bugs in their JDBCDriver which resulted in similar Exceptions. After applying a FixPack to the DB2 Client there were no more errors... It would be interesting to have OJB tested with other RDBMS to be sure there are no incompatiblities. regards, Thomas |
From: Thomas M. <tho...@ho...> - 2001-01-14 04:10:15
|
Hi all, there's a new release with a simple named roots implementation... from the release notes: The 0.1.48 release of ObJectBridge includes the following modules: broker -- transparent persistence for Java Objects server -- ODMG 3.0 compliant Objectserver (work in progress) test -- JUnit regression tests and examples demonstrating programming techniques changes in this release: - ODMG Named Roots implemented - All examples are now re-written as JUnit tests More information is available at http://sourceforge.net/projects/objectbridge best regards, Thomas Mahler |
From: Dixon-Peugh, D. <Dav...@tp...> - 2001-01-11 18:27:25
|
Are you asking for the underlying objects of the OQL? Or something a bit more sophisticated. The underlying objects are likely just going to be nodes in a parse tree, and not really have a lot of stuff on them. The way I understand ObJectBridge will handle its OQL stuff, is that it will just take the queries, rewrite them into SQL and then execute it on the RDBMS. . . Oh, now I get it. Since data can be pulled from multiple stores at one time, it becomes necessary to do some DB type work in memory. Being able to compose a query which runs against many DBs is what you are after. So, for the OQL support we will need: 1: Parse OQL into Parse Tree 2: Rewrite the Parse Tree into one or more statements per datasource, plus one or more statements which can be handled in memory by OJB. 3: Execute each of the statements on the remote datasource, collecting data into OJB. 4: Execute the OJB specific operations to join the data 5: Return the results in the ODMG type requested. ------------ So, what you are looking for are steps 2 - 5, correct? (Step 1 is probably pretty easy. I've seen a couple of JavaCC parsers for OQL out there.) Some things we can note here: OJB does not necessarily have to implement all operations of OQL. So, theoretically, we could rewrite a "BETWEEN" that has to happen as a "<" "AND" ">" structure. (Even though it would probably be better to write "BETWEEN" in there, as <&> will take longer. OJB will probably need to index things as they come in. Fortunately, OJB also has access to the execution plan, and can build the apropriate index (without relying on someone to find it for us.) OJB will need to be able to translate OQL into SQL of the apropriate form. ----------- All in all, it looks like a tall order. It can be done however. Merant did the same type of thing for their "Reflections" ODBC driver. (Only for RDBMSes though.) David (D-P) -----Original Message----- From: obj...@li... [mailto:obj...@li...]On Behalf Of David Forslund Sent: Thursday, January 11, 2001 9:58 AM To: Mahler Thomas Cc: objectbridge Subject: RE: RE: [Objectbridge-developers] XML used in test.ojb.server, etc At 08:37 AM 1/11/2001 +0100, Mahler Thomas wrote: Between is harder and not really needed. "LIKE" is usually sufficient, although GREATER_THAN and LESS_THAN or almost as important. What we do is aggregate the constraints with "AND" and "OR". I'm not sure how to express the AND and OR with a query by example. I don't see a way to have BETWEEN, >, < and conjunction of clauses with AND or OR in a query by example solution. Of course we could start with an adhoc solution but I think it will be better to directly go for OQL, as we need to implement it anyway to be ODMG compliant. We don't see a need for "between" Simply "<",">", and "AND" provides that. I don't see how to use AND's and OR's in a QBE, either. But to implement an OQL solution, you need to have underlying Java objects. These need to be implemented first and then parse OQL to map to them. We would be interested in the underlying Java objects. Would this be a helpful feature for you? I can start working on such a functionality within the next days. In our application on sourceforge (OpenEMed), we have a persistent abstraction layer that is implemented over a number of different kinds of persistent store (ODBMS, and RDBMS). The RDBMS part uses Software Tree's JDX product that works very well. We would like to use an open source product, if at all possible, however. Castor is a likely candidate, but still is evolving rapidly. I'll have a look at your stuff to get an impression. Don't be overwhelmed by the size of our application. Look in the tools directory in the Database package to see what we are up to. I had problems to get the big tarball (> 14M) due to problems with my companies proxy servers, will try it later. You can browse the CVS repository for OpenEMed/src/tools/gov/lanl/Database to see the relevant files. Thanks, David W. Forslund dw...@la... Computer and Computational Sciences http://www.acl.lanl.gov/~dwf <http://www.acl.lanl.gov/~dwf> Los Alamos National Laboratory Los Alamos, NM 87545 505-665-1907 FAX: 505-665-4939 |
From: David F. <dw...@la...> - 2001-01-11 14:57:12
|
At 08:37 AM 1/11/2001 +0100, Mahler Thomas wrote: >>Between is harder and not really needed. "LIKE" is usually sufficient, >>although GREATER_THAN and LESS_THAN or almost as important. What we do >>is aggregate the constraints with "AND" and "OR". I'm not sure how to >>express the AND and OR with a query by example. >> >>> > I don't see a way to have BETWEEN, >, < and conjunction of clauses with > AND or OR in a query by example solution. Of course we could start with > an adhoc solution but I think it will be better to directly go for OQL, > as we need to implement it anyway to be ODMG compliant. We don't see a need for "between" Simply "<",">", and "AND" provides that. I don't see how to use AND's and OR's in a QBE, either. But to implement an OQL solution, you need to have underlying Java objects. These need to be implemented first and then parse OQL to map to them. We would be interested in the underlying Java objects. > >Would this be a helpful feature for you? I can start working on such a >functionality within the next days. > >In our application on sourceforge (OpenEMed), we have a persistent >abstraction layer that is implemented over a number of different kinds of >persistent store (ODBMS, and RDBMS). The RDBMS part uses Software Tree's >JDX product that works very well. We would like to use an open source >product, if at all possible, however. Castor is a likely candidate, but >still is evolving rapidly. > >I'll have a look at your stuff to get an impression. > > > >Don't be overwhelmed by the size of our application. Look in the tools >directory in the Database package to see what we are up to. > > > I had problems to get the big tarball (> 14M) due to problems with my > companies proxy servers, will try it later. You can browse the CVS repository for OpenEMed/src/tools/gov/lanl/Database to see the relevant files. Thanks, David W. Forslund dw...@la... Computer and Computational Sciences http://www.acl.lanl.gov/~dwf Los Alamos National Laboratory Los Alamos, NM 87545 505-665-1907 FAX: 505-665-4939 |
From: <tho...@it...> - 2001-01-11 07:33:25
|
Between is harder and not really needed. "LIKE" is usually sufficient, although GREATER_THAN and LESS_THAN or almost as important. What we do is aggregate the constraints with "AND" and "OR". I'm not sure how to express the AND and OR with a query by example. I don't see a way to have BETWEEN, >, < and conjunction of clauses with AND or OR in a query by example solution. Of course we could start with an adhoc solution but I think it will be better to directly go for OQL, as we need to implement it anyway to be ODMG compliant. Would this be a helpful feature for you? I can start working on such a functionality within the next days. In our application on sourceforge (OpenEMed), we have a persistent abstraction layer that is implemented over a number of different kinds of persistent store (ODBMS, and RDBMS). The RDBMS part uses Software Tree's JDX product that works very well. We would like to use an open source product, if at all possible, however. Castor is a likely candidate, but still is evolving rapidly. I'll have a look at your stuff to get an impression. Don't be overwhelmed by the size of our application. Look in the tools directory in the Database package to see what we are up to. I had problems to get the big tarball (> 14M) due to problems with my companies proxy servers, will try it later. |
From: David F. <dw...@la...> - 2001-01-09 14:43:11
|
At 10:29 AM 1/9/2001 +0100, Mahler Thomas wrote: >>This got it running, but I'm interested in this example because it is the >>closest to what we are doing. >>We have been running with poet and understand the ODMG approach. I >>really need to have some kind >>of querying ability with approximate matches with wild-card supported. >> >>Thanks, >> >>Dave >> >Hi Dave, > >We aim at providing a full ODMG implementation, thus we will have a full >OQL implementation. >Until now we not startet working on OQL. currently David Dixon-Peugh is >working on Object Locking and Transaction management. >I'm currently working on reworking the ojb.examples.server.App as a JUnit >test. >One of my next goals will be the OQL implementation. I'm planning to reuse >the OQL implementation from CASTOR (castor.exolab.org). > >AFAIK Castor does not implement ODMG but JDO. I don't know if you are >familiar with JDO: it's the upcoming Standard API for transparent >persistence in Java. When you look at the samples on the castor site you >will notice that it has a lot in common with ODMG. I have acquaintance with Castor and JDO, but Castor's JDO is not the same as Sun's proposed JDO. Actually what I need (want?) is not necessarily full ODMG, but simply the ability to create a query from a Java object. We are using that capability in storedObjects already with great success. It could be converted to OQL at any time, but probably is a lot more efficient than OQL because one is dealing directly with the objects, rather than having to parse them. In a sense it is a little lower than OQL. I believe it is a lot easier to implement this than a full OQL parser handler. It might be the first step in the process. I think others have taken this approach, too. In our application on sourceforge (OpenEMed), we have a persistent abstraction layer that is implemented over a number of different kinds of persistent store (ODBMS, and RDBMS). The RDBMS part uses Software Tree's JDX product that works very well. We would like to use an open source product, if at all possible, however. Castor is a likely candidate, but still is evolving rapidly. Thanks, Dave > >regards, > >Thomas > > David W. Forslund dw...@la... Computer and Computational Sciences http://www.acl.lanl.gov/~dwf Los Alamos National Laboratory Los Alamos, NM 87545 505-665-1907 FAX: 505-665-4939 |
From: <tho...@it...> - 2001-01-09 09:24:52
|
This got it running, but I'm interested in this example because it is the closest to what we are doing. We have been running with poet and understand the ODMG approach. I really need to have some kind of querying ability with approximate matches with wild-card supported. Thanks, Dave Hi Dave, We aim at providing a full ODMG implementation, thus we will have a full OQL implementation. Until now we not startet working on OQL. currently David Dixon-Peugh is working on Object Locking and Transaction management. I'm currently working on reworking the ojb.examples.server.App as a JUnit test. One of my next goals will be the OQL implementation. I'm planning to reuse the OQL implementation from CASTOR (castor.exolab.org). AFAIK Castor does not implement ODMG but JDO. I don't know if you are familiar with JDO: it's the upcoming Standard API for transparent persistence in Java. When you look at the samples on the castor site you will notice that it has a lot in common with ODMG. regards, Thomas |
From: David F. <dw...@la...> - 2001-01-08 21:01:32
|
At 07:01 PM 1/8/2001 +0100, Thomas Mahler wrote: >Hi David, > >first of all: thanks for your interest in OJB! > >David Forslund wrote: > > > > I downloaded and built the 0.1.41 release without any problems. > > However, when I run the JUnit > > tests it seems to get a number of errors: >[...] > > > > > > Also, I can't seem to get the examples to work according to the > > documentation. > > "example server" returns no class found. > >Mea culpa! >I'm planning to shift all stuff from ojb.examples.* to test.ojb.* for >two reasons: >1. have only library code under ojb.*, no test stuff, no examples >2. To avoid a code doubling between tests and examples I want to rewrite >all examples > as JUnit tests. > >I'm finished with ojb.examples.broker (now contained in TestCase >test.ojb.broker.BrokerExamples) >and with ojb.examples.proxy (now in test.ojb.broker.ProxyExamples) >So "example broker" and "example proxies" will fail (but you get their >replacements executed with "build junit" !) > >for "example server" it slightly different: >ojb.examples.server.* is not rewritten as a JUnit TestCase yet. >But unfortunately I turned off compilation for packages >ojb.examples.server and ojb.server in the build.xml :-( > >But: I corrected this mistake in the attached build.xml. >So just replace your build.xml with this new version, run "build", run >"example server", >lean back and enjoy the wonders of OJB... > >The ojb.server stuff is still work in progress. The server example is >meant to give an impression how programming against an ODMG >implementation will look like. So it's no real loss in not seeing it >running ;-) This got it running, but I'm interested in this example because it is the closest to what we are doing. We have been running with poet and understand the ODMG approach. I really need to have some kind of querying ability with approximate matches with wild-card supported. Thanks, Dave >best regards, > >Thomas David W. Forslund dw...@la... Computer and Computational Sciences http://www.acl.lanl.gov/~dwf Los Alamos National Laboratory Los Alamos, NM 87545 505-665-1907 FAX: 505-665-4939 |
From: Thomas M. <tho...@ho...> - 2001-01-08 18:02:17
|
Hi David, first of all: thanks for your interest in OJB! David Forslund wrote: > > I downloaded and built the 0.1.41 release without any problems. > However, when I run the JUnit > tests it seems to get a number of errors: [...] Yes, I get the same errors during JUnit runs. I have no idea about these errors, because if I run the testSuites test.ojb.broker.PersistenceBrokerTest, test.ojb.broker.BrokerExamples, test.ojb.broker.ProxyExamples separately and not via the embracing suite test.ojb.broker.AllTests there are no exceptions. I attached a build.xml file with a modified target junit which you might try to see if you still get exceptions using the TestSuites separately. I hope to get rid of this strange thing soon... > > Also, I can't seem to get the examples to work according to the > documentation. > "example server" returns no class found. Mea culpa! I'm planning to shift all stuff from ojb.examples.* to test.ojb.* for two reasons: 1. have only library code under ojb.*, no test stuff, no examples 2. To avoid a code doubling between tests and examples I want to rewrite all examples as JUnit tests. I'm finished with ojb.examples.broker (now contained in TestCase test.ojb.broker.BrokerExamples) and with ojb.examples.proxy (now in test.ojb.broker.ProxyExamples) So "example broker" and "example proxies" will fail (but you get their replacements executed with "build junit" !) for "example server" it slightly different: ojb.examples.server.* is not rewritten as a JUnit TestCase yet. But unfortunately I turned off compilation for packages ojb.examples.server and ojb.server in the build.xml :-( But: I corrected this mistake in the attached build.xml. So just replace your build.xml with this new version, run "build", run "example server", lean back and enjoy the wonders of OJB... The ojb.server stuff is still work in progress. The server example is meant to give an impression how programming against an ODMG implementation will look like. So it's no real loss in not seeing it running ;-) best regards, Thomas |