[jboss-user] [Persistence, JBoss/CMP, Hibernate, Database] - Object persistence/rollback misconception
beligum
do-not-reply at jboss.com
Tue Jan 2 04:14:00 EST 2007
Hello everyone.
(Perhaps I should start with a little NY-wish, well, this be it)
I'm trying to wrap my thoughts around the entire ORM concept of JBoss (Hibernate+Seam in particular) and find it a little confusing, since my whole DB-background has been purely relational. I'd truly appreciate it if someone would take the time to explain it to me.
This is my case: I have a stateful session bean that creates a new mapped user-object (user data) and a new mapped loginEntity-object (login data) when someone tries to register on the register-page. I'm using the same bean as the ajax-callback bean to validate the entered data while registering.
When the user submits his/her data, the two entity beans are persisted to the DB, but sometimes, things go wrong with one of them, after the other one has been persisted successfully. I want to do a container-managed rollback on the successfully persisted bean, when the other one fails, using the @Rollback annotation, or any suitable other solution.
Please advise, here is the code:
| @Stateful
| @Scope(CONVERSATION)
| @Name("register")
| public class RegisterAction implements IRegister
| {
| @In(create=true) @Out
| private Person currentUser;
| @In(create=true) @Out
| private LoginEntity loginEntity;
|
| private boolean renderSuccess = false;
|
| ResourceBundle msg = GeneralSettings.getGeneralMessageBundle();
| ResourceBundle regMsg = GeneralSettings.getRegisterMessageBundle();
|
| @In
| private EntityManager em;
|
| //-----CONSTRUCTORS-----
| public RegisterAction()
| {
| }
|
| //-----AJAX CALL ENTRIES-----
| /*
| * Note: if a call is added, removed, also remove it from the register()
| * checklist.
| */
| public String getFirstNameCheck()
| {
| String curVal = currentUser.getFirstName();
| String retVal = null;
|
| if (curVal!=null && curVal.equals("")) {
| retVal = regMsg.getString("missingFirstName");
| }
|
| return retVal;
| }
| ... more ajax-callbacks ...
|
| //-----ACTIONS-----
| public boolean getRenderSuccess()
| {
| return this.renderSuccess;
| }
| @TransactionAttribute(TransactionAttributeType.REQUIRED)
| @Rollback(ifOutcome={"failure"})
| public String register()
| {
| if (this.hasErrors()) {
| return "failure";
| }
|
| //add the loginObject to the entity
| this.loginEntity.setEntity(this.currentUser);
|
| try {
| this.em.persist(this.currentUser);
| this.em.persist(this.loginEntity);
|
| this.renderSuccess = true;
| }
| catch (Exception e) {
| FacesMessages.instance().add("registerForm", regMsg.getString("registerPersistanceFailure"));
|
| return "failure";
| }
|
| return "success";
| }
| @Remove @Destroy
| public void destroy()
| {
| }
|
| //-----PRIVATE METHODS-----
| protected boolean hasErrors()
| {
| return !(
| getFirstNameCheck()==null &&
| getLastNameCheck()==null &&
| getAddressCheck()==null &&
| getPostalCodeCheck()==null &&
| getCityCheck()==null &&
| getTelephoneCheck()==null &&
| getEmailCheck()==null &&
| getEmailCheck()==null &&
| getPasswordCheck()==null
| );
| }
| }
|
View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=3997190#3997190
Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=3997190
More information about the jboss-user
mailing list