|
||||||||||
| 前のクラス 次のクラス | フレームあり フレームなし | |||||||||
| 概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド | |||||||||
java.lang.Objectjp.co.fujitsu.reffi.client.android.action.AbstractAction
jp.co.fujitsu.reffi.client.android.action.BaseAction
public class BaseAction
[概 要]
イベント発生時、コントローラによって起動されるActionの基底クラスです。[詳 細]
jp.co.fujitsu.reffi.client.swing.controller.AbstractController#bind(EventBinder)
によって登録したイベントに対応してこのクラスの継承アクションクラスが起動されます。prepare(ParameterMapping)#validators(List), #validationFault(ValidateErrors)reserveModels(List), nextModel(int, ModelProcessEvent, Model)successForward(int, Model, Object)failureForward(int, Model, Exception)[備 考]
上記のようにこの基底クラスは、処理フローを実装して開発手順の型決めを行っています。DispatchActionを、FlexibleActionを基底クラスとして選択して下さい。
使用例)
典型的なBaseAction継承アクション
package demo.client.form.action;
import java.util.List;
import jp.co.fujitsu.reffi.client.swing.action.BaseAction;
import jp.co.fujitsu.reffi.client.swing.model.HTTPRequestCore;
import jp.co.fujitsu.reffi.client.swing.model.Model;
public class OpenPostalWindowAction extends BaseAction {
// ①前準備処理を実装します
@Override
protected boolean prepare(ParameterMapping parameterMapping) throws Exception {
System.out.println("サーブレットと通信してユーザ、パスワードを登録します。");
return true;
}
// ②機能モデルを登録します
@Override
protected void reserveModels(List> models) {
models.add(HTTPRequestCore.class);
}
// ③コントローラによってインスタンス化された機能モデルの設定を行います
@Override
public void nextModel(int index, Model prev, Model next) throws Exception{
switch(index){
case 0:
// 画面からユーザ名とパスワードを取得
String user = getComponentValueAsString("userRegistFrame.jtfUser");
char[] pass = (char[])getComopnentValue("userRegistFrame.jpwPass");
// サーバロジックは任意
((HTTPRequestCore)next).setRequestUrl("UserRegist.do");
((HTTPRequestCore)next).addUrlParameters("user", user);
((HTTPRequestCore)next).addUrlParameters("pass", String.valueOf(pass));
break;
}
}
// ④機能モデルの正常終了処理結果をハンドリングします
@Override
public void successForward(int index, Model model, Object result) throws Exception {
System.out.println("ユーザ登録正常終了");
}
// ④´機能モデルの異常終了処理結果をハンドリングします
@Override
public Exception failureForward(int index, Model model, Exception e) {
System.out.println("ユーザ登録異常終了");
}
}
一回目の通信結果に応じて二回目の通信を振り分ける
package demo.client.distribute.action;
import java.util.List;
import jp.co.fujitsu.reffi.client.swing.action.BaseAction;
import jp.co.fujitsu.reffi.client.swing.model.HTTPRequestCore;
import jp.co.fujitsu.reffi.client.swing.model.Model;
import demo.share.dao.DataDao;
public class DistributeLogicAction extends BaseAction {
@Override
protected void reserveModels(List> models) {
models.add(HTTPRequestCore.class);
models.add(HTTPRequestCore.class);
}
@Override
public void nextModel(int index, Model prev, Model next) throws Exception{
// サーバロジックは任意
((HTTPRequestCore)next).setRequestUrl("webcontroller");
switch(index){
case 0:
((HTTPRequestCore)next).addUrlParameters("model.fqcn", "demo.server.model.FetchDataModel");
break;
case 1:
DataDao dao = (DataDao)prev.getResult();
int div = dao.getDivision();
// 一回目の通信結果を判断して実行するサーバロジックを切り替える
if(div == 0) {
((HTTPRequestCore)next).addUrlParameters("model.fqcn", "demo.server.model.Div0Model");
}else {
((HTTPRequestCore)next).addUrlParameters("model.fqcn", "demo.server.model.Div1Model");
}
}
}
}
登録した機能モデルを並列実行する
package demo.communication.action;
import java.util.List;
import jp.co.fujitsu.reffi.client.swing.action.BaseAction;
import jp.co.fujitsu.reffi.client.swing.controller.ParameterMapping;
import jp.co.fujitsu.reffi.client.swing.event.ModelProcessEvent;
import jp.co.fujitsu.reffi.client.swing.model.EJBProxyCore;
import jp.co.fujitsu.reffi.client.swing.model.HTTPRequestCore;
import jp.co.fujitsu.reffi.client.swing.model.Model;
import jp.co.fujitsu.reffi.client.swing.model.WebServiceCore;
import demo.server.ws.heavyprocess.HeavyProcess;
import demo.server.ws.heavyprocess.HeavyProcessService;
public class ModelExecuteByParallelAction extends BaseAction {
@Override
protected boolean isRunModelsAndNoWait() throws Exception {
// ①このメソッドをオーバーライドしてtrueを返却することで、
// コントローラが機能モデルを実行する際、前のモデルの終了を待たなくなります。
return true;
}
@Override
protected void reserveModels(List> models) {
models.add(EJBProxyCore.class);
models.add(WebServiceCore.class);
models.add(HTTPRequestCore.class);
}
@Override
public boolean nextModel(int index, ModelProcessEvent prev, Model next) throws Exception {
switch(index) {
case 0:
System.out.println("EJBProxyCore : nextModel \n");
// ②trueを指定することで非同期スレッドでEJB通信が行われます。
((EJBProxyCore)next).setAsync(true);
((EJBProxyCore)next).setLookupName("ReffiFunctionalDemoForSwingServer/HeavyProcessBean/remote");
((EJBProxyCore)next).setMethodName("heavyProcess");
((EJBProxyCore)next).addParameter(5000L);
break;
case 1:
System.out.println("WebServiceCore : nextModel \n");
// ③trueを指定することで非同期スレッドでWebService通信が行われます。
((WebServiceCore)next).setAsync(true);
((WebServiceCore)next).setServiceClass(HeavyProcessService.class);
((WebServiceCore)next).setPortClass(HeavyProcess.class);
((WebServiceCore)next).setMethodName("heavyProcess");
((WebServiceCore)next).addParameter(5000L);
break;
case 2:
System.out.println("HTTPRequestCore : nextModel \n");
// ④trueを指定することで非同期スレッドでHTTP通信が行われます。
((HTTPRequestCore)next).setAsync(true);
((HTTPRequestCore)next).setRequestUrl("webcontroller");
((HTTPRequestCore)next).addUrlParamteter("model.fqcn", "demo.server.model.HeavyProcessModel");
break;
}
return true;
}
@Override
public void successForward(int index, Model model, Object result) throws Exception {
// ⑤モデル実行開始順(index順)では無く、処理終了順にsuccessForwardがコールバックされます。
switch(index) {
case 0:
System.out.println("EJB終了");
break;
case 1:
System.out.println("WebService終了");
break;
case 2:
System.out.println("HTTPリクエスト終了");
break;
}
}
@Override
public void complete(ParameterMapping parameterMapping) {
// ⑥全ての機能モデルが正常終了するとコールバックされます。
System.out.println("全通信モデル終了");
}
}
[環 境] JDK 6.0 Update 11
Copyright (c) 2008-2009 FUJITSU Japan All rights reserved.
| コンストラクタの概要 | |
|---|---|
BaseAction()
|
|
| メソッドの概要 | |
|---|---|
void |
complete(ParameterMapping parameterMapping)
[概 要] reserveModelsで登録されたモデル群が全て正常終了した契機でコールされます。 |
void |
done(ParameterMapping parameterMapping)
[概 要] reserveModelsで登録されたモデル群が全て終了、又は失敗した契機でコールされます。 |
java.lang.Exception |
failureForward(int index,
Model model,
java.lang.Exception e)
[概 要] モデル処理が異常終了した契機でコントローラにコールバックされるメソッドです。 |
BaseController |
getController()
[概 要] コントローラオブジェクトを取得します。 |
protected boolean |
isRunModelsAndNoWait()
[概 要] モデル群実行を非シーケンシャルに行うかどうかを設定するメソッドです。 |
boolean |
nextModel(int index,
ModelProcessEvent prev,
Model next)
[概 要] 予約モデルがコントローラによって実行される直前にコールバックされるメソッドです。 |
protected boolean |
prepare(ParameterMapping parameterMapping)
[概 要] BaseAction内で最初にテンプレートコールされるメソッドです。 |
protected void |
reserveModels(java.util.List<java.lang.Class<? extends Model>> models)
[概 要] Action処理終了後、コントローラに実行させるモデルクラス群の予約を行います。 |
ParameterMapping |
run(ParameterMapping parameterMapping)
[概 要] コントローラにコールされるアクションの主幹メソッドです。 |
void |
successForward(int index,
Model model,
java.lang.Object result)
[概 要] モデル処理が正常終了した契機でコントローラにコールバックされるメソッドです。 |
protected java.lang.Exception |
trap(java.lang.Exception e)
[概 要] Action内で発生した例外をハンドリングします。 |
| クラス jp.co.fujitsu.reffi.client.android.action.AbstractAction から継承されたメソッド |
|---|
addPermanent, findViewById, finishActivity, finishActivity, getActivity, getComponent, getComponentName, getComponentName, getComponentValue, getComponentValueAsString, getComponentValues, getParameterMapping, getPermanent, getPermanent, getSharedPreferences, removePermanent, setActivity, setController, setEventHandlerReturn, setParameterMapping, showToast, showToast, startActivity, startActivity, startActivityForResult, startActivityForResult |
| クラス java.lang.Object から継承されたメソッド |
|---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
| コンストラクタの詳細 |
|---|
public BaseAction()
| メソッドの詳細 |
|---|
public BaseController getController()
AbstractAction の記述:[概 要]
コントローラオブジェクトを取得します。[詳 細]
controllerフィールドを返却します。[備 考]
AbstractAction 内の getController
public ParameterMapping run(ParameterMapping parameterMapping)
throws java.lang.Exception
[概 要]
コントローラにコールされるアクションの主幹メソッドです。[詳 細]
継承クラスから情報を収集してコントローラに返却します。 以下の順にテンプレートメソッドがコールされます。prepare(ParameterMapping) : 前準備の実装、クライアント完結コードの実装#validators(List) : バリデータオブジェクトの登録#validate(List) : バリデーションの実行#validationFault(ValidateErrors) : バリデーションエラーハンドリングreserveModels(List) : 実行モデルの登録上記のコールフロー終了後、ParameterMappingオブジェクトがコントローラに返却されます。
prepare実装メソッドでfalseを返却した場合、又はvalidateメソッドが一つでも
ValidateErrorオブジェクトを返却した場合、
コントローラに返却されるParameterMappingオブジェクトはnullになります。
nullのParameterMappingを受け取ったコントローラは以降の処理を中止します。
[備 考]
このメソッドを実装する必要は有りません。
Action 内の runAbstractAction 内の runparameterMapping - MVC各レイヤを伝播するパラメータオブジェクト
java.lang.Exception - アクション実行例外
protected boolean prepare(ParameterMapping parameterMapping)
throws java.lang.Exception
[概 要]
BaseAction内で最初にテンプレートコールされるメソッドです。[詳 細]
デフォルト処理は有りません。 オーバーライド先でfalseを返却すると、それ以降のアクション処理は行われません。[備 考]
単純な処理等、クライアント内で完結するようなイベント処理や、 条件を判断して以降の処理を実行しない、等の処理を実装する場合は、 このメソッドをオーバーライドして処理を記述して下さい。使用例)
@Override
protected boolean prepare(ParameterMapping parameterMapping) throws Exception {
// 発言欄が空の状態で送信ボタンが押下された場合は送信しない
String chatRemark = getComponentValueAsString("chatFrame.jtfChatRemark")
if(chatRemark.length() == 0){
return false;
}else{
return true;
}
}
parameterMapping - MVC各レイヤを伝播するパラメータオブジェクト
java.lang.Exceptionprotected void reserveModels(java.util.List<java.lang.Class<? extends Model>> models)
[概 要]
Action処理終了後、コントローラに実行させるモデルクラス群の予約を行います。[詳 細]
デフォルト処理は有りません。[備 考]
Model I/Fを継承して自作モデルクラスを作成し、登録することが出来ますが、 HTTP、EJB、SOAPリクエスト、Pub/Subといった使用頻度の高い機能モデルについては Reffi F/Wでも提供しています。詳しくはmodelパッケージを参照して下さい。
models - 実行するモデルクラスを格納するリストオブジェクト
public boolean nextModel(int index,
ModelProcessEvent prev,
Model next)
throws java.lang.Exception
[概 要]
予約モデルがコントローラによって実行される直前にコールバックされるメソッドです。[詳 細]
reserveModelsで登録したモデル数+1回、コントローラによって呼び出されます。
isRunModelsAndNoWait()がfalseの場合、次回モデルの実行が
前回モデルの終了後であることが確約される為、prevの結果を元にnextの動作設定をすることが出来ます。
[備 考]
isRunModelsAndNoWait()がtrueの場合、コントローラはモデルの実行を
シーケンシャルには行いません。
index - 実行インデックス(0 ~ reserveModelsによるモデル登録数)prev - 前インデックスで実行されたモデル処理結果イベントnext - 次インデックスで実行される予定のモデルインスタンス
java.lang.Exception - オーバーライド先で発生する可能性の有る例外
protected boolean isRunModelsAndNoWait()
throws java.lang.Exception
[概 要]
モデル群実行を非シーケンシャルに行うかどうかを設定するメソッドです。[詳 細]
デフォルトではfalseを返却します。reserveModels(List)によって予約されたモデル群を
コントローラが実行する時、1モデルの結果取得を待ってから次モデルを
実行するかどうかの設定値として解釈されます。[備 考]
java.lang.Exception
public void successForward(int index,
Model model,
java.lang.Object result)
throws java.lang.Exception
[概 要]
モデル処理が正常終了した契機でコントローラにコールバックされるメソッドです。[詳 細]
コントローラが実行した機能モデルの数分コールバックされます。
モデルの処理結果は第三引数resultから取得しますが、実行したモデルの種類によって、
resultの実体(型)が異なります。
フレームワークが提供する以下の代表的なモデルは、次のようにresultを返却します。
HTTPRequestCore
SubscribeCore
[備 考]
機能モデルによって変換される前の処理結果を取得する場合は、以下のように取得可能です。
index - 結果を返却したモデルの実行インデックスmodel - 結果を返却したモデルインスタンスresult - モデル処理結果オブジェクト
java.lang.Exception
public java.lang.Exception failureForward(int index,
Model model,
java.lang.Exception e)
[概 要]
モデル処理が異常終了した契機でコントローラにコールバックされるメソッドです。[詳 細]
コントローラに実行されたモデルが例外を発生させた場合、コールバックされます。
戻り値Exceptionは最終的にコントローラにキャッチ
(jp.co.fujitsu.reffi.client.swing.controller.BaseController#trap(Throwable))されます。
nullを返却すると、上記のコントローラによるキャッチは発生しません。
[備 考]
index - 結果を返却したモデルの実行インデックスmodel - 結果を返却したモデルインスタンスe - モデル異常終了時の例外オブジェクト
public void complete(ParameterMapping parameterMapping)
throws java.lang.Exception
[概 要]
reserveModelsで登録されたモデル群が全て正常終了した契機でコールされます。[詳 細]
reserveModelsで登録された全モデルがfireModelFinishedを発行 した契機でコントローラによってコールバックされます。[備 考]
java.lang.Exception
public void done(ParameterMapping parameterMapping)
throws java.lang.Exception
[概 要]
reserveModelsで登録されたモデル群が全て終了、又は失敗した契機でコールされます。[詳 細]
モデル実行の成功、失敗に関わらずコールバックされます。[備 考]
parameterMapping - MVC各レイヤを伝播するパラメータオブジェクト
java.lang.Exceptionprotected java.lang.Exception trap(java.lang.Exception e)
[概 要]
Action内で発生した例外をハンドリングします。[詳 細]
デフォルト処理は有りません。[備 考]
e - アクション内で発生した例外
|
||||||||||
| 前のクラス 次のクラス | フレームあり フレームなし | |||||||||
| 概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド | |||||||||