ページの先頭行へ戻る
 Apcoordinatorユーザーズガイド

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

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

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){ ... } ... } }