[ 1854603 ] Prepare method is being called twice

- trx management fix.
This commit is contained in:
Heng Sin Low 2008-02-13 04:22:10 +00:00
parent 2beae9081c
commit c6e4203274
2 changed files with 41 additions and 22 deletions

View File

@ -278,8 +278,8 @@ public class MWFActivity extends X_AD_WF_Activity implements Runnable
// Inform Process
if (m_process == null)
m_process = new MWFProcess (getCtx(), getAD_WF_Process_ID(),
m_trx == null ? null : m_trx.getTrxName());
m_process.checkActivities(m_trx == null ? null : m_trx.getTrxName(), m_po);
this.get_TrxName());
m_process.checkActivities(this.get_TrxName(), m_po);
}
else
{
@ -735,18 +735,21 @@ public class MWFActivity extends X_AD_WF_Activity implements Runnable
{
log.info ("Node=" + getNode());
m_newValue = null;
if (!m_state.isValidAction(StateEngine.ACTION_Start))
{
setTextMsg("State=" + getWFState() + " - cannot start");
setWFState(StateEngine.STATE_Terminated);
return;
}
//
setWFState(StateEngine.STATE_Running);
m_trx = Trx.get(Trx.createTrxName("WF"), true);
String trxName = Trx.createTrxName("WF");
m_trx = Trx.get(trxName, true);
//
try
{
if (!m_state.isValidAction(StateEngine.ACTION_Start))
{
setTextMsg("State=" + getWFState() + " - cannot start");
setWFState(StateEngine.STATE_Terminated);
return;
}
//
setWFState(StateEngine.STATE_Running);
if (getNode().get_ID() == 0)
{
setTextMsg("Node not found - AD_WF_Node_ID=" + getAD_WF_Node_ID());
@ -766,9 +769,7 @@ public class MWFActivity extends X_AD_WF_Activity implements Runnable
// teo_sarca [ 1708835 ]
// Reason: if the commit fails the document should be put in Invalid state
try {
m_trx.commit(true);
m_trx.close();
m_trx = null;
m_trx.commit(true);
} catch (Exception e) {
// If we have a DocStatus, change it to Invalid, and throw the exception to the next level
if (m_docStatus != null)
@ -787,8 +788,7 @@ public class MWFActivity extends X_AD_WF_Activity implements Runnable
log.log(Level.WARNING, "" + getNode(), e);
/**** Trx Rollback ****/
m_trx.rollback();
m_trx.close();
m_trx = null;
//
if (e.getCause() != null)
log.log(Level.WARNING, "Cause", e.getCause());
@ -807,7 +807,14 @@ public class MWFActivity extends X_AD_WF_Activity implements Runnable
m_po.save();
}
}
m_trx = null;
finally
{
if (m_trx != null)
{
m_trx.close();
}
m_trx = null;
}
} // run

View File

@ -133,6 +133,17 @@ public class MWFProcess extends X_AD_WF_Process
* @return array of activities
*/
public MWFActivity[] getActivities (boolean requery, boolean onlyActive)
{
return getActivities(requery, onlyActive, get_TrxName());
}
/**
* Get active Activities of Process
* @param requery if true requery
* @param onlyActive only active activities
* @return array of activities
*/
public MWFActivity[] getActivities (boolean requery, boolean onlyActive, String trxName)
{
if (!requery && m_activities != null)
return m_activities;
@ -145,11 +156,11 @@ public class MWFProcess extends X_AD_WF_Process
sql += " AND Processed='N'";
try
{
pstmt = DB.prepareStatement (sql, get_TrxName());
pstmt = DB.prepareStatement (sql, trxName);
pstmt.setInt (1, getAD_WF_Process_ID());
rs = pstmt.executeQuery ();
while (rs.next ())
list.add (new MWFActivity(getCtx(), rs, get_TrxName()));
list.add (new MWFActivity(getCtx(), rs, trxName));
}
catch (Exception e)
{
@ -241,7 +252,7 @@ public class MWFProcess extends X_AD_WF_Process
if (m_state.isClosed())
return;
//
MWFActivity[] activities = getActivities (true, true); // requery active
MWFActivity[] activities = getActivities (true, true, trxName); // requery active
String closedState = null;
boolean suspended = false;
boolean running = false;
@ -253,7 +264,7 @@ public class MWFProcess extends X_AD_WF_Process
// Completed - Start Next
if (activityState.isCompleted())
{
if (startNext (activity, activities, lastPO))
if (startNext (activity, activities, lastPO, trxName))
continue;
}
//
@ -310,7 +321,7 @@ public class MWFProcess extends X_AD_WF_Process
* @param activities all activities
* @return true if there is a next activity
*/
private boolean startNext (MWFActivity last, MWFActivity[] activities, PO lastPO)
private boolean startNext (MWFActivity last, MWFActivity[] activities, PO lastPO, String trxName)
{
log.fine("Last=" + last);
// transitions from the last processed node
@ -340,6 +351,7 @@ public class MWFProcess extends X_AD_WF_Process
// Start new Activity...
MWFActivity activity = new MWFActivity (this, transitions[i].getAD_WF_Next_ID(), lastPO);
activity.set_TrxName(trxName);
activity.run();
// only the first valid if XOR