Apcoordinator ユーザーズガイド
目次 前ページ次ページ

付録D Strutsとの連携

D.3 リモート共通インタフェースの利用

リモート共通インタフェースを利用することで、Apcoordinatorを利用して開発したEJB/Webサービスや、一般的なEJB/Webサービスを同じインタフェースで呼び出すことが可能です。詳細はリモート共通インタフェースを参照してください。

Strutsアプリケーションでリモート共通インタフェースを利用するためには、com.fujitsu.uji.ext.InitialCallFactoryクラスを利用してCallFactoryオブジェクトを取得してください。


import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionMapping;
import com.fujitsu.uji.ext.CallFactory;
import com.fujitsu.uji.ext.InitialCallFactory;

public class MyAction extends Action {

  public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request,
                               HttpServletResponse response) throws Exception {
    ...
    try{
      CallFactory factory = (CallFactory)InitialCallFactory.createFactory(servlet);
      Call call = factory.createCall("myejb");
      ResponseBean responseBean = (ResponseBean)call.invoke(dataBean, "verb");
    } catch(Throwable e){
      ...
    }
      ...
  }
}

EJBのセション情報の同期機能を利用する場合は、あらかじめ同期するオブジェクトをセションスコープにセットしておく必要があります。このとき、オブジェクトはjava.io.Serializableインタフェースを実装したものとし、オブジェクトに関連付ける名前にはcom.fujitsu.uji.SessionProfile.SYNCDATAHOLDERKEYを使用してください。

セションスコープにセットするクラスの例を次に示します。この例ではセションに保持する情報としてユーザIDを使用しています。



public class SynchronizedData implements java.io.Serializable {
  protected String userId = null;

  public String getUserId(){
    return userId;
  }

  public void setUserId(String userId){
    this.userId = userId;
  }
}

セション情報の同期機能を利用した場合のリモート共通インタフェースの利用例を次に示します。
CallFactoryオブジェクトの生成にはInitialCallFactory#createFactory(Servlet, HttpSession)を使用してください。


import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionMapping;
import com.fujitsu.uji.ext.CallFactory;
import com.fujitsu.uji.ext.InitialCallFactory;

public class MyAction extends Action {

  public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request,
                               HttpServletResponse response) throws Exception {
    ...

    SynchronizedData syncData = new SynchronizedData();
    HttpSession session = request.getSession();
    session.setAttribute(SessionProfile.SYNCDATAHOLDERKEY, syncData);

    try{
      CallFactory factory = (CallFactory)InitialCallFactory.createFactory(servlet, session);
      Call call = factory.createCall("myejb");
      ResponseBean responseBean = (ResponseBean)call.invoke(dataBean, "verb");
    } catch(Throwable e){
      ...
    }
    ...
  }
}


目次 前ページ次ページ

All Rights Reserved, Copyright © 富士通株式会社 2000-2005