Aglets Workbench

To Aglets Workbench Home pageWriterアプリケーション

解説

Writerの実行方法

トラブルシューティング

プログラム解説

このプログラムは以下のクラスで構成されています。

Writerクラス

WriterクラスはSampleAglet抽象クラスを継承してステーショナリーなAgletとして作られます(SampleAglet 抽象クラスについてはここを参照してください)。Writer クラスのgoメソッドでスレーブAgletが作られます。

  
    protected void go(URL url, Strin text) {
      ...
      AgletContext ac = null;
      String username = "Unknown";
      try { ac=getAgletContext();
            username = ac.getProperty("aglets.tahiti.user.name", "Unknown");
      } catch ...
      Arguments args = new Arguments();
      args.putArgument("msg",text);
      args.putArgument("user", username);
      try {
         Slave.create(null, "ibm.aglets.samples.WriterSlave", getAgletContext(),
                      this, new SeqItinerary(url), args);
      } catch ...
   }

スレーブは単一の目的地を示す旅行計画(urlパラメータ)、メッセージテキスト(textパラメータ)、 そしてメッセージテキストと送り手のユーザー名を含むArgument object (argsパラメータ)を与えられます。 Writer Agletはスレーブのマスターと考えられます(Slave.create メソッドの中ではthisという引数で表わされています)。

Writer Agletはマスターとしてスレーブの結果を受け取ります (callbackメソッドで処理は行われます)、またスレーブが仕事を果たせなかったときにはエラーメッセージを受け取ります(inErrorメソッドで処理されます)。

   protected synchronized void callback(Object obj) {
       if (obj != null) {
           try { setTheMessage((String)obj); // print on the message panel
           } catch (Exception e) {
               // not yet implemented
           }
       }
   }

callbackメソッドはオーバーライトされて次のような働きをします。結果(String object)を受け取り、(setTheMessageメソッドを経由して)ウィンドウの中のメッセージパネルに表示します。

WriterSlaveクラス

WriterSlaveクラスはスレーブクラスの中の抽象メソッドを実装しています。 そのなかにinitializeJob()doJob()というメソッドがあります。.

   private final int SHOW_TIME = 10
   
   protected synchronized void doJob() throws AgletException {
      WriterSlaveWindow win = null;
      try {
          String from = new String ((String)(((Arguments)ARGUMENT).getArgument("user")) +                         
                                    "@" +
                                    getOrigin().getHost());
          win = new WriterSlaveWindow(this,
                                      (String)(((Arguments)ARGUMENT).getArgument("msg")), // the message
                                      from); // the sender
      } catch (Exception e) {
         ... 
      }
      wait(SHOW_TIME);  
      win.dispose();
      setResult("returned" + ((RESULT != null) ? ":" + (String)RESULT : ".")); // acknowledgment 
  }

doJob()メソッドの中では、スレーブは新しいWriterSlaveWindowのインスタンスであるウィンドウをポップアップさせます(このクラスはWriterSlaveクラスのソースファイルの中に含まれています)。ウィンドウにはメッセージとその送り手の情報(ユーザー名とホスト名)が表示されます。 QuitもしくはThankボタンが押されなくとも、10秒たてばウィンドウは閉じられます。

ソースコード

Writer Agletについてより詳細な情報をお望みならソースコードをお読み下さい。


IBM home page | 日本IBM | 著作権 | 商標
Last modified: Fri December 27 12:00:00 JST 1996