Clerk Class
.NET Framework 3.0
Writes records of transactional actions to a log.
Namespace: System.EnterpriseServices.CompensatingResourceManager
Assembly: System.EnterpriseServices (in system.enterpriseservices.dll)
Assembly: System.EnterpriseServices (in system.enterpriseservices.dll)
The following code example demonstrates the use of this class.
// A CRM Worker [Transaction] public class Account : ServicedComponent { // A data member for the account file name. private string filename; public string Filename { get { return(filename); } set { filename = value; } } // A boolean data member that determines whether to commit or abort the transaction. private bool commit; public bool AllowCommit { get { return(commit); } set { commit = value; } } // Debit the account, public void DebitAccount (int ammount) { // Create a new clerk using the AccountCompensator class. Clerk clerk = new Clerk(typeof(AccountCompensator), "An account transaction compensator", CompensatorOptions.AllPhases); // Create a record of previous account status, and deliver it to the clerk. int balance = AccountManager.ReadAccountBalance(filename); Object[] record = new Object[2]; record[0] = filename; record[1] = balance; clerk.WriteLogRecord(record); clerk.ForceLog(); // Perform the transaction balance -= ammount; AccountManager.WriteAccountBalance(filename, balance); // Commit or abort the transaction if (commit) { ContextUtil.SetComplete(); } else { ContextUtil.SetAbort(); } } }
// A CRM Worker
/** @attribute Transaction()
*/
public class Account extends ServicedComponent
{
// A data member for the account file name.
/** @property
*/
private String fileName;
public String get_fileName()
{
return fileName;
} //get_fileName
public void set_fileName(String value)
{
fileName = value;
} //set_fileName
// A boolean data member that determines whether to commit or
// abort the transaction.
private boolean commit;
/** @property
*/
public boolean get_AllowCommit()
{
return commit;
} //get_AllowCommit
/** @property
*/
public void set_AllowCommit(boolean value)
{
commit = value;
} //set_AllowCommit
// Debit the account,
public void DebitAccount(int ammount)
{
// Create a new clerk using the AccountCompensator class.
Clerk clerk = new Clerk(AccountCompensator.class.ToType(),
"An account transaction compensator",
CompensatorOptions.AllPhases);
// Create a record of previous account status, and deliver
// it to the clerk.
Console.WriteLine("filename = " + fileName);
int balance = AccountManager.ReadAccountBalance(fileName);
Object record[] = new Object[2];
record.set_Item(0, fileName);
record.set_Item(1,(Int32)balance);
clerk.WriteLogRecord(record);
clerk.ForceLog();
// Perform the transaction
balance -= ammount;
AccountManager.WriteAccountBalance(fileName, balance);
// Commit or abort the transaction
if (commit) {
ContextUtil.SetComplete();
}
else {
ContextUtil.SetAbort();
}
} //DebitAccount
} //Account
The following code example demonstrates the corresponding Compensator class.
using System; public class CrmClient { public static void Main () { // Create a new account object. The object is created in a COM+ server application. Account account = new Account(); // Transactionally debit the account. try { account.Filename = System.IO.Path.GetFullPath("JohnDoe"); account.AllowCommit = true; account.DebitAccount(3); } finally { account.Dispose(); } } }
import System.*;
public class CrmClient
{
public static void main(String[] args)
{
// Create a new account object. The object is created in a COM+
// server application.
Account account = new Account();
// Transactionally debit the account.
try {
account.set_fileName(System.IO.Path.GetFullPath("JohnDoe"));
account.set_AllowCommit(true);
account.DebitAccount(3);
}
finally {
account.Dispose();
}
} //main
} //CrmClient
Community Additions
ADD
Show: