Hitachi

OpenTP1 Version 7 分散トランザクション処理機能 TP1/Extension for .NET Framework 使用の手引


4.7.2 DABroker for .NET Frameworkを使用したSPP.NETおよびSUP.NETのコーディング例

DABroker for .NET Frameworkと連携したSPP.NETおよびSUP.NETのコーディング例を示します。

〈この項の構成〉

(1) SPP.NET,C#の場合のコーディング例(InitializeSPPメソッドでDBMSとのコネクションを生成する)

using System;
using Hitachi.OpenTP1;
using Hitachi.OpenTP1.Server;
using Hitachi.DABroker;   // DABroker for .NET Frameworkのクラス
 
namespace MyCompany
{
  public class CallerSampleImpl : SPPBaseICallerSample
  {
    private IGyoumuAStub server = null;
    private DABConnection dabCon = null;         // DBMSとの接続
    …
    public override void InitializeSPP()
    {
      server = new IGyoumuAStub("GRP1");
      // クライアントスタブの生成
      dabCon = new DABConnection("接続文字列");
      // コネクションの生成
      try {
        dabCon.Open();                // コネクションのオープン
      } catch (DABException exp) {
        // DABrokerから例外がスローされた
      } catch (Exception exp) {
        // 予期しない例外
      }
    }
 
    public override void FinalizeSPP()
    {
      server = null;
      if (dabCon != null) {           // コネクションの解放
        dabCon.Close();
        dabCon = null;
      }
    }
 
    [TP1RpcMethod]
    public void DBService()
    {
      try {
        Trn.Begin();
        …                            // データベースアクセス処理
        Trn.Commit();
      } catch (DABException exp) {
        // DABrokerから例外がスローされた
        Trn.Rollback();               // ロールバック
      } catch (Exception exp) {
        // 予期しない例外
      }
    }
  }
}

(2) SPP.NET,C#の場合のコーディング例(InitializeSPPメソッドでDBMSとのコネクションを生成しない)

using System;
using Hitachi.OpenTP1;
using Hitachi.OpenTP1.Server;
using Hitachi.DABroker;   // DABroker for .NET Frameworkのクラス
 
namespace MyCompany
{
  public class CallerSampleImpl : SPPBaseICallerSample
  {
    private IGyoumuAStub server = null;
    …
    public override void InitializeSPP()
    {
      server = new IGyoumuAStub("GRP1");
      // クライアントスタブの生成
    }
 
    public override void FinalizeSPP()
    {
      server = null;
    }
 
    [TP1RpcMethod]
    public void DBService()
    {
      private DABConnection dabCon = null;
      // DBMSとの接続
      try {
        Trn.Begin();
        dabCon = new DABConnection("接続文字列");
        // コネクションの生成
        dabCon.Open();              // コネクションのオープン
        …                          // データベースアクセス処理
        Trn.Commit();
      } catch (DABException exp) {
        // DABrokerから例外がスローされた
        Trn.Rollback();             // ロールバック
      } catch (Exception exp) {
        // 予期しない例外
      } finally {
        if (dabCon != null) {       // コネクションの解放
          dabCon.Close();
          dabCon = null;
        }
      }
    }
  }
}

(3) SUP.NET,C#の場合のコーディング例

using System;
using Hitachi.OpenTP1;
using Hitachi.OpenTP1.Server;
using Hitachi.DABroker;   // DABroker for .NET Frameworkのクラス
 
namespace MyCompany
{
  public class CallerSample
  {
    …
    public static void Main(string[] args)
    {
      private DABConnection dabCon = null;
      // DBMSとの接続
      try {
        …
        Rpc.Open();                    // RPCオープン
        Adm.Complete();                // SUP.NET開始処理完了通知
        …
        Trn.Begin();
        dabCon = new DABConnection("接続文字列");
        // コネクションの生成
        dabCon.Open();                 // コネクションのオープン
        // データベースアクセス処理
        Trn.Commit();
        …
      Rpc.Close();                     // RPCクローズ
    } catch (DABException exp) {
      // DABrokerから例外がスローされた
      Trn.Rollback();                  // ロールバック
    } catch (TP1UserException exp) {
      // サービスを要求したメソッドからユーザ例外がスローされた
    } catch (TP1RemoteException exp) {
      // サービスを要求したメソッドで予期しない例外が発生
    } catch (TP1ServerException exp) {
      // OpenTP1(クラスライブラリ)が検知したエラー
    } catch (TP1Exception exp) {
      // OpenTP1(クラスライブラリ以外)が検知したエラー
    } catch (Exception exp) {
      // 予期しない例外
    } finally {
      if (dabCon != null) {            // コネクションの解放
        dabCon.Close();
        dabCon = null;
      }
    }
  }
}