z/OS メインフレーム (COBOL プログラム) から Microsoft Sql Server にアクセスして 3270 端末エミュレーションを行う方法 (おそらく安価) はありますか?
3270 がかなり古いシステムであることは承知していますが、銀行の CED では依然として非常に人気があります。
8 に答える
それは、実際に何をしようとしているかによって異なります。あなたの質問を読んだところ、メインフレーム ベースのプロセスで SQL Server データベースにアクセスし、その結果に対して、おそらく 3270 ターミナルを使用して何かを実行したいと考えています。
Unix System Services を使用できる場合は、FreeTDSなどの TDS ライブラリをコンパイルし、C プログラムを使用して、結果に対して必要なことを行うことができます。さらに複雑にしたい場合は、IBM C、SAS C、またはDignus C/C++でコードをコンパイルすることにより、ネイティブ z/OS 環境から接続を実行できます。私は Dignus をお勧めします。私はこれを使用して、z/OS 上の他の言語と対話するコードを作成しました。Dignus ヘッダーとランタイム ライブラリには (メモリから) いくつかの FreeBSD 系統があり、移植を簡素化するのに役立ちます。
このアプローチを使用すると、システムの他の部分から呼び出して作業を実行できるロード モジュールを取得したり、システムの他の部分とコードをリンクしたり、ジョブをサブミットして出力を取得したりできます。
Java を使用したい場合は、jTDSなどを使用して Java コードを記述し、必要なことを行うことができます。私は z/OS で Java を使用したことがないので、そこで具体的なアドバイスを提供することはできませんが、他のプラットフォームで jTDS を使用したことがあり、結果には満足しています。
アップデート:
C 関数をエントリ ポイントとしてロード モジュールにエクスポートし、それを Cobol から呼び出すことができます。C/C++ の実装では、Cobol データ構造を処理する必要があります。それらは明確に定義されており、予測可能であるため、問題はありません。必要な柔軟性に応じて、クエリを C コードにコンパイルし、事前定義されたクエリを実行し、結果を取得するためのインターフェイスを持つ関数を作成するか、クエリが提供された場所でより複雑なものを作成することができます。 COBOL プログラムから。
Adabas/Natural 開発者に API 機能を提供するためにこのアプローチを使用しましたが、うまく機能しました。Dignus コンパイラには、呼び出し元がランタイム ライブラリへのハンドルを提供するメカニズムがあり、呼び出し側プログラムから C ランタイム環境の有効期間を管理できます。
C/C++ 開発者にとって、これはかなり簡単なはずです。開発者がすべて COBOL 開発者である場合、状況は少し複雑になる可能性があります。
ゲートウェイ アプローチは可能であり、ゲートウェイ製品が存在することは確かですが、推奨することはできません。私はお勧めしないくだらないものを見てきましたが、それは良いものがどこにもないという意味ではありません.
完全を期すために、Cobol で TDS プロトコルを実装する可能性について言及します。しかし、残酷で通常の罰のように聞こえます。
3270 端末エミュレーションを使用している場合、どの端末を使用していますか? パソコン?
興味深いハックの 1 つは、Cisco ルーターを使用してオンザフライで 3270 からバニラ TCP への変換を行い、SQL Server プロシージャ用の単純な TCP プロキシを作成することです。
CICS で実行される COBOL プログラムを作成している場合は、次の可能性があります。
まず、SQL Server データベースのストアド プロシージャを Web サービス ラッパーでラップします。例として、devx.com の記事 28577 を見てください。
その後、CICS Web サービス呼び出しを使用して、新しい SQL Server がホストする Web サービスを呼び出します。
最後に、標準の CICS BMS コマンドを使用して、データをユーザーに提示します。
そうではありません - 3270 エミュレーターは IBM メインフレームに接続しています。メインフレーム上の SQL サーバー データベースからデータを取得するには、メインフレーム上で実行され、SQL サーバー DB からデータを読み取るプログラムを作成する必要があります。これには、メインフレームでドライバ ソフトウェアを実行する必要があります。このタイプのものを作るサードパーティを見つけることができるかもしれませんが、かなり高価になる可能性があります.
メインフレーム システムのデータを外部データ ソースと組み合わせてレポートや何かを作成する必要がある場合は、メインフレームからデータを取得し、別の場所 (おそらく何らかのデータ マート) で統合する方が簡単な場合があります。
別の方法として、必要なデータを SQL Server データベースから抽出し、メインフレームで処理するためのフラット ファイルとしてメインフレームにアップロードします。
私が過去にやったことがあなたにもできるかもしれません。私は、MS-SQL テーブル/ビューを DB2 に対してのみ SELECT する DB2 to MS-SQL COBOL プログラム/関数を作成しました。これには、メインフレームからの TCP/IP 接続のみを受け入れ、MS-SQL テーブルへのアクセスに使用されるユーザー ID/PW として渡された資格情報を使用する、ネットワーク サーバー上で実行中のサービスを作成することが含まれていました。次に、テーブル/ビューに対して選択を発行し、最初にフィールド名リストを合計行数とともに返します。次に、各行をタブ区切りのフィールドとしてメインフレームに渡します。COBOL プログラムは、各 MS-SQL フィールドを DB2 に変換するために使用するルーチンを決定するために使用されるテーブルにフィールド名を保存します。DB2 の観点からは、フィールドを返す関数のように見えます。約30台稼働中です。COBOL プログラムのフィールド トランザクションの初期定義を作成するために、MS-SQL 記述プロシージャを作成する必要がありました。また、記述データを読み取り、リンケージおよび手続き部コマンドを作成するための COBOL プログラムを作成する必要がありました。MS-SQL テーブル/ビューごとに 1 つの COBOL プログラム。関数定義のサンプルを次に示します。関数の作成
TCL.BALANCING_RECON(VARCHAR(4000))
RETURNS
TABLE(
SCOMPANY CHAR(6),
PNOTENO VARCHAR(14),
PUNIT CHAR(3),
LATEFEES DEC(11,2),
FASB_4110 DEC(11,2),
FASB_4111 DEC(11 ) ,2),
USERAMOUNT1 DEC(11,2),
USERAMOUNT2 DEC(11,2),
USERFIELD1 VARCHAR(14)
)
言語 COBOL
障害が発生した後も継続する 決定論的で
ない
SQL データ
を読み取る 外部名 DB2TCL02
衝突する DB2TCL02
パラメーター スタイル SQLは
NULL 入力で呼び出される
EXTERNALなしアクション
DISALLOW PARALLEL
SCRATCHPAD 8000
ASUTIME LIMIT 100
STAY RESIDENT はい
プログラム タイプ
サブ WLM 環境 DB2TWLM
セキュリティ DB2
DBINFO
; 専念;
GRANT EXECUTE ON FUNCTION TCL.BALANCING_RECON TO PUBLIC;
関数を呼び出すには: SELECT * FROM
TABLE (TCL.BALANCING_RECON(''
)) AS X;
MS-SQL フィルター コマンドを引用符で囲みます。
MS-SQL データの更新を依頼されたことがないので、まだそのハードルを超えていません。DB2 には、開始されたタスクを実行している ID/PW とサーバーを追跡するデータベースもあります。これは、サーバーが過負荷になった場合に、別の選択を別のサーバーにプッシュできるようにするためです。大きなテーブルでも、応答は迅速です。タイムアウトは、60 デッドロック タイムアウトと同じです。トランスポートは主に IP ベースです。DB2 は、データを外部テーブル参照として単純に認識します。
JDBC ドライバーを入手して MS-SQL サーバーにアクセスするだけです。それをサブクラス化し、Cobol プログラムで使用して、Java から使用しているかのようにデータベースにアクセスできます。
結果を取得したら、通常の BMS 関数を介して表示できます。
汚いハックや派手なネットワークのトリックは必要ありません。IBM Enterprise Cobol を使用すると、実際に Java クラスを作成するだけで、Java 空間で使用する場合と同じように使用できます。
私の会社では、SQL Server への接続に Java を使用しています。
そして、CLはこのJavaプログラムを呼び出します:)
とてもシンプル...
汚いハックが進むにつれて、必要なテーブル データの .csv を返す単純な HTTP または TCP サーバーを作成することを考えたことがありますか?
これは、クライアントがデータにアクセスするために必要なのは、データベース クライアント ライブラリではなく単純な HTTP/TCP クライアントのみであることを意味します。