Microsoft .NETプログラマにとって、Tuxedo .NETワークステーション・クライアントは、Tuxedo .NETワークステーション・クライアント・アプリケーションの開発を効率化する、生産性向上ツールです。このツールでは、.NETプログラマとのインタフェースがオブジェクト指向(OO)であるだけでなく、コードの設計および記述もOO手法で行うことができます。
Tuxedo .NETワークステーション・クライアントは、ATMIの関数呼出しの動作をほとんどすべて継承しています。そのため、Tuxedoプログラマは、.NETクライアントのクラスを簡単に理解し、使用して、アプリケーションを記述できます。Tuxedo .NETワークステーション・クライアントは、.NETアセンブリとして公開されるため、.NET Frameworkの利点も活用されます。.NETワークステーション・クライアントは、さまざまな.NETプログラミング言語(たとえば、C#、J#、VB.NET、およびASP.NET)で使用できます。
注: | Tuxedoワークステーション・クライアントは、Microsoft Framework 4.0および4.5でテスト済で、これらのバージョンを公式にサポートしています。 |
Tuxedo .NETワークステーション・クライアントでは、.NETプログラミング言語でTuxedoクライアント・アプリケーションを記述して、Tuxedoサービスにアクセスできます。また、.NETワークステーション・アプリケーションとTuxedoサービスの間の接続機能も備わっています。
Tuxedo .NETワークステーション・クライアントには、以下のコンポーネントが含まれています。
libwsclient.dll
このMicrosoft .NET Frameworkの.dll
アセンブリでは、Tuxedo .NETワークステーション・クライアントの開発に使用される、Tuxedo ATMIおよびFMLの関数がラッピングされます。
viewcs
、viewcs32
、mkfldcs
、mkfldcs32
、およびbuildnetclient
上記のユーティリティの実行可能ファイルを使用すると、TuxedoのVIEW/VIEW32型バッファおよびFML/FML32型バッファを使用して、C#コードを開発することも、C#コードをTuxedo .NETワークステーション・クライアントのアセンブリの実行可能ファイルにコンパイルすることも、効率的に行うことができます。詳細は、「viewcs、viewcs32(1)」、「mkfldcs、mkfldcs32(1)」、「buildnetclient(1)」を参照してください。
上記3つのサンプルは、C#を使用したTuxedo .NETワークステーション・クライアント・アプリケーションの作成方法を表しています。「Tuxedo .NETワークステーション・クライアントのサンプル」を参照してください。
Tuxedo .NETワークステーション・クライアントには、以下の制限事項があります。
tpxmltofml32(3)
やtpfmltoxml32(3)
)。tx_open()
、tx_close()
、およびtx_begin()
)は、Tuxedo .NETワークステーション・クライアントでサポートされていません。Tuxedo TPトランザクション関数だけが使用可能ますTuxedo .NETクライアントのインストールおよびTuxedoのインストール・セットの詳細は、『Oracle Tuxedoシステムのインストール』を参照してください。
Microsoft .NET FrameworkのダウンロードおよびMicrosoft .NET Frameworkの詳細は、Microsoftの.NET Developer Centerを参照してください。
Tuxedo .NETワークステーション・クライアントは、.NETアプリケーションとTuxedoワークステーションの基底の共有ライブラリ(libwsc.dll
、libengine.dll
、およびlibfml.dll
)の間の中間層またはラッパーとして機能します。図1は、Tuxedo .NETワークステーション・クライアントの機能を表しています。
.NETアセンブリのlibwscdnet.dll
には、Tuxedo .NETワークステーション・クライアント用のラッパーAPIクラスが含まれ、Tuxedo ATMI関数とFML関数をラップするオブジェクト指向スタイルのインタフェース・セットを実装します。
buildnetclient
は、.NETプログラミング言語で記述されたTuxedoワークステーション・クライアントを構築するため、libwscdnet.dll
を参照します。それは共通言語ランタイム(CLR)環境をターゲットとしており、実行時の環境に応じて、アセンブリ(たとえば、クライアントの実行可能ファイル、ライブラリ)によって呼び出されます。
win32共有ライブラリlibwdi.dll
にはlibwscdnet.dll
に使用されているプラットフォーム固有の関数が実装されています。
注: | libwdi.dll はlibwscdnet.dll の実行時のみ必要です。buildnetclient でアプリケーションのソース・ファイルを.NET実行可能ファイルにビルドする際は、不要です。 |
注: | このライブラリは、今後、Microsoft .NET FrameworkがMicrosoft Windowsファミリ以外のプラットフォームに移植された場合に使用できるように、予約されています。 |
Tuxedo .NETワークステーション・クライアントを使用するには、Microsoft .NET Framework 4.0または4.5 SDKをご使用のシステムにインストールする必要があります。Oracle Tuxedoのインストーラ・プログラムでは、.NET Frameworkがインストールされているかどうかが自動的にチェックされます。インストールされている場合は、libwscdnet.dll
が.NET Frameworkのグローバル・アセンブリ・キャッシュに自動的に登録されます。
.NET Frameworkがインストールされていない場合は、インストールする必要があります。.NET Frameworkは、Microsoftの.NET Developer Centerからダウンロードできます。.NET Frameworkのインストール後は、libwscdnet.dll
をグローバル・アセンブリ・キャッシュに手動で登録することを強くお薦めします。
libwscdnet.dll
は、コマンド行から登録/登録解除できます。
Tuxedo .NETワークステーション・クライアント・アプリケーションを開発するプログラマは、以下のことを行う必要があります。
Tuxedo .NETワークステーション・クライアントは、プログラマによるTuxedo FML/VIEW型バッファの使用および.NET実行可能ファイルのビルドを支援する開発ユーティリティを備えています。「FML/FML32型バッファ」と「VIEW/VIEW32型バッファ」を参照してください。
Tuxedo .NETワークステーション・クライアントのインタフェースの主な変更点(Tuxedo ATMIおよびFMLのC関数との比較)は、以下のとおりです。
クラスAppContext
は、ほとんどすべてのATMI C関数をまとめる際に使用します。クラスTransaction
のメソッドとして定義されています(たとえば、tpbegin()
、tpcommit()
など)。TypedBuffer
およびその派生クラスを使用して処理されます。「型付きバッファ」を参照してください。 Tuxedo .NETワークステーション・クライアントのネームスペースは、2つのカテゴリに分類されます。最初のカテゴリには、2つのネームスペースBea.Tuxedo.ATMI
とBea.Tuxedo.FML
があり、ATMIおよびFMLのラッパー・クラスがまとめられています。
2つ目のカテゴリでは、Bea.Tuxedo.Autogen namespace
が使用され、自動生成の.NETクラスがすべて.NETクライアント・ユーティリティでまとめられています。
上記のネームスペースには、「Tuxedo .NET Workstation Client API Reference」に記載された関数に関連付けられたすべてのクラスと構造が含まれています。
AppContext
クラスは、Tuxedoサービスへのアクセス関数の実行に使用するキー・クラスです。AppContext
を使用すると、マルチコンテキスト・クライアント・アプリケーションでOOプログラミング手法を活用できます。
注: | マルチコンテキストの詳細は、『C言語を使用したOracle Tuxedo ATMIアプリケーションのプログラミング』の「マルチスレッドおよびマルチコンテキストATMIアプリケーションのプログラミング」を参照してください。 |
Tuxedo ATMI C関数(たとえば、tpcall()
とtpnotify()
)はほとんどすべてAppContextクラスのメソッドとして定義されています。AppContext
クラスのインスタンスの作成は、TuxedoドメインとそのTuxedoドメインで提供される呼出しサービスに接続する上で、重要な要素です。
CまたはCOBOLで記述されたマルチコンテキストのアプリケーションでは、通常、プログラマは2つのATMI関数tpgetctxt()
とtpsetctxt()
を使用して、Tuxedoコンテキストを切り替える必要があります。この切替えは、Tuxedo .NETワークステーション・クライアントを使用する場合、不要です。クラスAppContext
のインスタンスを作成すると、特定のTuxedoコンテキストのインスタンスも作成されます。
特定のAppContext
のインスタンスに対する操作は、他のAppContext
のインスタンスに影響しません。マルチコンテキスト・アプリケーションを開発し、簡単に切り替えることができます。
Tuxedoコンテキストのインスタンスを作成するには、静的クラスのコンストラクタではなく、メソッドAppContext.tpinit(TPINIT)
を呼び出す必要があります。
注: | Tuxedoコンテキストのインスタンスは、自動的には破棄されません。Tuxedoコンテキストのインスタンスを破棄するには、AppContext.tpterm() を呼び出す必要があります。そうしないと、以下の現象が発生する可能性があります。 |
以下のサンプルは、シングル・コンテキストのTuxedoドメインへの接続方法を表しています。
……
TypedTPINIT tpinfo = new TypedTPINIT();
AppContext ctx1 = AppContext.tpinit(tpinfo); // connect to Tuxedo domain
……
ctx1.tpterm(); // disconnect from Tuxedo domain
以下のサンプルは、マルチコンテキストのTuxedoドメインへの接続方法を表しています。
……
TypedTPINIT tpinfo = new TypedTPINIT();
tpinfo.flags = TypedTPINIT.TPMULTICONTEXTS; // set multi context flag
// connect to the first Tuxedo domain
AppContext ctx1 = AppContext.tpinit(tpinfo);
Utils.tuxputenv("WSNADDR=//10.2.0.5:1001");
// connect to the second Tuxedo domain
AppContext ctx2 = AppContext.tpinit(tpinfo);
……
ctx1.tpterm(); // disconnect from the first Tuxedo domain
ctx2.tpterm(); // disconnect from the second Tuxedo domain
Tuxedo .NETワークステーション・クライアントは、Oracle Tuxedoに組み込まれているバッファ・タイプFML
、FML32
、VIEW
、VIEW32
、CARRAY
、およびSTRING
をサポートしています。図2は、Tuxedo .NETワークステーション・クライアントの型付きバッファ・クラスの階層を表しています。
Tuxedo .NETワークステーション・クライアントのクラスTypedBuffer
は、Tuxedoの具体的なバッファ・タイプすべてのベース・クラスであり、低次の関数を派生クラスすべてに継承しています。クラスTypedBuffer
は抽象クラスであり、インスタンスの作成には使用できません。
Tuxedo .NETワークステーション・クライアントでは、クラスTypedString
を使用して、STRING
型バッファの文字を定義します。TypedString
のインスタンスは、tpcall()
などのAppContext
のメソッドとの通信に直接使用できます。次に使用例を示します。
……
TypedString snd_str = new TypedString ("Hello World");
TypedString rcv_str = new TypedString(1000);
AppContext ctx = AppContext.tpinit(null);
……
ctx.tpcall("TOUPPER", snd_str, rcv_str, 0);
……
ctx.tpterm();
……
Tuxedo .NETワークステーション・クライアントでは、クラスTypedFML
/TypedFML32
を使用して、ほとんどのFML C関数を定義します。FML型バッファを使用してTuxedo .NETアプリケーションを開発するには、以下の手順に従います。
FML型バッファのプログラミングの詳細は、『FMLを使用したTuxedo ATMIアプリケーションのプログラミング』を参照してください。
using Bea.Tuxedo.FML;
namespace Bea.Tuxedo.Autogen {
public class fnext_flds {
public static readonly FLDID F_short = 110; // number: 110 type: short
public static readonly FLDID F_view32 = 369098863; // number: 111 type: view32
public static readonly FLDID F_double = 134217840; // number: 112 type: double
public static readonly FLDID F_ptr = 301990001; // number: 113 type: ptr
}
} // namespace Bea.Tuxedo.Autogen
……
TypedFML fmlbuf = new TypedFML(2048);
short s = 123;
fmlbuf.Fadd(fnext_flds.F_short, s);
……
fmlbuf.Resize(3000);
……
fmlbuf.Dispose();
……
Tuxedo .NETワークステーション・クライアントでは、クラスTypedVIEW
を使用して、VIEW/VIEW32データを作成し、アクセスします。VIEW/VIEW32型バッファを使用してTuxedo .NETワークステーション・クライアント・アプリケーションを開発するには、以下の手順に従います。
viewcs
ユーティリティを使用して、VIEW定義ファイルをVIEWバイナリ・ファイル(.VV)にコンパイルします。詳細は、「viewc(1)」、「viewcs(1)」を参照してください。viewcs
ユーティリティを使用して、クラスTypedVIEW
から導出されるC#定義コード、および対応する.dllライブラリ(必要に応じて)をVIEWバイナリ・ファイルから生成します。TypedVIEW
を使用して、.NETアプリケーションを記述します。 クラスTypedVIEW
には、以下の2つのオプションがあります。
このオプションは、TypedVIEW
の最も一般的な使用方法です。
viewcs
ユーティリティを使用して、派生クラスTypedVIEW
のC#定義コードをxxx.VVファイルから生成します。その後、C#コードを.exe
ファイルにコンパイルします。環境変数を追加する必要はありません。
viewcs(32) view1.VV view2.VV
buildnetclient -o simpapp.exe simpapp.cs view1.cs view2.cs
viewcs
ユーティリティと.NETアセンブリ環境変数を併用すると、.dllライブラリを生成できます。viewcs
によって生成される.dllライブラリを表示するには、.NETアセンブリ環境変数ASSFILES
およびASSDIR
(VIEW32の場合は、ASSFILES32
およびASSDIR32
)を適宜設定する必要があります。
注: | TypedView は、.NET環境では、C#コードではなく、.dllライブラリにリンクする必要があります。それによって、クラス型が.dllライブラリまたは.exe ファイルにコンパイルされるためです。定義が.dllライブラリと.exeファイルの両方にコンパイルされる場合、この2種類のファイルに出力されるバイナリは同じではありません。 |
上記の環境変数を使用すると、.dll
ライブラリを自動的に、または手動で生成できます。
このメソッドは、xxx.VVファイルが複数の場合に使用できます。TypedVIEW
のC#コードを管理しやすくするには、複数のxxx.VVファイルを1つの.dllライブラリにコンパイルします。
viewcs
ユーティリティを使用して、派生クラスTypedVIEW
のC#定義コード、および対応する.dllライブラリをxxx.VVファイルから生成します。libwscdnet.dll
アセンブリを手動で登録してから、.dllライブラリを使用してクライアント・アプリケーションをコンパイルします。
viewcs(32) view.dll view1.VV view2.VV
gacutil.exe /i view.dll
buildnetclient -o simpapp.exe simpapp.cs view.dll
set ASSFILES(32)=view.dll
set ASSDIR(32)=%APDIR%
特定の統合プログラミング環境(たとえば、VB.NETおよびASP.NET)には、実行環境が備わっています。クライアント・アプリケーションは、.dllファイルとして統合されています。この場合は、.dllライブラリを手動で生成することをお薦めします。
viewcs
ユーティリティを使用して、派生クラスTypedVIEW
のC#定義コードをxxx.VVファイルから生成します。その後、C#コードをアプリケーションの.dllファイルにコンパイルします。
.NETアセンブリ環境変数ASSFILES
およびASSDIR
(VIEW32の場合は、ASSFILES32
およびASSDIR32
)をTypedVIEW
が定義されたアプリケーションの.dllライブラリおよびディレクトリに設定する必要があります。
viewcs(32) view1.VV view2.VV
csc /t:library /out:simpapp.dll /r:%TUXDIR%\bin\libwscdnet.dll simpapp.cs
view1.cs view2.cs
set ASSFILES(32)=simpapp.dll
set ASSDIR(32)=%APDIR%
型付きバッファ・サンプル・ファイル(Tuxedo .NETワークステーション・クライアント・パッケージに含まれる)は、FMLおよびVIEW型付きバッファの使い方を示します。
.NET Framework環境の利点の1つは、言語の統合です。.NETアセンブリが生成されると、.NETでサポートされる言語のどれを使用しても、その.NETアセンブリでアプリケーションを開発できます。そのため、J#、VB、C++など、.NETでサポートされる言語のどれを使用しても、Tuxedo .NETワークステーション・クライアント・アプリケーションを開発できます。
Imports System
Imports Bea.Tuxedo.ATMI
Module Main
Sub Main()
Dim sndstr, rcvstr As TypedString
Dim ac As AppContext
Dim info As TypedTPINIT
info = New TypedTPINIT()
info.cltname = "vb client"
Try
ac = AppContext.tpinit(info)
sndstr = New TypedString("hello world")
rcvstr = new TypedString(1000)
ac.tpcall("TOUPPER", sndstr, rcvstr, 0)
Console.WriteLine("rcvstr = {0}"
...rcvstr.GetString(0,1000))
ac.tpterm()
Catch e as ApplicationException
Console.WriteLine("Got Exception = {0}", e)
End Try
End Sub
End Module
buildnetclient
ユーティリティは、C#ソース・ファイルから.NET実行可能ファイルへのコンパイルを効率化するために、提供されています。「buildnetclient(1)」も参照してください。
注: | リンク編集を行う際は、buildnetclient ユーティリティを実行する必要があります。 |
buildnetclient -v -o simpapp.exe simpapp.cs
Tuxedo ATMI C関数およびFML C関数で使用されているエラー・コードのリターン・メカニズムは、Tuxedo .NETワークステーション・クライアントの例外メカニズムに置き換えられます。try
文を使用すると、Tuxedo .NETワークステーション・クライアントでエラーを処理できます。エラーは2つのカテゴリTPException
およびFException
に定義されます。
……
try {
……
TypedTPINIT tpinfo = new TypedTPINIT();
AppContext ctx1 = AppContext.tpinit(tpinfo); // connect to Tuxedo domain
……
ctx1.tpterm(); // disconnect from Tuxedo domain
……
} catch (ApplicationException e) {
Console.WriteLine("******Error******, e = {0}", e);
}
……
Tuxedo .NETワークステーション・クライアント・パッケージには、3つのサンプル・アプリケーションがバンドルされています。
サンプル・アプリケーションにアクセスするには、以下の手順に従います。