[gatein-commits] gatein SVN: r9330 - epp/portal/branches/EPP_5_2_2_GA_BZ1180232/component/identity/src/main/java/org/exoplatform/services/organization/idm.

do-not-reply at jboss.org do-not-reply at jboss.org
Fri Jan 9 05:00:30 EST 2015


Author: mputz
Date: 2015-01-09 05:00:30 -0500 (Fri, 09 Jan 2015)
New Revision: 9330

Modified:
   epp/portal/branches/EPP_5_2_2_GA_BZ1180232/component/identity/src/main/java/org/exoplatform/services/organization/idm/AbstractDAOImpl.java
   epp/portal/branches/EPP_5_2_2_GA_BZ1180232/component/identity/src/main/java/org/exoplatform/services/organization/idm/PicketLinkIDMOrganizationServiceImpl.java
Log:
Backport fixes related to GTNPORTAL-2928

Modified: epp/portal/branches/EPP_5_2_2_GA_BZ1180232/component/identity/src/main/java/org/exoplatform/services/organization/idm/AbstractDAOImpl.java
===================================================================
--- epp/portal/branches/EPP_5_2_2_GA_BZ1180232/component/identity/src/main/java/org/exoplatform/services/organization/idm/AbstractDAOImpl.java	2015-01-09 09:22:22 UTC (rev 9329)
+++ epp/portal/branches/EPP_5_2_2_GA_BZ1180232/component/identity/src/main/java/org/exoplatform/services/organization/idm/AbstractDAOImpl.java	2015-01-09 10:00:30 UTC (rev 9330)
@@ -67,6 +67,8 @@
          {
             log.warn("Unable to set Transaction status to be rollback only", tre);
          }
+      } else {
+         orgService.recoverFromIDMError();
       }
    }
 }

Modified: epp/portal/branches/EPP_5_2_2_GA_BZ1180232/component/identity/src/main/java/org/exoplatform/services/organization/idm/PicketLinkIDMOrganizationServiceImpl.java
===================================================================
--- epp/portal/branches/EPP_5_2_2_GA_BZ1180232/component/identity/src/main/java/org/exoplatform/services/organization/idm/PicketLinkIDMOrganizationServiceImpl.java	2015-01-09 09:22:22 UTC (rev 9329)
+++ epp/portal/branches/EPP_5_2_2_GA_BZ1180232/component/identity/src/main/java/org/exoplatform/services/organization/idm/PicketLinkIDMOrganizationServiceImpl.java	2015-01-09 10:00:30 UTC (rev 9330)
@@ -30,6 +30,7 @@
 import org.exoplatform.services.organization.BaseOrganizationService;
 import org.gatein.common.logging.Logger;
 import org.gatein.common.logging.LoggerFactory;
+import org.picketlink.idm.api.Transaction;
 import org.picocontainer.Startable;
 
 import javax.naming.InitialContext;
@@ -197,14 +198,21 @@
          {
             if (idmService_.getIdentitySession().getTransaction().isActive())
             {
-               idmService_.getIdentitySession().save();
+               try {
+                  if (idmService_.getIdentitySession().getTransaction().isActive()) {
+                     idmService_.getIdentitySession().save();
+                  }
+               } catch (Exception e) {
+                  log.error(e.getMessage(), e);
+                  recoverFromIDMError();
+               }
             }
          }
 
       }
       catch (Exception e)
       {
-         e.printStackTrace();
+         log.error(e.getMessage(), e);
       }
    }
 
@@ -224,16 +232,38 @@
          }            
          else
          {
-            idmService_.getIdentitySession().getTransaction().commit();
+            try {
+               if (idmService_.getIdentitySession().getTransaction().isActive()) {
+                  idmService_.getIdentitySession().getTransaction().commit();
+               }
+            } catch (Exception e) {
+               log.error(e.getMessage(), e);
+               recoverFromIDMError();
+            }
          }
       }
       catch (Exception e)
       {
-         e.printStackTrace();
+         log.error(e.getMessage(), e);
       }
    }
 
 
+    // Should be used only for non-JTA environment
+    public void recoverFromIDMError() {
+        try {
+            // We need to restart Hibernate transaction if it's available. First rollback old one and then start new one
+            Transaction idmTransaction = idmService_.getIdentitySession().getTransaction();
+            if (idmTransaction.isActive()) {
+                idmTransaction.rollback();
+                idmTransaction.start();
+                log.info("IDM error recovery finished. Old transaction has been rolled-back and new transaction has been started");
+            }
+        } catch (Exception e1) {
+            log.warn("Error during recovery of old error", e1);
+        }
+    }
+
    public Config getConfiguration()
    {
       return configuration;



More information about the gatein-commits mailing list