The order has methods createMemento():Memento and applyMemento(Memento
m).  These are used to get objects that contain state.  They can in
turn be applied to the order to set it back to that state at a later
point.  So yes, you fetch the Order, detach it, call applyMemento() if
you have unsaved work, make additional changes to the order, call
createMemento(), and then put that in the session.


On Feb 11, 2008 11:44 AM, Martijn Lindhout <[EMAIL PROTECTED]> wrote:
> ok. never used memento, so I picked the book and read about it. I'm not sure
> how to implement this. When do I retrieve a memento from the order? And in
> the meantime, while adding and removing lines, is the Order updated and
> saved in the DB? If someone reads the database, will he see the intermediate
> changes?
>
> Or do I for each add/remove/change the user makes:
> - load the original order,
> - apply any memento's present in a temp space (session)
> - apply new changes
> - create a memento
> - discard changes to DB
>
>
> 2008/2/11, Scott Swank <[EMAIL PROTECTED]>:
> >
> > The order has one or more order mementos (pre/post editing) and each
> > order memento has a collection of orderline mementos.  The mementos
> > are completely opaque, and only the Order & OrderLine are able to
> > inspect them and extract their content -- perhaps by implementing them
> > a static inner classes with private mutators.
> >
> > On Feb 11, 2008 10:36 AM, Martijn Lindhout <[EMAIL PROTECTED]>
> > wrote:
> > > sounds interesting. Can you explain a bit more? How does this work for
> > > example in an Order-OrderLine situation where you edit an existing order
> > by
> > > adding and removing orderlines and finally do a commit or rollback?
> > >
> > > 2008/2/11, Scott Swank <[EMAIL PROTECTED]>:
> > >
> > > >
> > > > I suggest using the GoF memento pattern here.  You keep your changes
> > > > in one or more mementos, which can be kept in the session.  Then you
> > > > push the changes back to the domain model when you are happy with
> > > > them.  We use this approach for modifying hotel reservations --
> > > > particularly because we need to see the price before the change as
> > > > well as with the change to generate e-mails, faxes, etc.
> > > >
> > > >
> > > > On Feb 11, 2008 10:06 AM, Martijn Lindhout <[EMAIL PROTECTED]>
> > > > wrote:
> > > > > I agree that it is *easier*, but I got bored by duplicating my
> > domain
> > > > model
> > > > > in a DTO like structure. And that's cumbersome.
> > > > > I saw this hapening in several projects, and in the end we had two
> > > > almost
> > > > > equals object structures, one with rich behavior, and one with just
> > data
> > > > and
> > > > > structure.
> > > > >
> > > > > that's sad.... or not?
> > > > >
> > > > >
> > > > > 2008/2/11, Igor Vaynberg <[EMAIL PROTECTED]>:
> > > > > >
> > > > > > well, you will have to disconnect the hibernate session, and store
> > it
> > > > > > in the http session - or some other place. then your model would
> > have
> > > > > > to reconnect the session and pull the entity out of it. its much
> > > > > > easier to create a bean imho.
> > > > > >
> > > > > > -igor
> > > > > >
> > > > > >
> > > > > > On Feb 11, 2008 12:13 AM, Martijn Lindhout <
> > [EMAIL PROTECTED]>
> > > > > > wrote:
> > > > > > > because I use the domain objects directly,. without any DTO's, I
> > > > have to
> > > > > > use
> > > > > > > the long conversation pattern. That means I have to store the
> > domain
> > > > > > object
> > > > > > > somewhere in the session and let the loadabledetachable model
> > > > retrieve
> > > > > > it
> > > > > > > from there?
> > > > > > >
> > > > > > > 2008/2/11, Igor Vaynberg <[EMAIL PROTECTED]>:
> > > > > > >
> > > > > > > >
> > > > > > > > then you have to use a bean, and on confirm apply changes from
> > the
> > > > > > > > bean to the persistent entity. the only other alternative i
> > know
> > > > of is
> > > > > > > > to use the long conversation pattern which i am not really a
> > fan
> > > > of.
> > > > > > > >
> > > > > > > > -igor
> > > > > > > >
> > > > > > > >
> > > > > > > > On Feb 10, 2008 11:25 PM, Martijn Lindhout <
> > > > [EMAIL PROTECTED]>
> > > > > > > > wrote:
> > > > > > > > > ok, that makes sense.
> > > > > > > > >
> > > > > > > > > But what if I have a Hibernate persisted entity that I want
> > to
> > > > edit
> > > > > > in
> > > > > > > > > multiple actions? Say I have an order with orderlines, and I
> > > > want to
> > > > > > add
> > > > > > > > and
> > > > > > > > > remove them at will, and in the end save or rollback all the
> > > > > > changes? I
> > > > > > > > > don't want the intermediate add and removes propagate
> > directly
> > > > to
> > > > > > the
> > > > > > > > > database, only at 'confirm'.
> > > > > > > > >
> > > > > > > > >
> > > > > > > > > 2008/2/9, Igor Vaynberg <[EMAIL PROTECTED]>:
> > > > > > > > > >
> > > > > > > > > > the other constructor i presume is getting a persistent
> > > > entity? so
> > > > > > > > > > hibernate/jpa will flush state back to db at the end of
> > > > request,
> > > > > > thats
> > > > > > > > > > why that works.
> > > > > > > > > >
> > > > > > > > > > -igor
> > > > > > > > > >
> > > > > > > > > >
> > > > > > > > > > On Feb 9, 2008 11:08 AM, Martijn Lindhout <
> > > > > > [EMAIL PROTECTED]>
> > > > > > > > > > wrote:
> > > > > > > > > > > ok, thanx, that seems to work.
> > > > > > > > > > >
> > > > > > > > > > > And what about the other constructor, when editing an
> > > > existing
> > > > > > > > entity?
> > > > > > > > > > >
> > > > > > > > > > > 2008/2/9, Igor Vaynberg <[EMAIL PROTECTED]>:
> > > > > > > > > > >
> > > > > > > > > > > >
> > > > > > > > > > > > setModel(new CompoundPropertyModel(new
> > > > > > LoadableDetachableModel(){
> > > > > > > > > > > >
> > > > > > > > > > > > ^ that is bad because ldm is cleared between requests,
> > > > thats
> > > > > > why
> > > > > > > > its
> > > > > > > > > > > > called loadable
> > > > > > > > > > > >
> > > > > > > > > > > > just do this
> > > > > > > > > > > >
> > > > > > > > > > > > setModel(new CPM(new Employee()));
> > > > > > > > > > > >
> > > > > > > > > > > > -igor
> > > > > > > > > > > >
> > > > > > > > > > > >
> > > > > > > > > > > > On Feb 9, 2008 10:45 AM, Martijn Lindhout <
> > > > > > > > [EMAIL PROTECTED]>
> > > > > > > > > > > > wrote:
> > > > > > > > > > > > > Hi,
> > > > > > > > > > > > >
> > > > > > > > > > > > > I have a page, with those two constructors, the
> > first
> > > > for
> > > > > > > > editing a
> > > > > > > > > > new
> > > > > > > > > > > > > employee, the second for editing an existing.
> > > > > > > > > > > > >
> > > > > > > > > > > > >     public EditEmployee() {
> > > > > > > > > > > > >         setModel(new CompoundPropertyModel(new
> > > > > > > > > > > > LoadableDetachableModel(){
> > > > > > > > > > > > >             protected Object load() {
> > > > > > > > > > > > >                 return new Employee();
> > > > > > > > > > > > >             }
> > > > > > > > > > > > >         }));
> > > > > > > > > > > > >         init();
> > > > > > > > > > > > >     }
> > > > > > > > > > > > >
> > > > > > > > > > > > >     public EditEmployee(final Long id) {
> > > > > > > > > > > > >         setModel(new CompoundPropertyModel(new
> > > > > > > > > > > > LoadableDetachableModel(){
> > > > > > > > > > > > >             protected Object load() {
> > > > > > > > > > > > >                 return empRepository.getEmployee
> > (id);
> > > > > > > > > > > > >             }
> > > > > > > > > > > > >         }));
> > > > > > > > > > > > >         init();
> > > > > > > > > > > > >     }
> > > > > > > > > > > > >
> > > > > > > > > > > > > Because the Employee info is relatively much, I
> > separate
> > > > it
> > > > > > in
> > > > > > > > two
> > > > > > > > > > > > panels in
> > > > > > > > > > > > > a tabpanel. The hierarchy is: Page <- Form <-
> > > > TabbedPanel <-
> > > > > > > > several
> > > > > > > > > > > > Panels
> > > > > > > > > > > > > The problem is, that when I enter the formfields on
> > the
> > > > > > panels,
> > > > > > > > they
> > > > > > > > > > got
> > > > > > > > > > > > > valided, but then a new Employee instance is
> > created,
> > > > and
> > > > > > the
> > > > > > > > > > > > FormComponent
> > > > > > > > > > > > > values are not copied to the newly instantiated
> > > > Employee.
> > > > > > > > They're
> > > > > > > > > > null.
> > > > > > > > > > > > >
> > > > > > > > > > > > > I did some tests and it appears that on each panel
> > > > switch,
> > > > > > the
> > > > > > > > > > > > Model.load is
> > > > > > > > > > > > > called, and a new Employee is returned.
> > > > > > > > > > > > >
> > > > > > > > > > > > > What's going wrong here....
> > > > > > > > > > > > > --
> > > > > > > > > > > > > Martijn Lindhout
> > > > > > > > > > > > > JointEffort IT Services
> > > > > > > > > > > > > http://www.jointeffort.nl
> > > > > > > > > > > > > [EMAIL PROTECTED]
> > > > > > > > > > > > > +31 (0)6 18 47 25 29
> > > > > > > > > > > > >
> > > > > > > > > > > >
> > > > > > > > > > > >
> > > > > > > >
> > > > ---------------------------------------------------------------------
> > > > > > > > > > > > To unsubscribe, e-mail:
> > > > [EMAIL PROTECTED]
> > > > > > > > > > > > For additional commands, e-mail:
> > > > [EMAIL PROTECTED]
> > > > > > > > > > > >
> > > > > > > > > > > >
> > > > > > > > > > >
> > > > > > > > > > >
> > > > > > > > > > > --
> > > > > > > > > > >
> > > > > > > > > > > Martijn Lindhout
> > > > > > > > > > > JointEffort IT Services
> > > > > > > > > > > http://www.jointeffort.nl
> > > > > > > > > > > [EMAIL PROTECTED]
> > > > > > > > > > > +31 (0)6 18 47 25 29
> > > > > > > > > > >
> > > > > > > > > >
> > > > > > > > > >
> > > > > >
> > ---------------------------------------------------------------------
> > > > > > > > > > To unsubscribe, e-mail:
> > [EMAIL PROTECTED]
> > > > > > > > > > For additional commands, e-mail:
> > [EMAIL PROTECTED]
> > > > > > > > > >
> > > > > > > > > >
> > > > > > > > >
> > > > > > > > >
> > > > > > > > > --
> > > > > > > > > Martijn Lindhout
> > > > > > > > > JointEffort IT Services
> > > > > > > > > http://www.jointeffort.nl
> > > > > > > > > [EMAIL PROTECTED]
> > > > > > > > > +31 (0)6 18 47 25 29
> > > > > > > > >
> > > > > > > >
> > > > > > > >
> > > > ---------------------------------------------------------------------
> > > > > > > > To unsubscribe, e-mail: [EMAIL PROTECTED]
> > > > > > > > For additional commands, e-mail: [EMAIL PROTECTED]
> > > > > > > >
> > > > > > > >
> > > > > > >
> > > > > > >
> > > > > > > --
> > > > > > > Martijn Lindhout
> > > > > > > JointEffort IT Services
> > > > > > > http://www.jointeffort.nl
> > > > > > > [EMAIL PROTECTED]
> > > > > > > +31 (0)6 18 47 25 29
> > > > > > >
> > > > > >
> > > > > >
> > ---------------------------------------------------------------------
> > > > > > To unsubscribe, e-mail: [EMAIL PROTECTED]
> > > > > > For additional commands, e-mail: [EMAIL PROTECTED]
> > > > > >
> > > > > >
> > > > >
> > > > >
> > > > > --
> > > > >
> > > > > Martijn Lindhout
> > > > > JointEffort IT Services
> > > > > http://www.jointeffort.nl
> > > > > [EMAIL PROTECTED]
> > > > > +31 (0)6 18 47 25 29
> > > > >
> > > >
> > > >
> > > >
> > > > --
> > > > Scott Swank
> > > > reformed mathematician
> > > >
> > > > ---------------------------------------------------------------------
> > > > To unsubscribe, e-mail: [EMAIL PROTECTED]
> > > > For additional commands, e-mail: [EMAIL PROTECTED]
> > > >
> > > >
> > >
> > >
> > > --
> > > Martijn Lindhout
> > > JointEffort IT Services
> > > http://www.jointeffort.nl
> > > [EMAIL PROTECTED]
> > > +31 (0)6 18 47 25 29
> > >
> >
> >
> >
> > --
> > Scott Swank
> > reformed mathematician
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: [EMAIL PROTECTED]
> > For additional commands, e-mail: [EMAIL PROTECTED]
> >
> >
>
>
> --
> Martijn Lindhout
> JointEffort IT Services
> http://www.jointeffort.nl
> [EMAIL PROTECTED]
> +31 (0)6 18 47 25 29
>



-- 
Scott Swank
reformed mathematician

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

Reply via email to