デザイン原則と実装
のアーキテクチャは、一連のコアとなるデザイン原則に則って決定されています。このセクションでは、 のデザインの3つの側面に着目します:- が重視する原則と価値
- の高度な理解に必要なコアとなるコンセプト
- アーキテクチャ上の判断と、その判断がデザイン原則をどう反映しているか
コアとなる原則
次の図は、 デザインの基本原則を示しています:
コンセプト
大枠では、 の実装は3つの要素から構成されます:- フロー
- コネクタ
- メッセージ

フロー
フローは、一連の自動化されたデータ処理タスクを実行する設定済みのワークフローです。フローは複数のコネクタによって構成され、1つのコネクタが処理したデータが自動的にフロー内の次のコネクタに渡されるよう接続されます。 UI では、フローはフローページのワークスペースに保持されます。コネクタを空のキャンバスに追加し、設定したり相互に接続することができます。次の画像は、AS2 とFile の2つのコネクタから構成される簡単なフローを示します。
コネクタ
コネクタはフローの個別の部品で、アプリケーションデータおよびメッセージに影響します。各コネクタはメッセージに特定の操作を実行し、フロー内の次のコネクタ、または外部パーティ(FTP 同期先など)に渡します。 操作は主に3つのカテゴリに分けられます:トリガー、変換、およびターミナル。- トリガーコネクタは、受信オートメーションがファイルを取得または作成することによって、またはパッシブ受信をサポートするコネクタの場合は、コネクタが外部クライアントからファイルを受信することによってフローを開始します。AS2、Email Receive、SFTP が例として挙げられます。
- 変換コネクタは、フローの途中に存在するコネクタで、メッセージに対して作業を実行する(何らかの方法でメッセージを変更する)役割を担います。X12、XML Map、CSV が例として挙げられます。
- ターミナルコネクタは、フローの終端です。 がメッセージを基底のディスクに渡すか、またはメッセージが送信アクション中にコネクタによって消費され、アウトプットは生成されません。File、MySQL、またはUpsert 用に構成された任意のデータベースコネクタが例として挙げられます。

メッセージ
フロー内のコネクタ間でデータをやりとりする際には、メッセージとしてやりとりされます。メッセージは主に、ファイルペイロードデータ( が処理しているデータ)とメタデータ( がアプリケーションを通過するデータのフローを追跡するために使用する情報)で構成されています。 メッセージについては、メッセージの実装でより詳細に説明されていますが、メッセージは標準RFC822(インターネットメッセージ)形式のファイルである、というのが概要となります。コネクタがデータをフロー内の他のコネクタに渡すと、次の図に示すように、渡されたコネクタはデータをファイルに書き込み、ファイルを次のコネクタに渡します。
実装の概要
このセクションでは、先に定義したコアとなるコンセプト(フロー、コネクタ、およびメッセージ)の、 の実装に関する技術的な詳細と、この実装がどのように のデザイン原則を満たすのかを説明します。ファイルベースのアーキテクチャ
はファイルシステム上のファイルにすべてのデータを保存します。そのため、アプリケーションに関わるすべてがディスク上に残ります。次に例を示します: 設定済みフロー内のコネクタは、トランザクションタブからファイル(メッセージ)を読み書きします。データが1つのコネクタから別のコネクタにデータを渡す際には、これらのメッセージファイルは最初のコネクタのReceive フォルダから、次のコネクタのSend フォルダに移動されます。 はこうしたファイルシステムベースの構造にWeb UI を提供し、フローの簡単な構築、設定を実現します。設定を管理するには、 の管理APIとUI の使用を推奨します。これらの方法はディスク上の設定ファイルを直接変更します。ファイルベースのアーキテクチャにより、 をInfrastructure as Code(IaC)ツールやGit などのバージョン管理システムと統合するのも容易です。Git を と統合する方法の詳細については、 の構成をGit でバージョン管理する方法を参照してください。メッセージの実装
のメッセージはアプリケーションが処理した生データを含む、ディスク上のファイルです。メッセージは2つの部分に分けられます:- ボディ:アプリケーションデータのペイロード
- ヘッダー:メッセージのメタデータ
.eml 拡張子のファイルに保存されます。このファイルは、標準的なテキストエディタやメールクライアントで開くことが可能です。ヘッダーはname: value ヘッダーを改行 文字で区切ったリストであり、ボディは2つの改行 文字でヘッダーと区別されます。
メッセージボディ
メッセージボディやペイロードは、アプリケーションによって処理される実際のファイルデータです。これは、リモートソースから受信されるデータで、変換コネクタなどで操作されます。メッセージヘッダーは主に がメッセージを追跡するために使用されますが、メッセージペイロードにはユーザーが主に関心を持つデータが含まれています。 データを受信すると、 はメッセージを生成して(新規メッセージをディスクに書き込んで)、受信中のデータをメッセージのボディに使用します。例えば、SFTP コネクタがリモートサーバーからファイルをダウンロードすると、リモートファイルの内容が新規メッセージのボディとなります。 データがアプリケーション内でローカルに処理される際には(例えば、EDI がXML に変換されたり、ファイルが新しい形式にマッピングされるなど)、操作を実行中のコネクタがインプットメッセージのボディを読み込み、メモリ内でデータを処理して、アウトプットメッセージのボディに結果を書き込みます。 アプリケーションがデータを送信する際には(例えば、リモートサーバーにファイルをアップロードしたり、ピアにファイルを送る、データベースに挿入するなど)、インプットメッセージのボディだけが送信されます。メッセージヘッダー
メッセージヘッダーは、 がアプリケーションを通過するデータの進行状況を追跡するのに役立ちます。ヘッダーには、一意のMessageId(ファイル名が変更されても、 がメッセージのライフサイクルを完全に把握するのに役立ちます)、コネクタがメッセージを処理した時のタイムスタンプ、処理中に発生した可能性のあるエラー、その他のメタデータが含まれます。 ヘッダーは、メッセージの先頭にある headerName: headerValue 構文で、改行で区切られて表示されます。メッセージにカーソルを合わせて詳細を表示をクリックすると、関連するヘッダーが表示され、メッセージファイルの内容をダウンロードできます。 メッセージヘッダーは、 がフロー内で認識するのに有用なその他の値にも使用されます。例えば、リモートFTP サーバーのサブフォルダからファイルをダウンロードする際、 は、このフォルダパスをローカルシステムで再作成する必要がある場合に備えて、サブフォルダヘッダーを使用してメッセージへのフォルダパスを追跡します。 は生データファイルに、ファイル処理の方法に関するメタデータを付加します。次は最も頻繁に出現するヘッダーの一部です:- フロー内でファイルを識別する一意の永続するMessageId
- 処理中のファイルのタイムスタンプ
- ファイルを処理したコネクタのConnectorId
- エラーで処理に失敗したファイルのインスタンス
フロー内のメッセージ
は、アプリケーションによって処理されたデータを追跡し理解するためにメッセージヘッダーを内部的に使用しますが、メッセージが調査されない限り、これらの詳細をユーザーに非表示にします。例えば、 は内部MessageId を使用してメッセージを識別しますが、トランザクションタブおよびメッセージタブには公開ファイル名が表示されます。 メッセージのヘッダーを確認するには、メッセージにカーソルを合わせてメッセージ詳細を表示を選択してください。次の画像はトランザクションタブのメッセージを示しています。
.eml 形式で保存します。ただし、メッセージが外部システム(データベースやSFTP サーバーなど)に送信される場合、 はファイルの内容のみをアップロードし、.eml ヘッダーは含みません。同様に、File コネクタのSend アクションを使ってファイルをディスクに書き込む場合も、外部プロセスが期待する出力に合わせるため、 は.eml 構造を省略します。つまり、.eml ヘッダーは の内部ファイル形式の一部ですが、外部の送信先にデータを渡す際には含まれません。
バッチグループとバッチメッセージ
メッセージは複数のペイロードを含むことができ、その場合はバッチグループとみなされます。バッチグループ内の個々のペイロードは、次の図で示すように、バッチメッセージとみなされます。
バッチグループ
メッセージは、バッチグループにまとめてバッチ処理することで、パフォーマンスを向上させ、大きなメッセージのグループをより管理しやすくすることができます。バッチグループは、各MIME パートが個別のバッチメッセージであるMIME 形式のファイルです。バッチグループは、基本のメッセージで使用されるのと同じヘッダースキームを使用して、バッチに関するメタデータを保持します。これらのヘッダーは、バッチの個々の部分ではなく、バッチ全体の処理を追跡します。バッチメッセージ
バッチグループ内の各バッチメッセージは、アプリケーションによって処理されるファイルペイロードデータを含むMIME パートです。各バッチメッセージには、MIME パート内のペイロード(バッチグループではない)に関連するメタデータが含まれます。バッチメッセージには複数のメタデータのセットがあります。1つはバッチグループ全体を追跡するためのヘッダーセットで、もう1つはバッチ内の各メッセージ用の個別のヘッダーセットです。メッセージへのアクセスと閲覧
メッセージはディスク上のファイルなので、ユーザーや外部システムは現時点で パイプライン内にあるメッセージにアクセスし、閲覧することができます。外部アプリケーションを使用してメッセージにアクセスするには、ファイルシステム上のどこにメッセージ.eml ファイルがあるかを理解する必要があります。メッセージファイルの正確な場所については、フォルダ階層を参照してください。
のUI や の管理APIでもメッセージを確認できます。メッセージは、メッセージを処理したすべてのコネクタのトランザクションタブ、およびアクティビティページに表示されます。詳細を表示をクリックすると、メッセージ情報ページが開きます:

メッセージトラッキングとログ
メッセージには、メッセージの一意の識別子として機能するMessageId ヘッダーが含まれます。このMessageId は、ファイル自体の名前が変更されたとしても、フロー内では変化しません。そのため、フロー内でのすべてのファイルの状態はMessageId を参照することで追跡できます。ユーザーはこの値を使って、特定のトランザクションに関連したログデータを見つけることができます。 はログデータを次の2つのフォーマットで保存します:- アプリケーションデータベース
- ディスク上のVerbose ログファイル
アプリケーションデータベース
アプリケーションデータベース は、 が以下の目的で使用するリレーショナルデータベースです:- 本アプリケーションが処理した各トランザクションのメタデータを保存
- どのトランザクションにも特定的でないアプリケーションの操作のログを保存
- 特定のコネクタの状態を保存(例えば、コネクタが確認応答または受信確認を待機している場合)
arc.properties ファイルのcdataappdb 設定を参照してください)。
アプリケーションデータベースには、メッセージの追跡やログの検索に使用されるテーブルがあります。これは、本アプリケーションが処理した各トランザクションのメタデータを保持し、メタデータには処理されたメッセージのMessageId が含まれます。UI のアクティビティページを使用して、メッセージログやトランザクションログを検索します。トランザクションのメタデータ(タイムスタンプ、ConnectorId、ステータスなど)は、アクティビティページで検索できます。データベースのフットプリントを最小化するため、verbose ログデータはアクティビティページには含まれず、ディスク上のログファイルに保存されます。
Verbose ログファイル
は、メッセージを処理するたびにMessageId と同名のログフォルダを生成します。このフォルダにはverbose ログファイルが含まれ、ログ内容はファイルを送信および受信(または送信か受信のどちらか)したコネクタの種類に依存します。例えば、AS2 コネクタはメッセージ自体を表示する.eml ファイルに加えて、MDN レシート、生のリクエストと応答、接続ログをログに記録します。
こうしたログファイルは、フロー内のメッセージを追跡するだけであれば不要です。アプリケーションデータベースに保存されたメタデータだけで、メッセージの追跡には十分です。ただし、デバッグの際などに特定のトランザクションの詳細がほしい場合は、メッセージのMessageId と処理したコネクタに基づいて、適切なファイルを見つける必要があります。
ユーザーはMessageId がわかっていれば適切なログフォルダに手動で移動できます。しかし、こうしたverbose ログファイルを見つけるにはアプリケーションデータベースを使用する方が便利です。詳しくは、アプリケーションデータベースとログファイルの関係を参照してください。
アプリケーションデータベースとログファイルの関係
アプリケーションデータベースに保存されたメタデータには、特定のトランザクションに関連するログファイルを見つけるのに必要なすべての情報が含まれます。 のUI および管理API はこの関係を使って、すべてのトランザクションのログファイルに簡単にアクセスできるようにします。- アクティビティページには、すべてのトランザクションメタデータが含まれています。トランザクションエントリの上にカーソルを合わせて詳細を表示をクリックし、関連するログファイルにアクセスします。 はMessageId を使用して、ディスク上の適切なログファイルを検索しています。
- 同様に、コネクタの設定パネルのトランザクションタブを使えば、特定のコネクタが処理したすべてのトランザクションにアクセスできます。これらのトランザクションを展開して、verbose ログファイルを表示およびダウンロードします。
- アプリケーションデータベースは、トランザクションログファイルが保存されている適切なフォルダに手動で移動するのに役立ちます。ユーザーがトランザクションのファイル名を知っていても、内部のMessageId は知らない、ということは頻繁にあります。アクティビティページのメッセージタブは検索できるので、特定のファイル名で検索すると、そのファイル名に紐付けられたトランザクションのMessageId が表示されます。MessageId とコネクタがわかっている場合のログフォルダの見つけ方については、フォルダ階層を参照してください。
メッセージ実装のデザイン判断
アプリケーションデータはユーザーと外部システムにとって透明であってほしいと考えており、そのためメッセージは不透明な内部データチャネル上ではなく、ファイルシステム上のシンプルなデータファイルを使用してやり取りする実装になっています。そのため、 は処理中のデータが隠蔽されるブラックボックスではありません。これは、 が、ファイルシステム上の特定のフォルダにファイルを取得したり、配置したりするあらゆるシステムに効果的に組み込むことができることを意味します。 また、特別なツールやプログラムなしでメッセージにアクセスできる方が望ましいと考えています。メッセージはRFC2822 準拠のファイルに格納されるので、どんなテキストエディタでもファイルを開くことができます。メッセージには.eml 拡張子が付いているため、ファイルをダブルクリックするとメッセージが開き、その内容がシステムのデフォルトのメールクライアントに表示されます。
メッセージとログが手軽に利用でき透明性を保つよう、トランザクションメタデータの検索可能なデータベースを提供しています。このデータベースはメッセージペイロードとverbose ログファイルへの直接アクセスに使用でき、しかもメモリをあまり使用しません。
コネクタの実装
コネクタはフロー内の1つのステップを表します。複雑なフローは、データ処理の論理的な手順を実行するコネクタの集まりを繋ぐことで作成します。 コネクタは3種類の操作を実行します:- データを受信してアウトプットメッセージを書き込む(SFTP 経由でリモートファイルをダウンロードするなど)
- インプットメッセージを読み込んでデータを外部パーティに送信(AS2 経由でファイルを送信するなど)
- インプットメッセージを読み込んでローカルで処理して、アウトプットメッセージを書き込む(EDI ファイルをXML に変換するなど)。
コネクタファイルとフォルダ
すべてのコネクタインスタンスは、ConnectorId(フロー内の表示名)という名前の単一のフォルダとしてディスク上に存在します。各コネクタフォルダには次が含まれます:- コンフィグ設定を含むport.cfg ファイル
- Send サブフォルダ内の送信または処理するメッセージ(インプットメッセージなど)
- Receive サブフォルダ内の受信済みメッセージ(アウトプットメッセージなど)
- コネクタが処理したメッセージのログファイル
- マップ、テンプレート、スクリプトといったコネクタに固有のファイル
Port.cfg
各コネクタのport.cfg ファイルには、コネクタの動作を制御する設定(コネクタの設定タブと高度な設定タブに表示される設定)が含まれます。ファイルはINI フォーマットであり、コネクタの設定はSettingName = SettingValue 構文で1行1設定としてリスト化されています。UI でコネクタ設定を変更することは、port.cfg ファイルで直接設定を変更することと機能的に同等です。
port.cfg ファイルは 間接値 をサポートしており、設定に文字列リテラルの代わりに参照を使用することができます。これは、アプリケーションの他のセクションで変数を設定し、その変数名をport.cfg ファイルで参照するのと概念的に類似しています。間接値の設定方法の詳細については、データディレクトリを参照してください。
インプットメッセージ
トランザクションフォルダはインプットメッセージ、つまりコネクタが処理するためにキューに入っているメッセージを保持します。 各クロックティック(デフォルトでは0.5秒)毎に、 はコネクタのSend フォルダをチェックしてワーカースレッドを利用可能なメッセージを持つすべてのコネクタに割り当てます。メッセージが処理されると、 はそのメッセージに処理試行時のタイムスタンプが付いたヘッダーを付加します。 は、より古いファイルが最初に処理されるよう、インプットメッセージを最終変更時間に応じてソートします。 は各試行中にヘッダーを付加するので、エラーを起こすメッセージが複数回再試行することで、コネクタを無意味にブロックしてしまうことはありません。 各クロックティックでインプットメッセージを処理するには、コネクタ内で 送信 オートメーションを有効化しておく必要があります。アウトプットメッセージ
‘Receive’ フォルダはアウトプットメッセージ、つまりコネクタが受信、ダウンロード、および / または処理したメッセージを保持します。 コネクタによっては、インプットメッセージの処理を終えてすぐにアウトプットメッセージを書き込みます(データフォーマットを変換するコネクタなど)。インプットメッセージを読み込まずにアウトプットメッセージを書き込むコネクタもあります。例えば、リモートサーバーをポーリングしてダウンロードするファイルを探すSFTP コネクタや、受信ファイルを受動的にリッスンするAS2 コネクタが挙げられます。 コネクタがフロー内の別のコネクタに接続されている場合、アウトプットメッセージはReceive フォルダに残りません。次のコネクタのSend フォルダに渡されます。ログファイル
コネクタが処理する各トランザクションは、一連のログファイルを生成します。トランザクションメタデータはログに追加され、verbose ログ情報はディスク上にファイルとして格納されます。ログファイルには常に.eml フォーマットのメッセージとコネクタ固有のログが含まれます。
デフォルトでは、すべてのコネクタのログファイルは次のフォルダ構造に示すように、週単位でフォルダに整理されます:

送信済みファイル
verbose ログファイルに加えて、コネクタは送信・処理に成功したすべてのメッセージのデータペイロードのコピーをSent フォルダに保持します(処理に失敗したメッセージは追加されません)。ファイルは生成された時刻に基づいて命名され、週単位でフォルダに整理されます。デフォルトの週単位のフォルダ整理を変更するには、任意のコネクタのSent フォルダのスキームフィールドを別の時間間隔(例:日単位 や 月単位)に設定してください。これにより、その時間間隔内に生成されたすべてのファイルが1つのサブフォルダに保持されます。これによって個々のサブフォルダのサイズを減らすことができ、ディスクI/O 性能の向上に繋がります。このSent フォルダはコネクタフォルダの直下にあり、上述のLogs フォルダ内のSent フォルダとは異なります。
追加の設定ファイル
コネクタの種類によっては、コネクタフォルダに追加の設定ファイルが含まれます。追加のファイルには次が含まれます:map.jsonscript.rsb- テンプレートXML ファイル
コネクタ実装のデザイン判断
フローは完全なモジュラー型を志向しており、各コネクタが予測できる直感的な方法でわかりやすい機能を提供することを目指しています。 には任意のコネクタを組み合わせる機能があるため、シンプルなインターフェースでありながら複雑なタスクを実行することができます。コネクタチェーンが個別のステップに分解されているため、複雑なフローも理解しやすい状態を保てます。 コネクタに関連するすべてのデータ(設定データ、アプリケーションデータ、ログデータ、など)に簡単にアクセスできるようにしたいと考えています。すべてのデータはコネクタ固有のフォルダにあるので、フォルダの場所さえわかっていればそのフォルダにアクセスできます。設定データはメッセージデータと同様、透明性の高いINI フォーマットで格納されているため、シンプルなツールで閲覧・編集できます。 フォルダベースのアプローチでコネクタをデザインしているので、コネクタ間でどのようにデータがやり取りされるのかも容易に理解できます。メッセージファイルを移動する操作では、1つのコネクタのアウトプットを別のコネクタのインプットに移動します。 にはこうしたファイル移動の関係を自動で構成する組み込みツールが含まれます。フローとワークスペースの実装
フローはファイルシステム上で、フローでのコネクタの位置と接続を含むflow.json ファイルとして表されます。このファイルの場所については、フォルダ階層を参照してください。
フロー内のコネクタの位置は純粋に外観上のものであり、UI でフローを設定する際にのみ使用されます。コネクタ間の接続はデータ処理レベルで重要です。コネクタがアウトプットメッセージを書き込むと、アプリケーションエンジンに問い合わせて、そのアウトプットメッセージを別のコネクタのSend フォルダに渡す必要があるかどうかを確認します。本アプリケーションはflow.json ファイルを使って、(もしあれば)どのコネクタがファイルを渡されるか決定します。
同じフローキャンバスに複数のフローを設定することができ、 のUI ではキャンバスをドラッグしてフロー間を移動できます。これはGoogle Maps などの地図サービスをナビゲートするのに似ています。
ワークスペースはフロー間を論理的に分離します。各ワークスペースはコネクタの論理フローを設計するための新しいキャンバスとなります。Google Maps のアナロジーを拡張すると、ワークスペースは個別の 惑星 のように機能します。
トレーディングパートナーや統合ごとにワークスペースを分けるのが一般的です。ただし、新しいフローを別のワークスペースに設定するかどうかは好みの問題です。詳細については、ワークスペースにフローを整理するを参照してください。
ファイルシステム上のワークスペース
新しい(デフォルト以外の)ワークスペースを追加すると、 はフォルダ階層に新しいフォルダセットを追加します。workspaces ディレクトリには、デフォルトワークスペースで設定したすべてのコネクタのコネクタフォルダが含まれます。workspaces フォルダはデータディレクトリの兄弟です。
フローとワークスペースのデザイン判断
では、フロー内のコネクタ間のシンプルでモジュラーな関係を保つ最良の方法は、フローを純粋に論理的な概念として扱うことだと考えています。データ処理の効率的な連鎖を決めるために必要なすべての情報は、すでにコネクタの実装に含まれています。 ワークスペースはコネクタをより根本的なレベルで分離する機能にしたいと考えています。ワークスペースを分けることで、コネクタを保持するフォルダも分かれるため、ファイルシステムレベルの操作(権限やディレクトリリストなど)を特定のワークスペースに簡単に分離できます。フォルダ階層
すべての リソースはファイルシステム上で利用できるため、低レベルで を理解するには、アプリケーションのフォルダ構造と、ファイルやフォルダがディスク上でどのように整理されているかを学ぶ必要があります。 階層を理解するには、 のインストール先のディレクトリ構造を知っておくのがよいでしょう。次にフォルダ構造の視覚的な表現を示します。この構造の詳細については以下のセクションで説明します。
- この階層は、フローがデフォルトのワークスペースだけで設定されていることを想定しています。追加のワークスペースの詳細については、フローとワークスペースを参照してください。
- 設定 > 高度な設定ページのクリーンアップ設定セクションのローカルアーカイブフォルダが空の場合、各コネクタにはArchive フォルダもあります。
ルートインストールディレクトリ
すべての リソースはインストールディレクトリにあり、デフォルトでは以下の場所にあります:- Windows:
C:\Program Files\CData\CData Arc - Linux:
/opt/arc
/opt/arc)に展開することができます。
のJava 版はTomcat のような外部Java サーブレットにホストされているので、 のリソースは~/cdata/arc に配置されます。このパスでは、~ はJava サーブレットをホストするユーザーのホームディレクトリになります。
上記のフォルダ階層では、ルートインストールディレクトリはツリーの最上部にあるArc フォルダです。
データディレクトリ
data ディレクトリには次が含まれます:
- (デフォルトワークスペースの)フローページで設定された各コネクタのサブフォルダ
- profile.cfg ファイル
- flow.json ファイル
- roles.json ファイル
- settings.json ファイル
- users.json ファイル
- すべての証明書ファイル
Profile.cfg
profile.cfg ファイルには、設定済みローカルプロファイル(例えば、AS2 プロファイル)用のアプリケーション全体の設定が含まれます。このファイルはINI フォーマットであり、アプリケーションの設定はSettingName = SettingValue といった1行1設定の構文でリスト化されています。
profile.cfg の設定は、一般のアプリケーション設定用のApplicationと、各プロファイル(例えば、AS2 プロファイル設定にはAS2 セクション、ローカルSFTP サーバー設定にはSFTPServer セクションがあります)用の専用セクションに分割されています。
UI のプロファイルページでアプリケーション設定を変更することと、profile.cfg ファイル内で直接設定を変更するのは実質的に同じことです。
Flow.json
flow.json ファイルには設定済みのフローの位置と各コネクタインスタンス間の関係が含まれます。フローページでコネクタを移動、再接続することとflow.json を直接変更するのは、実質的に同じことです。
Roles.json
roles.json ファイルにはすべてのカスタムユーザーロールに関する詳細が含まれます。roles.json を直接編集することは、ロールページでロールを追加・設定することと同じ効果があります。
Settings.json
settings.json ファイルには、アプリケーション内で値ではなく参照名を使用することで、別の箇所で参照できる設定の一覧が含まれます。これにより、セキュアな値(パスワードなど)をアプリケーションに表示しない方法で保存することができます。また、参照名を使用して、複数のインスタンスにデプロイされているフローの設定を一元化することもできます。
この統一された参照構文はUI 上で「鍵」アイコンが付いた設定でサポートされており、それをクリックすることでsettings.json ファイルで定義された参照の一覧を閲覧できます。詳しくは、グローバル設定Vault を参照してください。
Users.json
users.json ファイルにはすべての のユーザーに関する詳細が含まれます。users.json を直接編集することは、ユーザーページでユーザーを追加・編集することと同じ効果があります。
証明書
本アプリケーションで作成、またはアップロードされた証明書はすべてdata ディレクトリに保存されます。通常、証明書はパブリックとプライベートの対となっており、プライベートは.pfx、パブリックは.cer と異なる拡張子となっています。アプリケーションにアップロードされた他のフォーマットの証明書はそのまま保存されます。
は、data ディレクトリの証明書を列挙して、UI から証明書を設定する際に利用可能なオプションを決定します。証明書ファイルをdata ディレクトリに追加することは、UI で証明書をアップロードすることと同じ効果があります。
コネクタフォルダ
設定済みの各コネクタインスタンス用に、data ディレクトリに専用のフォルダが設置されています。フォルダ名はフロー内の各コネクタのConnectorId の値(表示名)と一致します。上のフォルダ構造例では、‘AS2_Amazon’ と’Database_MySQL’ の2つが設定済みコネクタです。
コネクタフォルダの内容はコネクタファイルとフォルダセクションで説明されています。コネクタフォルダ内のサブフォルダ構造の概要は以下のとおりです:
- Logs:コネクタが処理した各メッセージのverbose ログファイル
- Received:コネクタが受信したメッセージのログ。各メッセージはMessageId に一致する独自のフォルダを持っています
- Sent:コネクタが送信したメッセージのログ。各メッセージはMessageId に一致する独自のフォルダを持っています
- Receive:コネクタが受信または処理したメッセージ
- Send:コネクタが送信または処理すべきメッセージ
- Sent:処理に成功したメッセージのコピー(生データファイル形式)
- Pending:他のパーティからの確認応答を待っている処理済みのメッセージ
- Public:アプリケーションでパブリックエンドポイントとしてパブリッシュされるべきファイル
- Schemas:特定のコネクタに固有の(EDI スキーマのような)スキーマファイル
- Templates:コネクタのインプット、アウトプットデータのXML 表示
フォルダ階層のデザイン判断
のデータは透明性を保ち簡単にアクセスできる状態にしておきたいと考えているため、本アプリケーションの特定のファイルは簡単に見つけられるようになっています。シンプルな階層を持ったフォルダ構造にすることで、ユーザーや外部システムが のデータファイルを見つけやすくなっています。 のUI はアプリケーションを設定、使用する上で便利なインターフェースとなっていますが、他のソリューションに完全に組み込むことができるようにもしたいと考えています。 のフォルダ構造を理解しさえすれば、他のソリューションは に関連するすべてのデータを参照することができます。オートメーション
のオートメーションサービスは各コネクタのトランザクションフォルダ内でファイルを処理します。オートメーションサービスは0.5秒毎の クロックティック で実行され、メッセージは各ティック毎にフローを1ステップ進みます。 は、複数スレッドを各コネクタに割り当てることで並列処理をサポートし、各スレッドはコネクタで複数ファイルを処理することができます。割り当てられるワーカー数とワーカー毎に処理されるファイル数は、プロファイルのパフォーマンス設定と各コネクタの設定で決まります。クロックティック
事前定義された間隔(デフォルトでは500ミリ秒)で、 はすべての設定済みコネクタのSend フォルダをチェックし、新しいファイルが見つかればワーカースレッドを割り当てて、コネクタ設定に応じてファイルを処理します。 本アプリケーションはどのコネクタのインプットが最初に一覧化されるか保証しません。複数のファイルが単一コネクタのSend フォルダに存在する場合、それらは最終更新時に応じて処理されます(最も古い変更時間のファイルが最初に処理されます)。 がファイルを処理しようとする際には、処理時のタイムスタンプを付加したメッセージヘッダーを追加し、これによってファイルの最終更新時が変わります。ファイルが処理に失敗した場合(エラーが起きた場合)、Send フォルダの他のファイルに対する優先順位は最低になります。これによって1つのファイルが何度もエラーとなって即座に中止され、コネクタの操作をブロックしてしまわないようにします。並列処理
並列処理を有効化すると、 は1度のクロックティック内で複数ワーカースレッドを同じコネクタに分散できます。これらワーカーの数と動作は、設定ページの高度な設定タブ内の3つの設定で決まります(その内いくつかは個々のコネクタの高度な設定タブから上書きできます):- ワーカープール:アプリケーションがコネクタ全体に同時に割り当て可能な全体の最大スレッド数を決定します。スレッドが特定のコネクタ内で割り当てを完了したら、プールにリサイクルされます。ホストマシンのハードウェアリソースがこの設定の上限を決定します。
- コネクタあたりの最大ワーカー数:1つのコネクタに同時に割り当て可能な最大スレッド数を決定します。コネクタに割り当てられた各スレッドはそのコネクタのSend フォルダ内のファイルを、フォルダが空になるまで(またはコネクタあたりの最大ファイル数に達するまで)1つずつ処理します。この条件に達すると、コネクタに割り当てられたスレッドは処理の完了後ワーカープールにリサイクルされます。この設定は個々のコネクタの高度な設定タブで上書きできます。
- コネクタあたりの最大ファイル数:1回のクロックティック内で1つのコネクタ内で処理されるファイル数の上限を決定します。例えば、この設定を5に指定すると、コネクタのSend フォルダにまだファイルが残っていても、コネクタに割り当てられたスレッドは(合計で)5ファイル処理したあとにワーカープールにリサイクルされます。この設定は個々のコネクタの高度な設定タブで上書きできます。これを0に設定すると、コネクタはスレッドが割り当てられた時点でコネクタに存在するすべてのファイルを処理しようと試みます。

パフォーマンスの最大化
コネクタあたりの最大ワーカー数とコネクタあたりの最大ファイル数の設定は、あるコネクタが他のものより多い、または少ないリソースを必要とする際に、それに応じて各コネクタで調整することで のパフォーマンスを最大化するのに役立ちます。 特定のコネクタのコネクタあたりの最大ワーカー数を増やすと、アプリケーションはそのコネクタのインプットファイルの処理により多くのシステムリソースを割り当てます。特定のコネクタがフローのスループットのボトルネックになっている際には有効です。しかし、スレッドはラウンドロビン方式で割り当てられるため、多くのコネクタでこの設定を増やすとアプリケーションがワーカープール内のスレッドを使い尽くしてしまう可能性があります。その場合、残ったコネクタにスレッドを割り当てるには、アプリケーションは他のスレッドが完了するまで待たなくてはなりません。 特定のコネクタのコネクタあたりの最大ワーカー数を下げることで、ファイルの処理中にコネクタがワーカープールを大きく圧迫するのを避けることができます。これは、ラウンドロビンでの割り当て中にアプリケーションがスレッドを使い尽くしてしまうのを避けるのに役立ちます。しかし、コネクタのSend フォルダに大量のファイルがある場合、スレッド数が小さいとファイルの処理を完了してプールにリサイクルするまでに時間がかかることがあります(次に説明するように、コネクタあたりの最大ファイル数も調整されていない場合)。 特定のコネクタのコネクタあたりの最大ファイル数を上げる(または0 に設定してすべてのファイルを処理する)ことで、複数回クロックティックしてもファイルがコネクタのSend フォルダに残ったままにならないようにすることができます。これは、大容量コネクタのスループットを向上させるのに役立ちます。ただし、これによってコネクタに割り当てられたスレッドが長時間ワーカープールにリサイクルされない(これにより、スレッド不足を引き起こす)可能性も上昇します。
特定のコネクタのコネクタあたりの最大ファイル数を下げることで、そのコネクタに割り当てられたスレッドが時間どおりにプールにリサイクルされます。しかし、Send フォルダ内のファイル数がティック毎の最大処理数を超えた場合、ファイルが1回のクロックティック内で処理されない可能性もあります。
パフォーマンスの最大化は、特定の環境やユースケースに依存します。一般的には、大量のファイルを処理または送信する必要があるコネクタにはより多くのワーカーを割り当て、ワーカーがリサイクル前により多くのファイルを処理できるようにするとよいでしょう。スレッドプールを枯渇させないためには、他のコネクタに割り当てるワーカーと、ワーカーが処理するファイルを減らすのがよいでしょう。
受信オートメーション
では、上記のインプットファイルの自動処理は_送信_ オートメーションと呼ばれます。 は 受信 オートメーションもサポートしており、これはコネクタがスケジュールされた間隔に従って、 のフローに自動でファイルを入れていく処理を記述します。 受信操作は次の2つのカテゴリに分けられます:- リモートホストまたはサーバー(FTP、SFTP、S3 など)からファイルをダウンロード
- バックエンドシステム(データベース、ERP システム、CRM など)からデータを取得してXML として書き込み