Compensator クラスとは? わかりやすく解説

Compensator クラス

すべての CRM (Compensating Resource Manager) Compensator の基本クラス表します

名前空間: System.EnterpriseServices.CompensatingResourceManager
アセンブリ: System.EnterpriseServices (system.enterpriseservices.dll 内)
構文構文

Public Class Compensator
    Inherits ServicedComponent
public class Compensator : ServicedComponent
public ref class Compensator : public
 ServicedComponent
public class Compensator extends ServicedComponent
public class Compensator extends
 ServicedComponent
解説解説
使用例使用例

このクラス使用方法コード例次に示します

' A CRM Compensator

Public Class AccountCompensator
    Inherits Compensator
    
    Private receivedPrepareRecord As Boolean
 = False
    
    
    Public Overrides Sub
 BeginPrepare() 
    
    End Sub 'BeginPrepare
    
    ' nothing to do
    Public Overrides Function
 PrepareRecord(ByVal log As LogRecord) As
 Boolean 
        
        ' Check the validity of the record.
        If log Is Nothing
 Then
            Return True
        End If
        Dim record As [Object]() = log.Record
        
        If record Is Nothing
 Then
            Return True
        End If
        If record.Length <> 2 Then
            Return True
        End If 
        ' The record is valid.
        receivedPrepareRecord = True
        Return False
    
    End Function 'PrepareRecord
    
    Public Overrides Function
 EndPrepare() As Boolean 
        ' Allow the transaction to proceed onlyif we have received a
 prepare record.
        If receivedPrepareRecord Then
            Return True
        Else
            Return False
        End If
    
    End Function 'EndPrepare
    
    Public Overrides Sub
 BeginCommit(ByVal commit As Boolean)
 
    
    End Sub 'BeginCommit
    
    ' nothing to do
    Public Overrides Function
 CommitRecord(ByVal log As LogRecord) As
 Boolean 
        ' nothing to do
        Return False
    
    End Function 'CommitRecord
    
    Public Overrides Sub
 EndCommit() 
    
    End Sub 'EndCommit
    
    ' nothing to do
    Public Overrides Sub
 BeginAbort(ByVal abort As Boolean)
 
    
    End Sub 'BeginAbort
    
    ' nothing to do
    Public Overrides Function
 AbortRecord(ByVal log As LogRecord) As
 Boolean 
        
        ' Check the validity of the record.
        If log Is Nothing
 Then
            Return True
        End If
        Dim record As [Object]() = log.Record
        
        If record Is Nothing
 Then
            Return True
        End If
        If record.Length <> 2 Then
            Return True
        End If 
        ' Extract old account data from the record.
        Dim filename As String
 = CStr(record(0))
        Dim balance As Integer
 = Fix(record(1))
        
        ' Restore the old state of the account.
        AccountManager.WriteAccountBalance(filename, balance)
        
        Return False
    
    End Function 'AbortRecord
    
    Public Overrides Sub
 EndAbort() 
    
    End Sub 'EndAbort
End Class 'AccountCompensator
 ' nothing to do
// A CRM Compensator
public class AccountCompensator : Compensator
{

    private bool receivedPrepareRecord = false;

    public override void BeginPrepare ()
    {
        // nothing to do
    }

    public override bool PrepareRecord (LogRecord
 log)
    {

        // Check the validity of the record.
        if (log == null) return(true);
        Object[] record = log.Record as Object[];
        if (record == null) return(true);
        if (record.Length != 2) return(true);

        // The record is valid.
        receivedPrepareRecord = true;
        return(false);              
    }

    public override bool EndPrepare ()
    {
        // Allow the transaction to proceed onlyif we have received
 a prepare record.
        if (receivedPrepareRecord)
        {
            return(true);
        }
        else
        {
            return(false);
        }
    }

    public override void BeginCommit (bool
 commit)
    {
        // nothing to do
    }

    public override bool CommitRecord (LogRecord
 log)
    {
        // nothing to do
        return(false);
    }

    public override void EndCommit ()
    {
        // nothing to do
    }

    public override void BeginAbort (bool
 abort)
    {
        // nothing to do
    }

    public override bool AbortRecord (LogRecord
 log)
    {

        // Check the validity of the record.
        if (log == null) return(true);
        Object[] record = log.Record as Object[];
        if (record == null) return(true);
        if (record.Length != 2) return(true);

        // Extract old account data from the record.
        string filename = (string) record[0];
        int balance = (int) record[1];
 
        // Restore the old state of the account.
        AccountManager.WriteAccountBalance(filename, balance);

        return(false);
    }

    public override void EndAbort ()
    {
        // nothing to do
    }    

}
// A CRM Compensator
public ref class AccountCompensator : public
 Compensator
{
private:
    bool receivedPrepareRecord;

public:
    AccountCompensator()
    {
        receivedPrepareRecord = false;
    } 

public:
    virtual void BeginPrepare() override 
    {
        // nothing to do
    }

public:
    virtual bool PrepareRecord(LogRecord^ log) override 
    {

        // Check the validity of the record.
        if (log == nullptr)
        {
            return false;
        }
        array<Object^>^ record = dynamic_cast<array<Object^>^>(log->Record);
        if (record == nullptr)
        {
            return false;
        }
        if (record->Length != 2)
        {
            return false;
        }

        // The record is valid.
        receivedPrepareRecord = true;
        return true;              
    }

public:
    virtual bool EndPrepare() override
    {
        // Allow the transaction to proceed onlyif we have received
 a prepare
        // record.
        if (receivedPrepareRecord)
        {
            return true;
        }
        else
        {
            return false;
        }
    }

public:
    virtual void BeginCommit(bool commit) override
    {
        // nothing to do
    }

public:
    virtual bool CommitRecord(LogRecord^ log) override
    {
        // nothing to do
        return(false);
    }

public:
    virtual void EndCommit() override
    {
        // nothing to do
    }

public:
    virtual void BeginAbort(bool abort) override
    {
        // nothing to do
    }

public:
    virtual bool AbortRecord(LogRecord^ log) override
    {

        // Check the validity of the record.
        if (log == nullptr)
        {
            return true;
        }
        array<Object^>^ record = dynamic_cast<array<Object^>^>(log->Record);
        if (record == nullptr)
        {
            return true;
        }
        if (record->Length != 2)
        {
            return true;
        }

        // Extract old account data from the record.
        String^ filename = (String^) record[0];
        int balance = (int) record[1];

        // Restore the old state of the account.
        WriteAccountBalance(filename, balance);

        return false;
    }

public:
    virtual void EndAbort() override
    {
        // nothing to do
    }    

};
// A CRM Compensator
public class AccountCompensator extends Compensator
{
    private boolean receivedPrepareRecord = false;

    public void BeginPrepare()
    {
        // nothing to do
    } //BeginPrepare    

    public boolean PrepareRecord(LogRecord log)
    {
        // Check the validity of the record.
        if (log == null) {
            return true;
        }
        Object record[] = new Object[] { log.get_Record() };

        if (record == null) {
            return true;
        }
        if (record.get_Length() != 2) {
            return true;
        }
        // The record is valid.
        receivedPrepareRecord = true;
        return false;
    } //PrepareRecord

    public boolean EndPrepare()
    {
        // Allow the transaction to proceed onlyif we have received
        // a prepare record.
        if (receivedPrepareRecord) {
            return true;
        }
        else {
            return false;
        }
    } //EndPrepare

    public void BeginCommit(boolean commit)
    {
        // nothing to do
    } //BeginCommit    

    public boolean CommitRecord(LogRecord log)
    {
        // nothing to do
        return false;
    } //CommitRecord

    public void EndCommit()
    {
        // nothing to do
    } //EndCommit    

    public void BeginAbort(boolean abort)
    {
        // nothing to do
    } //BeginAbort   

    public boolean AbortRecord(LogRecord log)
    {
        // Check the validity of the record.
        if (log == null) {
            return true;
        }
        Object record[] = new Object[] { log.get_Record() };

        if (record == null) {
            return true;
        }
        if (record.get_Length() != 2) {
            return true;
        }
        // Extract old account data from the record.
        String fileName = (String)(record.get_Item(0));
        int balance = System.Convert.ToInt32(record[1]);

        // Restore the old state of the account.
        AccountManager.WriteAccountBalance(fileName, balance);

        return false;
    } //AbortRecord

    public void EndAbort()
    {
        // nothing to do
    } //EndAbort
} //AccountCompensator 

この Compensator は、次のワーカー クラス使用されます。

' A CRM Worker
<Transaction()>  _
Public Class Account
    Inherits ServicedComponent
    
    ' A data member for the account file name.
    Private filename As String
    
    
    Public Property Filenam() As
 String
        Get
            Return Filename
        End Get
        Set(ByVal value As
 String)
            filename = Value
        End Set
    End Property
    
    
    ' A boolean data member that determines whether to commit or abort
 the transaction.
    Private commit As Boolean
    
    
    Public Property AllowCommit() As
 Boolean 
        Get
            Return commit
        End Get
        Set
            commit = value
        End Set
    End Property
    
    
    
    
    ' Debit the account, 
    Public Sub DebitAccount(ByVal
 ammount As Integer) 
        
        ' Create a new clerk using the AccountCompensator class.
        Dim clerk As New
 Clerk(GetType(AccountCompensator), "An account
 transaction compensator", CompensatorOptions.AllPhases)
        ' Create a record of previous account status, and deliver it
 to the clerk.
        Dim balance As Integer
 = AccountManager.ReadAccountBalance(Filenam)
        
        Dim record(1) As [Object]
        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 Then
            ContextUtil.SetComplete()
        Else
            ContextUtil.SetAbort()
        End If
    
End Class 'Account

// 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
[Transaction]
public ref class Account : public
 ServicedComponent
{

    // A data member for the account file name.
private:
    String^ filenameValue;

public:
    property String^ Filename
    {
        String^ get()
        {
            return filenameValue;
        }
        void set( String^ value )
        {
            filenameValue = value;
        }
    }

    // A boolean data member that determines whether to commit or abort
 the 
    // transaction.
private:
    bool allowCommitValue;

public:
    property bool AllowCommit
    {
        bool get()
        {
            return allowCommitValue;
        }
        void set( bool value
 )
        {
            allowCommitValue = value;
        }
    }

    // Debit the account, 
public:
    void DebitAccount(int amount)
    {

        // Create a new clerk using the AccountCompensator class.
        Clerk^ clerk = gcnew Clerk(AccountCompensator::typeid,
            "An account transaction compensator", CompensatorOptions::AllPhases);

        // Create a record of previous account status, and deliver it
 to the
        // clerk.
        int balance = ReadAccountBalance(Filename);

        array<Object^>^ record = gcnew array<Object^>(2);
        record[0] = Filename;
        record[1] = balance;

        clerk->WriteLogRecord(record);
        clerk->ForceLog();

        // Perform the transaction
        balance -= amount;

        Console::WriteLine("{0}: {1}", Filename, balance);

        WriteAccountBalance(Filename, balance);

        // Commit or abort the transaction 
        if (AllowCommit)
        {
            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

この Compensator とワーカー実行するクライアント次のコード例示します

Imports System



Public Class CrmClient
    
    
    Public Shared Sub Main()
 
        
        ' Create a new account object. The object is created in a COM+
 server application.
        Dim account As New
 Account()
        
        ' Transactionally debit the account.
        Try
            account.Filenam = System.IO.Path.GetFullPath("JohnDoe")
            account.AllowCommit = True
            account.DebitAccount(3)
        Finally
            account.Dispose()
        End Try
    
    End Sub 'Main 
End Class 'CrmClient

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();
        }
          
    }

}
#using "System.EnterpriseServices.dll"

using namespace System;

[assembly: System::Reflection::AssemblyKeyFile("CrmServer.key")];

int main ()
{

    // Create a new account object. The object is created in a COM+
 server application.
    Account^ account = gcnew Account();

    // Transactionally debit the account.
    try
    {
        account->Filename = System::IO::Path::GetFullPath("JohnDoe");
        account->AllowCommit = true;
        account->DebitAccount(3);
    }
    finally
    {
        delete account;
    }

}
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 
継承階層継承階層
System.Object
   System.MarshalByRefObject
     System.ContextBoundObject
       System.EnterpriseServices.ServicedComponent
        System.EnterpriseServices.CompensatingResourceManager.Compensator
スレッド セーフスレッド セーフ
この型の public static (Visual Basic では Shared) メンバはすべて、スレッド セーフです。インスタンス メンバ場合は、スレッド セーフであるとは限りません。
プラットフォームプラットフォーム
バージョン情報バージョン情報
参照参照
関連項目
Compensator メンバ
System.EnterpriseServices.CompensatingResourceManager 名前空間



英和和英テキスト翻訳>> Weblio翻訳
英語⇒日本語日本語⇒英語
  

辞書ショートカット

すべての辞書の索引

「Compensator クラス」の関連用語

Compensator クラスのお隣キーワード
検索ランキング

   

英語⇒日本語
日本語⇒英語
   



Compensator クラスのページの著作権
Weblio 辞書 情報提供元は 参加元一覧 にて確認できます。

   
日本マイクロソフト株式会社日本マイクロソフト株式会社
© 2025 Microsoft.All rights reserved.

©2025 GRAS Group, Inc.RSS