Hitachi

JP1 Version 12 JP1/Navigation Platform ナビゲーション プラットフォーム 開発ガイド


4.4.5 データベースとの接続処理の実装

データベースに接続するプラグインを開発する場合の条件を次に示します。

次に,データベースに接続するプラグインを開発する場合に,推奨する実装を示します。

メモ

データソースのルックアップ処理の失敗を無視してプラグインの起動処理を終了させると,ナビゲーション プラットフォームを再起動するまで次のルックアップ処理は実行されません。

ルックアップ処理失敗の要因は次のどちらかであるため,UCNPPluginUserExceptionをスローしてナビゲーション プラットフォームが起動しないようにしておく必要があります。

  • リソースアダプタが起動していない。

  • リソースアダプタの設定とプラグインの実装に不整合がある。

〈この項の構成〉

(1) プラグインの初期化処理の実装例

  //inputFromNodeメソッドからデータソースを取得できるように,staticメンバ変数に格納する。
  private static DataSource mDs;
 
  @Override
  public void init() throws UCNPPluginUserException {
    try {
      // データソースのルックアップ処理は,必ずinitメソッド内で行うこと。
      InitialContext ic = new InitialContext();
      DataSource ds = (DataSource) ic.lookup(
          "java:comp/env/jdbc/TP_Connector_for_HiRDB_Type4"); 
      mDs = ds;
    } catch (NamingException e) {
      // ルックアップ処理に失敗したら,UCNPPluginUserExceptionをスローすること。
      UCNPPluginUserException ue = new UCNPPluginUserException(
          "ルックアップ処理に失敗しました。", e);
      throw ue;
    }
  }
 
  public static DataSource getDataSource() {
    return mDs;
  }

(2) outputToNodeメソッドの実装例

  public Map<String, Object> outputToNode(HttpSession session, Map<String, Object> param){
    Map<String, Object> map = new HashMap<String, Object>();
 
    DataSource ds = PluginInitializer.getDataSource(); // インスタンスを取得
    Connection con = null;
    PreparedStatement statement = null;
    String name = null;
    try {
      // 接続を確立する
      con = ds.getConnection();
 
      // SQLを実行する
      // 参照系の処理は,outputToNodeメソッドで行う
      statement = con.prepareStatement("SELECT NAME FROM TP_TBL");
      statement.setString(1, uid);
      ResultSet set = statement.executeQuery();
 
      // 結果を取得する
      if (set.next()) {
        name = set.getString(1);
      }
      Map<String, String> rtnParm = new HashMap<String, String>();
      rtnParm.put("outputParam1", name);
      map.put("ucnp.next.params.map ",rtnParm);
    } catch (SQLException e) {
       // エラー情報を応答に格納して,遷移を中断させる。
       map.put("ucnp.error.message","DBアクセスでエラーが発生しました。");
       map.put("ucnp.error.type","NG");
    } finally {
      if (statement != null) {
        try {
          statement.close();
        } catch (SQLException e) {
        }
      }
      if (con != null) {
        try {
          con.close();
        } catch (SQLException e) {
        }
      }
    }
    return name;
  }