Improve and simplify OSGi Boot
[lgpl/argeo-commons.git] / org.argeo.security.ui.admin / src / org / argeo / security / ui / admin / internal / commands / UserTransactionHandler.java
index 6c9d1f995eb1898328cd69e781479f70d6f36dae..236584ca3fcf16bb0a68403f8d65c764b01bdb64 100644 (file)
@@ -18,7 +18,7 @@ package org.argeo.security.ui.admin.internal.commands;
 import javax.transaction.Status;
 import javax.transaction.UserTransaction;
 
-import org.argeo.ArgeoException;
+import org.argeo.cms.CmsException;
 import org.argeo.security.ui.admin.SecurityAdminPlugin;
 import org.argeo.security.ui.admin.internal.UiAdminUtils;
 import org.argeo.security.ui.admin.internal.UserAdminWrapper;
@@ -43,32 +43,44 @@ public class UserTransactionHandler extends AbstractHandler {
 
        public Object execute(ExecutionEvent event) throws ExecutionException {
                String commandId = event.getParameter(PARAM_COMMAND_ID);
-               UserTransaction userTransaction = userAdminWrapper.getUserTransaction();
+               final UserTransaction userTransaction = userAdminWrapper
+                               .getUserTransaction();
                try {
                        if (TRANSACTION_BEGIN.equals(commandId)) {
                                if (userTransaction.getStatus() != Status.STATUS_NO_TRANSACTION)
-                                       throw new ArgeoException("A transaction already exists");
+                                       throw new CmsException("A transaction already exists");
                                else
                                        userTransaction.begin();
                        } else if (TRANSACTION_COMMIT.equals(commandId)) {
                                if (userTransaction.getStatus() == Status.STATUS_NO_TRANSACTION)
-                                       throw new ArgeoException("No transaction.");
+                                       throw new CmsException("No transaction.");
                                else
                                        userTransaction.commit();
                        } else if (TRANSACTION_ROLLBACK.equals(commandId)) {
                                if (userTransaction.getStatus() == Status.STATUS_NO_TRANSACTION)
-                                       throw new ArgeoException("No transaction to rollback.");
+                                       throw new CmsException("No transaction to rollback.");
                                else {
                                        userTransaction.rollback();
                                        userAdminWrapper.notifyListeners(new UserAdminEvent(null,
                                                        UserAdminEvent.ROLE_CHANGED, null));
                                }
                        }
+
                        UiAdminUtils.notifyTransactionStateChange(userTransaction);
-               } catch (ArgeoException e) {
+                       // Try to remove invalid thread access errors when managing users.
+                       // HandlerUtil.getActivePart(event).getSite().getShell().getDisplay()
+                       // .asyncExec(new Runnable() {
+                       // @Override
+                       // public void run() {
+                       // UiAdminUtils
+                       // .notifyTransactionStateChange(userTransaction);
+                       // }
+                       // });
+
+               } catch (CmsException e) {
                        throw e;
                } catch (Exception e) {
-                       throw new ArgeoException("Unable to call " + commandId + " on "
+                       throw new CmsException("Unable to call " + commandId + " on "
                                        + userTransaction, e);
                }
                return null;