Long running conversations and entity managers, a bit confus
andrew.rw.robinson Apr 18, 2006 10:32 PMOkay, I am a bit confused how the EJB3 session beans + Seam + Seam managed entity managers work. I have looked at the examples, and none seem to do this.
What I am doing:
I am creating a registration site for a conference. The registration process is a wizard invovling 3-x number of steps. On the first step, I am creating a Registration object and adding it to my Conference object (collections mapped via one-to-many). The registration has several children objects called BreakoutSessionRegistration, and the Conference has several children of type BreakoutSession.
On the beginRegistration:
@Begin(join=true)
@TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED)
public String beginRegistration()
{
this.registration = new Registration();
this.registration.setConference(conference);
this.conference.getRegistrations().add(registration);
for (BreakoutSession bs : this.conference.getBreakoutSessions())
{
BreakoutSessionRegistration bsr = new BreakoutSessionRegistration();
bsr.setRegistration(registration);
bsr.setSession(bs);
bsr.setNumberOfAttendees((short)0);
bsr.getRegistration().getBreakoutRegistrations().add(bsr);
bsr.getSession().getRegistrations().add(bsr);
}
return "beginRegistration";
}
So now, I want the user to continue to edit this registration object and breakout sessions over several pages of a wizard.
I also want to have a cancel button:
@End
public String cancel()
{
// what to do here?
return "canceled";
}
I don't want anything committed to the database until my save() method is called. I also want the cancel button to undo its changes. In this same "action" class, I have a list of all the registrations for the current user and a list of all the conferences. I get this list before I ever being a conversation.
My beginRegistration method starts the conversation. The problem is that the conversation is dirty and therefore so is the list of my conversations. When the user cancels, I want to restore the "virgin" state of the conferences and registrations.
Is this possible? I tried entityManager.refresh(Object) on the conference, but it did not like the fact that the registration was not in the database (null identifier error).
I'm really having a hard time with getting a good grasp of how to use the extended persistence manager, long running conversations and the ability to cancel or save.
Thanks in advance, I'm really at a loss.
Andrew