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(a)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);
Show replies by thread