JavaTM 2 Platform
Standard Ed. 5.0

javax.print
インタフェース MultiDoc


public interface MultiDoc

MultiDoc インタフェースは、Print Job 用印刷データの複数部分を提供するオブジェクトに対するインタフェースを指定します。「Doc」は、「印刷データの一部」を意味する、短く発音しやすい用語で、「multidoc」は、複数 doc のグループです。クライアントは Print Job に MultiDoc インタフェースを実装するオブジェクトを渡し、Print Job はそのオブジェクトに対してメソッドを呼び出して印刷データを取得します。

MultiDoc インタフェースは、doc の「リンクリスト」に類似した抽出を提供します。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 つのパターンのどれかを使用できます。

  1. インターリーブ化パターン: 現行の multidoc から doc を取得する。現行の doc から印刷データ表現オブジェクトを取得する。印刷データ表現オブジェクトからすべての印刷データを取得する。現行の multidoc から次の multidoc を取得し、次の multidoc が存在しなくなるまでこの操作を繰り返す (上記のコード例はインターリーブ化パターンを使用)

  2. 同時発生パターン: 現行の multidoc から doc を取得してリストに保存する。現行の multidoc から次の multidoc を取得し、次の multidoc が存在しなくなるまでこの操作を繰り返す。次に、保存済みの doc のリストに対し繰り返し操作を行う。現行の doc からすべての印刷データ表現オブジェクトを取得する。印刷データ表現オブジェクトからすべての印刷データを取得する。リスト内の次の doc に移動し、次の doc が存在しなくなるまでこの操作を繰り返す
ここで、印刷クライアントが印刷データを生成中で、印刷データの複数部分を一度に格納するリソースを保持していない場合について考えてみましょう。印刷サービスプロキシが、同時発生パターンを使用して印刷データを取得した場合、問題が発生し、停止する可能性のあるクライアントがあります。これは、印刷サービスプロキシがビジー状態から解放されて doc の印刷データを要求するまで、印刷データすべてを保持することが必要になり、クライアントにはこの処理をこなすことができないからです。このようなクライアントの場合、印刷サービスプロキシは、インターリーブ化パターンを使用する必要があります。

この問題に対処し、Print Job に複数の doc を提供するクライアントの設計を簡略化するため、multidoc 印刷ジョブをサポートする各 Print Service プロキシは、インターリーブ化パターンを使用して MultiDoc オブジェクトにアクセスする必要があります。つまり、MultiDoc オブジェクトが指定されると、印刷サービスプロキシは、現行の Doc オブジェクトの取得に成功するまで、getDoc() を 1 回または複数回呼び出します。印刷サービスプロキシは、次に現行 doc の印刷データを取得しますが、すべての印刷データを取得するか、回復不可能なエラーが発生するまで次の作業に進みません。作業を続行可能な場合、印刷サービスプロキシは、次の MultiDoc オブジェクトまたは次が存在しないとの指示を取得するまで、next() を 1 回または複数回呼び出します。MultiDoc インタフェースの実装は、印刷サービスプロキシがこのインターリーブ化パターンに従うものと見なすことができます。その他のパターンの場合、MultiDoc 実装の動作は指定されません。

1 つの multidoc に同時にアクセス可能なクライアントスレッドの数に制限はありません。このため、MultiDoc インタフェースの実装はすべて、複数のスレッドに対して安全に設計する必要があります。実際、Print Job スレッドが (概念上の) リストの先頭から doc を取得中に、クライアントスレッドがリストの最後に doc を追加することがあり得ます。multidoc オブジェクトが複数のスレッドを適正に同期させることができるなら、2 つのスレッドが相互に干渉することはありません。


メソッドの概要
 Doc getDoc()
          現行の doc オブジェクトを取得します。
 MultiDoc next()
          doc オブジェクトシーケンス内で次の doc オブジェクトを含む multidoc オブジェクトに移動します。
 

メソッドの詳細

getDoc

Doc getDoc()
           throws IOException
現行の doc オブジェクトを取得します。

戻り値:
現行の doc オブジェクト
例外:
IOException - ドキュメントの読み込み中にエラーが発生した場合にスローされる

next

MultiDoc next()
              throws IOException
doc オブジェクトシーケンス内で次の doc オブジェクトを含む multidoc オブジェクトに移動します。

戻り値:
次の doc オブジェクトを含む Multidoc オブジェクト、または、次の doc オブジェクトが存在しない場合は null
例外:
IOException - 次のドキュメントの検出中にエラーが発生した場合にスローされる

JavaTM 2 Platform
Standard Ed. 5.0

バグの報告と機能のリクエスト
さらに詳しい API リファレンスおよび開発者ドキュメントについては、Java 2 SDK SE 開発者用ドキュメントを参照してください。開発者向けの詳細な解説、概念の概要、用語の定義、バグの回避策、およびコード実例が含まれています。

Copyright 2004 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms. Documentation Redistribution Policy も参照してください。