Aglets Workbench

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

解説

Fingerの実行方法

トラブルシューティング

プログラム解説

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

Fingerクラス

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

  private static final String SlaveClassName = "ibm.aglets.samples.FingerSlave";

  protected void go(URL url) {
      super.go(url);
      try {
          Slave.create(null, SlaveClassName, getAgletContext(),
                       this, new SeqItinerary(url), new String());
      } catch (IOException ae) {
        .....
      }
   }

スレーブは単一の目的地を示す旅行計画(urlパラメータ)を与えられます。 Finger Agletはスレーブのマスターと考えられます(Slave.create メソッドの中ではthisという引数で表わされています)。

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

   protected synchronized void callback(Object arg) {
      setTheMessage("Finished");
      if (arg != null)
          _msw.setResult( ((FingerInfo)arg).toTextBlock());
   }

callbackメソッドはオーバーライトされて次のような働きをします。結果(FingerInfoオブジェクト)を受け取り、(toTextBlockメソッドを経由して)テキスト文字列に変換し、(setResultメソッドを経由して)ウィンドウの中のメッセージパネルに表示します。

FingerSlaveクラス

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

   protected synchronized void doJob() throws AgletException {
      RESULT = getLocalInfo();
   }

   private Object getLocalInfo() throws AgletException {
      AgletContext ac = getAgletContext();
      String hostname; 
      
      // compute hostname

      FingerInfo info = 
         new FingerInfo (hostname,
                (String)ac.getProperty("aglets.tahiti.user.name", "Unknown"),
                (String)ac.getProperty("aglets.tahiti.user.organization", "Unknown"),
                (String)ac.getProperty("aglets.tahiti.user.email", "Unknown"),
                (String)ac.getProperty("aglets.tahiti.registered", "Unknown"),
                (new Date())
                );

         return info;
   } 

doJob()メソッドの中では、スレーブはそこでのユーザー情報を(Agletサーバーのプロパティから)引き出し、 FingerInfoオブジェクトの形に情報を加工します。そしてそのオブジェクトをスレーブの実行結果であるインスタンス変数とします(これは最終的にはマスターに送られます)。

ソースコード

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


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