この付録では、Java New I/O (NIO) APIを使用して多数のエンドポイントのリニア・スケーラビリティを達成する方法について説明します。
この付録の内容は次のとおりです。
古いJava IO APIを使用している場合、スレッド管理に関連する問題のため、サーバーを数千のユーザーに拡大することができませんでした。Java New IO (NIO)フレームワークは、Java NIO APIを活用してスケーラブルで堅牢なサーバーを構築できるように設計されたものです。
Javaベースのソケット実装を使用して古いIOシステムでエンドポイントを管理すると、Oracle SOA Suite for healthcare integrationのスケーラビリティの問題が発生します。この問題を解決するために、Oracle SOA Suite for healthcare integrationではNIOベースのトランスポート実装を使用しています。NIOフレームワークは、TCP/IPやUDP/IPなどの各種トランスポートを介する抽象的なイベントドリブンの非同期APIを提供します。
注意:
否定確認および汎用TCPがサポートされる場合、NIOはサポートされません。
Oracle SOA Suite for Healthcare Integrationでは、NIOサポートを使用して、待機時間の向上、スケーラビリティの向上、スループットの最大化およびパフォーマンスの最大化のためにMLLPメッセージを交換します。
Oracle SOA Suite for healthcare integrationでは、既存のソケットベースのIO実装に影響を与えることなく、現在のアーキテクチャでNIOの機能をシームレスに使用します。NIOベースのトランスポートに切り替えるには、次の操作を実行する必要があります。
Oracle Fusion Middleware Enterprise Manager Controlコンソールで、b2b.nio
サーバー・プロパティをtrue
に設定します。
注意:
プロパティを有効にするには、サーバーを再起動する必要があります。
このプロパティが設定されていない場合、デフォルトの動作として既存のソケットベースのトランスポートが使用されます。
注意:
実行時に両方のトランスポート実装(ソケットIO実装とNIO実装)を一緒に使用することはできません。つまり、あるエンドポイントでNIOベースのトランスポートを使用し、別のエンドポイントでソケットベースのIOトランスポートを使用することはできません。
NIOベースのフレームワークは、MLLP 1.0ベースのメッセージ交換に対して次のサポートを提供します。
サーバー・タイプおよびクライアント・タイプのソケット
通信の同期モードおよび非同期モード
一時接続および永続接続
メッセージ交換の再試行およびタイムアウトのポリシー
エンドポイントの作成
エンドポイントの有効化と無効化
エンドポイントの更新
注意:
NIOフレームワークを使用してダッシュボードから1000個のエンドポイントを有効化または無効化すると、時間がかかります。この機能は、1回に最大100個のエンドポイントで試行することをお薦めします。
NIOフレームワークでは、ワーカー・スレッド・プール・モデルに基づく自身のスレッド・プール・デフォルトが使用されます。ただし、Oracle SOA Suite for healthcare integrationでは、ワーカー・スレッド・プール・サイズを指定できます。
ワーカー・プール・サイズを指定するには、Oracle Fusion Middleware Enterprise Manager Controlコンソールで次のプロパティを設定します。
b2b.nio.minWorkerPoolSize
= n (デフォルトは3
)
b2b.nio.maxWorkerPoolSize
= n (デフォルトは5
)
ここで、nはスレッド・プール・サイズです。
Oracle SOA Suite for healthcare integrationランタイムでは、セレクタ・カウントの値がサーバーのCPUの使用可能なコア数と等しい値に自動的に設定されます。セレクタ・プール・サイズの最小値と最大値を構成するには、Oracle Fusion Middleware Enterprise Manager Controlコンソールで次のプロパティを設定します。
b2b.nio.minSelectorPoolSize
b2b.nio.maxSelectorPoolSize
注意:
プロパティを有効にするには、サーバーを再起動する必要があります。