java/code/src/com/redhat/rhn/common/messaging/ActionExecutor.java | 1 java/code/src/com/redhat/rhn/frontend/events/AbstractDatabaseAction.java | 29 ++++++---- java/code/src/com/redhat/rhn/frontend/events/CloneErrataAction.java | 1 java/code/src/com/redhat/rhn/frontend/events/CloneErrataEvent.java | 16 +++-- java/code/src/com/redhat/rhn/frontend/events/SsmUpgradePackagesAction.java | 2 5 files changed, 31 insertions(+), 18 deletions(-)
New commits: commit 051fbedd31552ba0458215c65dd6dbbd8d2ad4b2 Author: Justin Sherrill jsherril@redhat.com Date: Fri Oct 30 14:25:15 2009 -0400
531091 - fixing issue that would result in odd hibernate errors due to hibernate objects being used across hibernate sessions
Also improved the abstractDatabaseAction rollback if an action failed
diff --git a/java/code/src/com/redhat/rhn/common/messaging/ActionExecutor.java b/java/code/src/com/redhat/rhn/common/messaging/ActionExecutor.java index f5448a5..900cee1 100644 --- a/java/code/src/com/redhat/rhn/common/messaging/ActionExecutor.java +++ b/java/code/src/com/redhat/rhn/common/messaging/ActionExecutor.java @@ -75,6 +75,7 @@ class ActionExecutor implements Runnable { } catch (Throwable t) { LOG.error(t); + t.printStackTrace(); } } } diff --git a/java/code/src/com/redhat/rhn/frontend/events/AbstractDatabaseAction.java b/java/code/src/com/redhat/rhn/frontend/events/AbstractDatabaseAction.java index 5fabd58..3aceb12 100644 --- a/java/code/src/com/redhat/rhn/frontend/events/AbstractDatabaseAction.java +++ b/java/code/src/com/redhat/rhn/frontend/events/AbstractDatabaseAction.java @@ -42,26 +42,37 @@ public abstract class AbstractDatabaseAction implements MessageAction {
/** {@inheritDoc} */ public void execute(EventMessage msg) { - doExecute(msg); - - handleTransactions(); + boolean commit = true; + try { + doExecute(msg); + } + catch (Exception e) { + commit = false; + e.printStackTrace(); + } + finally { + handleTransactions(commit); + } }
+ /** * Commits the current thread transaction, as well as close the Hibernate session. * <p/> * Note that this call <em>MUST</em> take place for any database operations done in * a message queue action for the transaction to be committed. */ - protected void handleTransactions() { + protected void handleTransactions(boolean commit) { boolean committed = false;
try { - HibernateFactory.commitTransaction(); - committed = true; - - if (log.isDebugEnabled()) { - log.debug("Transaction committed"); + if (commit) { + HibernateFactory.commitTransaction(); + committed = true; + + if (log.isDebugEnabled()) { + log.debug("Transaction committed"); + } } } catch (HibernateException e) { diff --git a/java/code/src/com/redhat/rhn/frontend/events/CloneErrataAction.java b/java/code/src/com/redhat/rhn/frontend/events/CloneErrataAction.java index f1f19c1..26b5ca4 100644 --- a/java/code/src/com/redhat/rhn/frontend/events/CloneErrataAction.java +++ b/java/code/src/com/redhat/rhn/frontend/events/CloneErrataAction.java @@ -80,7 +80,6 @@ public class CloneErrataAction } ErrataCacheManager.insertCacheForChannelErrata(cids, errata); } - handleTransactions(); }
diff --git a/java/code/src/com/redhat/rhn/frontend/events/CloneErrataEvent.java b/java/code/src/com/redhat/rhn/frontend/events/CloneErrataEvent.java index 540f3af..f194ebd 100644 --- a/java/code/src/com/redhat/rhn/frontend/events/CloneErrataEvent.java +++ b/java/code/src/com/redhat/rhn/frontend/events/CloneErrataEvent.java @@ -17,7 +17,9 @@ package com.redhat.rhn.frontend.events; import com.redhat.rhn.common.hibernate.HibernateFactory; import com.redhat.rhn.common.messaging.EventDatabaseMessage; import com.redhat.rhn.domain.channel.Channel; +import com.redhat.rhn.domain.channel.ChannelFactory; import com.redhat.rhn.domain.user.User; +import com.redhat.rhn.domain.user.UserFactory;
import org.hibernate.Transaction;
@@ -33,10 +35,10 @@ public class CloneErrataEvent implements EventDatabaseMessage {
- private Channel chan; + private Long chanId; private Collection<Long> errata; private Transaction txn; - private User user; + private Long userId;
/** * constructor @@ -45,9 +47,9 @@ public class CloneErrataEvent implements EventDatabaseMessage { * @param userIn the user */ public CloneErrataEvent(Channel chanIn, Collection<Long> errataIn, User userIn) { - chan = chanIn; + chanId = chanIn.getId(); errata = errataIn; - user = userIn; + userId = userIn.getId(); this.txn = HibernateFactory.getSession().getTransaction(); }
@@ -72,7 +74,7 @@ public class CloneErrataEvent implements EventDatabaseMessage { * @return Returns the chan. */ public Channel getChan() { - return chan; + return ChannelFactory.lookupById(chanId); }
@@ -80,7 +82,7 @@ public class CloneErrataEvent implements EventDatabaseMessage { * @param chanIn The chan to set. */ public void setChan(Channel chanIn) { - this.chan = chanIn; + this.chanId = chanIn.getId(); }
@@ -104,7 +106,7 @@ public class CloneErrataEvent implements EventDatabaseMessage { * @return Returns the user. */ public User getUser() { - return user; + return UserFactory.lookupById(userId); }
diff --git a/java/code/src/com/redhat/rhn/frontend/events/SsmUpgradePackagesAction.java b/java/code/src/com/redhat/rhn/frontend/events/SsmUpgradePackagesAction.java index af22b5b..99ef025 100644 --- a/java/code/src/com/redhat/rhn/frontend/events/SsmUpgradePackagesAction.java +++ b/java/code/src/com/redhat/rhn/frontend/events/SsmUpgradePackagesAction.java @@ -72,7 +72,7 @@ public class SsmUpgradePackagesAction extends AbstractDatabaseAction {
// Explicitly call handle transactions here so the operation creation above // is persisted before the potentially long running logic below - handleTransactions(); + handleTransactions(true);
try { scheduleUpgrades(user, event);
spacewalk-commits@lists.fedorahosted.org