目次 > 第3章 Appendix > 3.3 ノウハウ > ビジネスロジックをPOJOで実装する
ビジネスロジックをPOJOで実装する
Server(Web)版が提供するBLogicインタフェースを利用せずにPOJOで実装する場合は、POJOを実行するアクションクラスを作成する必要がある。
チュートリアル本編の「2.6 登録処理」をPOJOで実装する例を示す。
手順
以下に関しては、「2.6 登録処理」と同一であるため説明を省略する。
- アクションフォームクラスと画面の作成
- 入出力クラスの作成と設定
- SQLの設定
- メッセージの設定
- トランザクションの設定確認
- 動作確認
(1) POJOの実装
- “jp.terasoluna.thin.tutorial.web.usermanager.pojo.InsertLogic”インタフェースを作成し、以下のように編集する。
package jp.terasoluna.thin.tutorial.web.usermanager.pojo; import jp.terasoluna.thin.tutorial.web.usermanager.dto.InsertInput; /** * 登録処理を行うインタフェース。 */ public interface InsertLogic { /** * 入力された情報をデータベースに登録する。 * * @param param 画面にて入力された値を保持するBean * @return 登録結果 */ public boolean register(InsertInput param); }
- InsertLogicを実装した“jp.terasoluna.thin.tutorial.web.usermanager.pojo.InsertLogicImpl”を作成し、以下のように編集する。
package jp.terasoluna.thin.tutorial.web.usermanager.pojo; import jp.terasoluna.fw.dao.QueryDAO; import jp.terasoluna.fw.dao.UpdateDAO; import jp.terasoluna.thin.tutorial.web.usermanager.dto.InsertInput; import jp.terasoluna.thin.tutorial.web.usermanager.vo.SelectUserOutput; /** * 登録処理を行うロジッククラス。 * */ public class InsertLogicImpl implements InsertLogic { /** * QueryDAO。 * Springによりインスタンス生成され設定される。 */ private QueryDAO queryDAO = null; /** * UpdateDAO。 * Springによりインスタンス生成され設定される。 */ private UpdateDAO updateDAO = null; /** * 入力された情報をデータベースに登録する。 * * @param param 画面にて入力された値を保持するBean * @return 登録結果 */ public boolean register(InsertInput param) { //重複するデータを取得する。 SelectUserOutput selectUserOutput = queryDAO.executeForObject("getUser", param, SelectUserOutput.class); //登録するIDが重複してる場合はfalseを返却する。 if(selectUserOutput != null) { return false; } //登録処理 updateDAO.execute("insertUser", param); return true; } /** * QueryDAOを設定する。 * @param queryDAO */ public void setQueryDAO(QueryDAO queryDAO) { this.queryDAO = queryDAO; } /** * UpdateDAOを設定する。 * @param updateDAO */ public void setUpdateDAO(UpdateDAO updateDAO) { this.updateDAO = updateDAO; } }
(2) アクションクラスの作成
AbstractBLogicActionを継承してアクションクラスを作成する。
- “jp.terasoluna.thin.tutorial.web.usermanager.action.InsertAction”を作成し、以下のように編集する。
package jp.terasoluna.thin.tutorial.web.usermanager.action; import jp.terasoluna.fw.service.thin.BLogicMessage; import jp.terasoluna.fw.service.thin.BLogicMessages; import jp.terasoluna.fw.service.thin.BLogicResult; import jp.terasoluna.fw.web.struts.actions.AbstractBLogicAction; import jp.terasoluna.thin.tutorial.web.usermanager.dto.InsertInput; import jp.terasoluna.thin.tutorial.web.usermanager.pojo.InsertLogic; public class InsertAction extends AbstractBLogicAction<InsertInput> { /** * 入力情報登録POJO。 */ private InsertLogic insertLogic = null; /** * 入力情報登録POJOを設定する。 * * @param insertLogic 入力情報登録POJO */ public void setInsertLogic(InsertLogic insertLogic) { this.insertLogic = insertLogic; } /** * POJOを実行し、結果を返却する。 * * @param param 入力された値を保持したbean * @return 登録結果を保持したBLogicResult */ @Override public BLogicResult doExecuteBLogic(InsertInput param) throws Exception { BLogicResult result = new BLogicResult(); // POJOの実行 // 返却値が、falseの場合は重複エラー。 // trueの場合は登録処理が正常に終了。 if (!insertLogic.register(param)) { // 重複エラー時の処理 BLogicMessages messages = new BLogicMessages(); messages.add("message", new BLogicMessage("errors.input.id.repeat")); result.setErrors(messages); return result; } // 正常な場合は、結果文字列を設定して返却する。 //メッセージ処理 BLogicMessages messages = new BLogicMessages(); messages.add("message", new BLogicMessage("message.regist",param.getId())); result.setMessages(messages); result.setResultString("success"); return result; } }
このアクションから、手順1で作成したPOJOを実行する。
(3) アクションの設定
- Spring設定ファイル(userManagerContext.xml)に、以下の設定を追加する。
・・・略・・・ <!-- 登録処理用アクション定義 --> <bean name="/userManager/insertBL" scope="singleton" class="jp.terasoluna.thin.tutorial.web.usermanager.action.InsertAction" > <property name="insertLogic" ref="InsertLogic" /> </bean> <!-- 登録処理ロジック定義 --> <bean id="InsertLogic" scope="singleton" class="jp.terasoluna.thin.tutorial.web.usermanager.pojo.InsertLogicImpl"> <property name="queryDAO" ref="queryDAO" /> <property name="updateDAO" ref="updateDAO" /> </bean> ・・・略・・・
登録処理のアクションパス“insertBL”に対し、手順2で作成したアクションを関連付ける。