目次 > 第3章 Appendix > 3.3 ノウハウ > ビジネスロジックをPOJOで実装する

ビジネスロジックをPOJOで実装する

Server(Web)版が提供するBLogicインタフェースを利用せずにPOJOで実装する場合は、POJOを実行するアクションクラスを作成する必要がある。
チュートリアル本編の「2.6 登録処理」をPOJOで実装する例を示す。

手順

以下に関しては、「2.6 登録処理」と同一であるため説明を省略する。

  • アクションフォームクラスと画面の作成
  • 入出力クラスの作成と設定
  • SQLの設定
  • メッセージの設定
  • トランザクションの設定確認
  • 動作確認

(1) POJOの実装

  1. “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);
    }
    
  2. 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を継承してアクションクラスを作成する。

  1. “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) アクションの設定

  1. 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で作成したアクションを関連付ける。


Copyright (C) 2009 NTT DATA CORPORATION