リモート共通インターフェイスを利用することで、Apcoordinatorを利用して開発したEJBや、一般的なEJBを同じインターフェイスで呼び出すことが可能です。詳細は“20.3 リモート共通インターフェイス”を参照してください。
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){ ... } ... } }