I think about it too. But I must have duplicate object which are the same
(or contains only the updatable properties) than persistent ones.
Another solution will be to use FormBean (I use Struts) but it forces me to
pass a form bean (view data) in my persistent method (persistence layer) as
an argument and copy properties. It works but I don't think it's very clean
for layer separation.
I think about cloning object too. But I never try with this solution.

Thanx for the reply.

----- Original Message -----
From: "Guerrero, Axel" <[EMAIL PROTECTED]>
To: "OJB Users List" <[EMAIL PROTECTED]>
Sent: Wednesday, November 26, 2003 6:24 PM
Subject: RE: Changing object properties outside the transaction ...


> I am doing something very similar to what you are trying to do...
> Here's how I addressed the problem:
> I have a series of Objects that map to the db tables (I call them data
objects).
> I also have a series of Objects (i call them view objects, almost exact
duplicates of the data Objects) that I use to send information back and
forth from the data tier to the web (form) tier.
>
> Let's say I want to edit a Person object with id 12345.
> I do an OJB query with id 12345...
> I convert this Person object into a view object so that I can
display/modify in a view (a jsp page/form).
> when I press "submit" to save the changes, i collect the information from
the jsp form into a person view and send it to the persistence layer..
> the persistence layer then queries OJB for the data object with id 12345.
I lock the object and copy attributes from the view object into the data
object. at the end, I close the transaction.
>
> This is the best architecture I could come up with... This may not be *the
absolute best* but it works for my needs.
>
> Axel Guerrero
>
> -----Original Message-----
> From: Philippe Boisaubert [mailto:[EMAIL PROTECTED]
> Sent: Wednesday, November 26, 2003 10:30 AM
> To: [EMAIL PROTECTED]
> Subject: Changing object properties outside the transaction ...
>
>
> About using/design with ODMG API :
>
> Generally I want to get a domain (business) object from the persistence
layer. Then I use it in my app (webapp), modify it and when modification are
validated, update it in the persistent storage.
> I use a class for persistence actions (CRUD) like this :
>
> class BookPersistence {
>
>  static BookPersistence getInstance() {...}
>  Book getBook(String bookId) { ...}
>  void storeBook(Book b)  { ...}
>  void deleteBook(Book b)  { ...}
>  void updateBook(Book b)  { ...}
> }
>
> And I use it like this :
> Book b = new Book();
> BookPersistence.getInstance().store(b);
> ...
>
> And :
> Book b1 = BookPersistence.getInstance().getBook("bookID");
> b1.setXXX(...);
> ...
> BookPersistence.getInstance().updateBook(b1);
>
> Whith an update method like this :
>
> public void updateBook(Book b) {
>  tx.begin();
>  tx.lock(myBook , Transaction.WRITE);
>  tx.commit;
> }
>
> It doesn work 'cause book is modified outside the transaction and OJB
doesn't "monitor" it (I think).
>
> Same things with :
>
> public void updateBook(Book b) {
>  tx.begin();
>  OQLQuery query = odmg.newOQLQuery();
>  query.create("select book from "+ Book.class.getName()+ " where code=\""+
b.getCode()+ "\"");
>  DList results = (DList) query.execute();
>  Book myBook = (Book) results.get(0);
>  tx.lock(myBook , Transaction.WRITE);
>  tx.commit;
> }
>
> But I can't open a transaction during all the modification time of my
object and commit at the end, isn't it ?
> If I use this object in a webapp (modification by a form), I must wait all
the validation (and request, validation, ...) before commiting. It retains
lock during this time (even if I use optimistic locking, a long time
transaction can desynchronize data with multiple users).
> And I've got to add Transaction demarcation in my business process code.
>
> So I try to declare the object dirty in my transaction like this :
>
> public void updateBook(Book b) {
>  tx.begin();
>  tx.lock(b, Transaction.WRITE);
>  ((TransactionImpl)tx).makeDirty(b);
>  tx.commit;
> }
>
> It works but it's not a standardized process (the makeDirty() of
TransactionImpl object is not part of ODMG API and force db calls even if
the object is not modified).
>
> So what's the solution ? Am I obliged to modify the object properties
inside the transaction ? Do I use bad patterns ? Is there any trick ?
>
> Thanx
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
>
>


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

Reply via email to