今まで動いていたプログラムがある日突然、正常系処理が通らないようになり、
原因を調べてみたところ、MyBatisの処理を呼び出した後の返却値が
「-2147482646」となっていることがわかりました。
その原因および原因究明までの経緯をメモしておきます。
発生原因
applicationContext.xmlに変更を加えていたため。【元】
<beans
xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
【変更後】
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:spring-dwr="http://www.directwebremoting.org/schema/spring-dwr"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
http://www.directwebremoting.org/schema/spring-dwr http://www.directwebremoting.org/schema/spring-dwr-2.0.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<context:annotation-config />
<context:component-scan base-package="~~~~~~" />
アノテーションによるComponentScanを利用しようとして、いくつかのスキーマ定義を読み込ませたことが悪かったようです。
根源
調べてみてもわからず。追加xmlスキーマを読んで挙動が変わったか、annotation-configの宣言で
ライブラリの読み込まれる順番、初期値などが変化したのかわかりませんが、
これ以上追う事はやめました。
発生経緯から、その他調べたこと
今回の件とは違うのですが、エラーコードで調べていくと幾つかの解決案がネット上に出ていたので、備忘録的にメモしておきます。
やったこと
機能追加でソースを修正し、その後発生。現象が発生している箇所は全く修正していない。
エラーコードで調べてみると、英文サイトで以下が見つかりました。
http://www.just4e.com/mybatis-3.0.4/docs/reference/org/apache/ibatis/executor/BatchExecutor.html
public static final int BATCH_UPDATE_RETURN_VALUE
Constant Value: -2147482646 (0x800003ea)
要は、バッチ更新モードの戻り値が、「-2147482646」だという事。
バッチ更新モードに変えたつもりもないし、そのようなソース変更履歴もない。
しかも、他の人のパソコンで実行した結果を確認してもらうと「1」 = 登録結果行数
こっちが正しいはずなので、私の実行環境がおかしい。
※当然、同じプログラムを実行してます。
調べてみると、以下のような会話が。
https://groups.google.com/forum/#!searchin/mybatis-user/2147482646%7Csort:relevance/mybatis-user/ddRPVRzwvlc/n5I_1YgKqSsJ
SqlSession session = sqlMapper.openSession(ExecutorType.SIMPLE);
BatchModeで開くのではなく、Simpleモードで開く。ということなので、
ソースを探してみたところ、数か所でopenSession(); を発見。
初期値がどうなっているかは調べもしないでとりあえず (ExecutorType.SIMPLE) を指定して再ビルド:実行
結果、変わらず。
その後、mybatisのドキュメントより初期値を発見。初期値はSIMPLEでした。
http://mybatis.github.io/mybatis-3/ja/configuration.html
既定値の変更(defaultExecutorType)ができるようなので、設定名でソースを検索したが結果、該当なし。
別観点としてデータベースとのコネクション周りを疑い、他のデータベースへ接続しても現象同じ。
というところで調査をやめて、コミット単位のモジュールで調査して行ったところ
上記の原因へ至ったという次第でした。
まとめ
今回の発生起因は「annotationを使いたい」ために色々といじったことが原因でした。実装の根幹を変えるような変更を行う際は十分注意しましょう。
0 件のコメント:
コメントを投稿