MultiDoc
は、印刷ジョブに対して複数の印刷データを供給するオブジェクトのインタフェースを指定します。 「Doc」は、「印刷データの一部」を意味する、短く発音しやすい用語で、「multidoc」は、複数docのグループです。 クライアントは、インタフェースMultiDoc
を実装しているオブジェクトをプリント・ジョブに渡します。プリント・ジョブは、そのオブジェクトのメソッドを呼び出して、プリント・データを取得します。
インタフェースMultiDoc
は、docsの"リンク・リスト"に似た抽象化を提供します。 multidocオブジェクトは、リンク・リスト内のノードに似ており、リスト内の現行docおよびリスト内の次のノード(multidoc)へのポインタを含みます。 Print JobはmultidocのgetDoc()
メソッドを呼び出して、現行のdocを取得できます。 次のdocに進む準備ができたら、Print Jobはmultidocのnext()
メソッドを呼び出して、次のmultidoc (次のdocを含む)を取得できます。 このため、multidocへのアクセスを実行するPrint Jobコードは、次のようになります。
void processMultiDoc(MultiDoc theMultiDoc) { MultiDoc current = theMultiDoc; while (current != null) { processDoc (current.getDoc()); current = current.next(); } }もちろん、インタフェース
MultiDoc
は、契約を満たす方法で実装できます。実装でリンクされたリストを使用する必要はありません。
multidoc印刷ジョブの印刷データすべてを取得する場合、Print Serviceプロキシは次の2つのパターンのどれかを使用できます。
- インターリーブ化パターン: 現行のmultidocからdocを取得する。 現行のdocからすべての印刷データ表現オブジェクトを取得する。 印刷データ表現オブジェクトからすべての印刷データを取得する。 現行のmultidocから次のmultidocを取得し、次のmultidocが存在しなくなるまでこの操作を繰り返す。 (上記のコード例はインターリーブ化パターンを使用)
- 同時発生パターン: 現行のmultidocからdocを取得してリストに保存する。 現行のmultidocから次のmultidocを取得し、次のmultidocが存在しなくなるまでこの操作を繰り返す。 次に、保存済みのdocのリストに対し繰り返し操作を行う。 現行のdocからすべての印刷データ表現オブジェクトを取得する。 印刷データ表現オブジェクトからすべての印刷データを取得する。 リスト内の次のdocに移動し、次のdocが存在しなくなるまでこの操作を繰り返す
この問題に対処し、複数のドキュメントを印刷ジョブに提供するクライアントの設計を簡素化するために、マルチ・ドット印刷ジョブをサポートするすべての印刷サービス・プロキシは、インターリーブされたパターンを使用してMultiDoc
オブジェクトにアクセスする必要があります。 つまり、MultiDoc
オブジェクトを指定すると、現在のDoc
オブジェクトが正常に取得されるまで、プリント・サービス・プロキシはgetDoc()
を1回以上呼び出すことになります。 印刷サービス・プロキシは、次に現行docの印刷データを取得しますが、すべての印刷データを取得するか、回復不可能なエラーが発生するまで次の作業に進みません。 それが継続できる場合、プリント・サービス・プロキシは、次のMultiDoc
オブジェクトまたはそれ以上存在しないという指示を正常に取得するまで、next()
を1回以上呼び出す。 インタフェースMultiDoc
の実装では、このインターリーブされたパターンに従って、プリント・サービス・プロキシが処理されるものと想定できます。他の使用パターンでは、MultiDoc
実装の動作は指定されていません。
1つのmultidocに同時にアクセス可能なクライアント・スレッドの数に制限はありません。 このため、MultiDocインタフェースの実装はすべて、複数のスレッドに対して安全に設計する必要があります。 実際、Print Jobスレッドが(概念上の)リストの先頭からdocを取得中に、クライアント・スレッドがリストの最後にdocを追加することがあり得ます。multidocオブジェクトが複数のスレッドを適正に同期させるのであれば、2つのスレッドが相互に干渉することはありません。
-
メソッドのサマリー
-
メソッドの詳細
-
getDoc
Doc getDoc() throws IOException現行のdocオブジェクトを取得します。- 戻り値:
- 現在のdocオブジェクト
- 例外:
IOException
- 文書を読むときにエラーが発生した場合
-
next
MultiDoc next() throws IOExceptiondocオブジェクト・シーケンス内で次のdocオブジェクトを含むmultidocオブジェクトに移動します。- 戻り値:
- 次のdocオブジェクトを含むmultidocオブジェクト、またはそれ以上のdocオブジェクトがない場合は
null
- 例外:
IOException
- 次の文書の検索中にエラーが発生した場合
-