アプリケーションは、作業域の使用を終了した後に、UserWorkArea インターフェースの complete メソッドを呼び出して、その作業域を終了する必要があります。 これにより、呼び出し元のスレッドとの関連が終了 し、作業域は破棄されます。 complete メソッドがネストされた作業域上に呼び出された場合、 ネストされた作業域は終了し、 親作業域が現行の作業域となります。 呼び出し元のスレッドに 関連付けられている作業域がない場合は、NoWorkArea 例外が作成されます。
すべての作業域には 終了処理が必要です。また作業域は親プロセスによってのみ終了できます。 例えば、クライアント の作成した作業域でサーバーが complete メソッドを呼び出そうとした場合、NotOriginator 例外が作成されます。 サーバー・プロセスで作成された作業域は、呼び出し元のクライアント・プロセスに戻されることはありません。
次のコード例は、クライアント・アプリケーションで作成された作業域の終了を 示したものです。
public class SimpleSampleServlet { ... userWorkArea.begin("SimpleSampleServlet"); userWorkArea.set("company", SimpleSampleCompany.Main, PropertyModeType.read_only); userWorkArea.set("priority", SimpleSamplePriority.Silver); ... // Do application work. ... // Terminate the work area. try { userWorkArea.complete(); } catch (NoWorkArea e) { // There is no work area associated with this thread. ... } catch (NotOriginator e) { // The work area was imported into this process. ... } ... }
次のコード例は、リモート呼び出しで以前に作成したネスト済み作業域を 完了させるサンプル・アプリケーションを示したものです。
public class SimpleSampleBeanImpl implements SessionBean { public String [] test() { ... // Begin a nested work area. userWorkArea.begin("SimpleSampleBean"); try { userWorkArea.set("company", SimpleSampleCompany.London_Development); } catch (NotOriginator e) { } SimpleSampleCompany company = (SimpleSampleCompany) userWorkArea.get("company"); SimpleSamplePriority priority = (SimpleSamplePriority) userWorkArea.get("priority"); // Complete all nested work areas before returning. try { userWorkArea.complete(); } catch (NoWorkArea e) { } catch (NotOriginator e) { } } }