[ 1801842 ] DB connection fix & improvements for concurrent threads
- more robust connection and transaction management when using wan and vpn profile.
This commit is contained in:
parent
20eeced360
commit
eb5f088788
|
@ -119,6 +119,11 @@ public class ServerBean implements SessionBean
|
||||||
int AD_Client_ID, int AD_Table_ID, int Record_ID, boolean force, String trxName)
|
int AD_Client_ID, int AD_Table_ID, int Record_ID, boolean force, String trxName)
|
||||||
{
|
{
|
||||||
log.info ("[" + m_no + "] Table=" + AD_Table_ID + ", Record=" + Record_ID);
|
log.info ("[" + m_no + "] Table=" + AD_Table_ID + ", Record=" + Record_ID);
|
||||||
|
if (trxName != null) {
|
||||||
|
if (Trx.get(trxName, false) == null) {
|
||||||
|
throw new RuntimeException("Transaction lost - " + trxName);
|
||||||
|
}
|
||||||
|
}
|
||||||
m_postCount++;
|
m_postCount++;
|
||||||
MAcctSchema[] ass = MAcctSchema.getClientAcctSchema(ctx, AD_Client_ID);
|
MAcctSchema[] ass = MAcctSchema.getClientAcctSchema(ctx, AD_Client_ID);
|
||||||
return Doc.postImmediate(ass, AD_Table_ID, Record_ID, force, trxName);
|
return Doc.postImmediate(ass, AD_Table_ID, Record_ID, force, trxName);
|
||||||
|
@ -138,9 +143,12 @@ public class ServerBean implements SessionBean
|
||||||
{
|
{
|
||||||
|
|
||||||
validateSecurityToken(token);
|
validateSecurityToken(token);
|
||||||
//log.finer(m_Context.getCallerPrincipal().getName() + " - " + info.getSql());
|
|
||||||
|
|
||||||
log.finer("[" + m_no + "]");
|
if (info.getTrxName() != null) {
|
||||||
|
if (Trx.get(info.getTrxName(), false) == null)
|
||||||
|
throw new RuntimeException("Transaction lost - " + info.getTrxName());
|
||||||
|
}
|
||||||
|
|
||||||
m_stmt_rowSetCount++;
|
m_stmt_rowSetCount++;
|
||||||
CPreparedStatement pstmt = new CPreparedStatement(info);
|
CPreparedStatement pstmt = new CPreparedStatement(info);
|
||||||
RowSet rowset = null;
|
RowSet rowset = null;
|
||||||
|
@ -174,8 +182,10 @@ public class ServerBean implements SessionBean
|
||||||
{
|
{
|
||||||
validateSecurityToken(token);
|
validateSecurityToken(token);
|
||||||
|
|
||||||
//log.finer(m_Context.getCallerPrincipal().getName() + " - " + info.getSql());
|
if (info.getTrxName() != null) {
|
||||||
log.finer("[" + m_no + "]");
|
if (Trx.get(info.getTrxName(), false) == null)
|
||||||
|
throw new RuntimeException("Transaction lost - " + info.getTrxName());
|
||||||
|
}
|
||||||
m_stmt_rowSetCount++;
|
m_stmt_rowSetCount++;
|
||||||
CStatement stmt = new CStatement(info);
|
CStatement stmt = new CStatement(info);
|
||||||
RowSet rowset = null;
|
RowSet rowset = null;
|
||||||
|
@ -209,8 +219,11 @@ public class ServerBean implements SessionBean
|
||||||
{
|
{
|
||||||
validateSecurityToken(token);
|
validateSecurityToken(token);
|
||||||
|
|
||||||
//log.finer(m_Context.getCallerPrincipal().getName() + " - " + info.getSql());
|
if (info.getTrxName() != null) {
|
||||||
log.finer("[" + m_no + "]");
|
if (Trx.get(info.getTrxName(), false) == null)
|
||||||
|
throw new RuntimeException("Transaction lost - " + info.getTrxName());
|
||||||
|
}
|
||||||
|
|
||||||
m_stmt_updateCount++;
|
m_stmt_updateCount++;
|
||||||
CStatement stmt = null;
|
CStatement stmt = null;
|
||||||
int retVal = -1;
|
int retVal = -1;
|
||||||
|
@ -255,6 +268,11 @@ public class ServerBean implements SessionBean
|
||||||
*/
|
*/
|
||||||
public int getNextID (int AD_Client_ID, String TableName, String trxName)
|
public int getNextID (int AD_Client_ID, String TableName, String trxName)
|
||||||
{
|
{
|
||||||
|
if (trxName != null) {
|
||||||
|
if (Trx.get(trxName, false) == null) {
|
||||||
|
throw new RuntimeException("Transaction lost - " + trxName);
|
||||||
|
}
|
||||||
|
}
|
||||||
int retValue = MSequence.getNextID (AD_Client_ID, TableName, trxName);
|
int retValue = MSequence.getNextID (AD_Client_ID, TableName, trxName);
|
||||||
log.finer("[" + m_no + "] " + TableName + " = " + retValue);
|
log.finer("[" + m_no + "] " + TableName + " = " + retValue);
|
||||||
m_nextSeqCount++;
|
m_nextSeqCount++;
|
||||||
|
@ -272,6 +290,11 @@ public class ServerBean implements SessionBean
|
||||||
*/
|
*/
|
||||||
public String getDocumentNo (int AD_Client_ID, String TableName, String trxName)
|
public String getDocumentNo (int AD_Client_ID, String TableName, String trxName)
|
||||||
{
|
{
|
||||||
|
if (trxName != null) {
|
||||||
|
if (Trx.get(trxName, false) == null) {
|
||||||
|
throw new RuntimeException("Transaction lost - " + trxName);
|
||||||
|
}
|
||||||
|
}
|
||||||
m_nextSeqCount++;
|
m_nextSeqCount++;
|
||||||
String dn = MSequence.getDocumentNo (AD_Client_ID, TableName, trxName);
|
String dn = MSequence.getDocumentNo (AD_Client_ID, TableName, trxName);
|
||||||
if (dn == null) // try again
|
if (dn == null) // try again
|
||||||
|
@ -289,6 +312,11 @@ public class ServerBean implements SessionBean
|
||||||
*/
|
*/
|
||||||
public String getDocumentNo (int C_DocType_ID, String trxName)
|
public String getDocumentNo (int C_DocType_ID, String trxName)
|
||||||
{
|
{
|
||||||
|
if (trxName != null) {
|
||||||
|
if (Trx.get(trxName, false) == null) {
|
||||||
|
throw new RuntimeException("Transaction lost - " + trxName);
|
||||||
|
}
|
||||||
|
}
|
||||||
m_nextSeqCount++;
|
m_nextSeqCount++;
|
||||||
String dn = MSequence.getDocumentNo (C_DocType_ID, trxName);
|
String dn = MSequence.getDocumentNo (C_DocType_ID, trxName);
|
||||||
if (dn == null) // try again
|
if (dn == null) // try again
|
||||||
|
@ -307,10 +335,16 @@ public class ServerBean implements SessionBean
|
||||||
*/
|
*/
|
||||||
public ProcessInfo process (Properties ctx, ProcessInfo pi)
|
public ProcessInfo process (Properties ctx, ProcessInfo pi)
|
||||||
{
|
{
|
||||||
|
|
||||||
m_processCount++;
|
m_processCount++;
|
||||||
|
|
||||||
// Start Process
|
// Start Process
|
||||||
String trxName = pi.getTransactionName();
|
String trxName = pi.getTransactionName();
|
||||||
|
if (trxName != null) {
|
||||||
|
if (Trx.get(trxName, false) == null) {
|
||||||
|
throw new RuntimeException("Transaction lost - " + trxName);
|
||||||
|
}
|
||||||
|
}
|
||||||
if (trxName == null) trxName = Trx.createTrxName("ServerPrc");
|
if (trxName == null) trxName = Trx.createTrxName("ServerPrc");
|
||||||
Trx trx = Trx.get(trxName, true);
|
Trx trx = Trx.get(trxName, true);
|
||||||
ProcessUtil.startJavaProcess(ctx, pi, trx);
|
ProcessUtil.startJavaProcess(ctx, pi, trx);
|
||||||
|
@ -348,6 +382,11 @@ public class ServerBean implements SessionBean
|
||||||
public boolean paymentOnline (Properties ctx,
|
public boolean paymentOnline (Properties ctx,
|
||||||
int C_Payment_ID, int C_PaymentProcessor_ID, String trxName)
|
int C_Payment_ID, int C_PaymentProcessor_ID, String trxName)
|
||||||
{
|
{
|
||||||
|
if (trxName != null) {
|
||||||
|
if (Trx.get(trxName, false) == null) {
|
||||||
|
throw new RuntimeException("Transaction lost - " + trxName);
|
||||||
|
}
|
||||||
|
}
|
||||||
MPayment payment = new MPayment (ctx, C_Payment_ID, trxName);
|
MPayment payment = new MPayment (ctx, C_Payment_ID, trxName);
|
||||||
MPaymentProcessor mpp = new MPaymentProcessor (ctx, C_PaymentProcessor_ID, null);
|
MPaymentProcessor mpp = new MPaymentProcessor (ctx, C_PaymentProcessor_ID, null);
|
||||||
log.info ("[" + m_no + "] " + payment + " - " + mpp);
|
log.info ("[" + m_no + "] " + payment + " - " + mpp);
|
||||||
|
@ -567,6 +606,56 @@ public class ServerBean implements SessionBean
|
||||||
} // getStatus
|
} // getStatus
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set savepoint
|
||||||
|
* @ejb.interface-method view-type="both"
|
||||||
|
* @param trxName
|
||||||
|
* @param savePointName
|
||||||
|
* @return true if success, false otherwise
|
||||||
|
*/
|
||||||
|
public SavepointVO setSavepoint(String trxName, String savePointName)
|
||||||
|
{
|
||||||
|
Trx trx = Trx.get(trxName, false);
|
||||||
|
if (trx != null)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Savepoint sp = null;
|
||||||
|
if (savePointName != null)
|
||||||
|
sp = trx.getConnection().setSavepoint(savePointName);
|
||||||
|
else
|
||||||
|
sp = trx.getConnection().setSavepoint();
|
||||||
|
return new SavepointVO(sp);
|
||||||
|
}
|
||||||
|
catch (SQLException e)
|
||||||
|
{
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Start remote transaction
|
||||||
|
* @ejb.interface-method view-type="both"
|
||||||
|
* @param trxName
|
||||||
|
*/
|
||||||
|
public void startTransaction(String trxName) {
|
||||||
|
Trx trx = Trx.get(trxName, true);
|
||||||
|
trx.start();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Close remote transaction
|
||||||
|
* @ejb.interface-method view-type="both"
|
||||||
|
* @param trxName
|
||||||
|
*/
|
||||||
|
public void closeTransaction(String trxName) {
|
||||||
|
Trx trx = Trx.get(trxName, false);
|
||||||
|
if (trx != null)
|
||||||
|
trx.close();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Commit the named transaction on server
|
* Commit the named transaction on server
|
||||||
* @ejb.interface-method view-type="both"
|
* @ejb.interface-method view-type="both"
|
||||||
|
@ -623,6 +712,35 @@ public class ServerBean implements SessionBean
|
||||||
return success;
|
return success;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Rollback the named transaction on server
|
||||||
|
* @ejb.interface-method view-type="both"
|
||||||
|
* @param trxName
|
||||||
|
* @return true if success, false otherwise
|
||||||
|
*/
|
||||||
|
public boolean rollback(String trxName, SavepointVO savePoint)
|
||||||
|
{
|
||||||
|
boolean success = false;
|
||||||
|
Trx trx = Trx.get(trxName, false);
|
||||||
|
if (trx != null)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
trx.getConnection().rollback(savePoint);
|
||||||
|
success = true;
|
||||||
|
}
|
||||||
|
catch (SQLException e)
|
||||||
|
{
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
trx.close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return success;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Execute db proces on server
|
* Execute db proces on server
|
||||||
* @ejb.interface-method view-type="both"
|
* @ejb.interface-method view-type="both"
|
||||||
|
@ -636,8 +754,12 @@ public class ServerBean implements SessionBean
|
||||||
validateSecurityToken(token);
|
validateSecurityToken(token);
|
||||||
|
|
||||||
Trx trx = null;
|
Trx trx = null;
|
||||||
if (trxName != null)
|
if (trxName != null) {
|
||||||
trx = Trx.get(trxName, true);
|
trx = Trx.get(trxName, false);
|
||||||
|
if (trx == null) {
|
||||||
|
throw new RuntimeException("Transaction lost - " + trxName);
|
||||||
|
}
|
||||||
|
}
|
||||||
ProcessUtil.startDatabaseProcedure(processInfo, procedureName, trx);
|
ProcessUtil.startDatabaseProcedure(processInfo, procedureName, trx);
|
||||||
return processInfo;
|
return processInfo;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue