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とのコネクションを生成する)
(2) SPP.NET,C#の場合のコーディング例(InitializeSPPメソッドでDBMSとのコネクションを生成しない)
(3) SUP.NET,C#の場合のコーディング例

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