ok, so the memento's are not incremental? Then only one memento should be
enough to restore the order back to the state the user created. That sound
good. I'll try that.
thanx
2008/2/11, Scott Swank <[EMAIL PROTECTED]>:
>
> 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]
>
>
--
Martijn Lindhout
JointEffort IT Services
http://www.jointeffort.nl
[EMAIL PROTECTED]
+31 (0)6 18 47 25 29