個人でこっそりgithubで作っているMariaDBの差分検出・反映ツールである「magentadesk」に、
API機能とHTML機能を追加しました。(0.4.0からHTML機能がはいってます)
(magentadesk)
https://github.com/shigenobu/magentadesk
今まではcli版しかなったのですが、web版も追加されています。
web版でしていることは、cli版の処理を呼び出しているに過ぎないのですが、
HTML機能を使うことで、各種jsonデータをsqliteに保存しておけるようになり、ボタン一つで差分検出・反映が可能となります。
API機能は、cli版の単なるHTTPインターフェースでしかないのですが、
HTML機能で追加したrelationという設定は、テーブルの子・親関係を登録しておくことで、
差分検出時にチェックボックスが連動するというものとなります。
magantadeskでは、外部キーが設定されているものは、
反映対象外としている(これは反映順番の整合性を保つのが難しいため)のですが、
それだと、差分確認時に、親子関係がわかりくいということから、このような機能を作ってみました。
で、API・HTML機能を作るに当たり、苦労した点があったので書いておきます。
(HTTPサーバにcom.sun.net.httpserver.HttpServerを利用)
デフォルトで同胞されているHTTPサーバなのですが、これが非常にくせのあるものでした。
例外などの際、ようは最後の最後のタイミングで、ただしくHTTPレスポンスを構築してくれないので、
最後の最後で、レスポンスを構築するように工夫しました。
(HTML機能の情報を蓄積するDBとして、sqliteを利用)
READ-COMMITEDをサポートしていないので、SERIALIZABLEの分離レベルを選択。
そのうえで、ファイルのため、WRITEブロックをすることは明白なので、
とにかくsqliteに接続している時間を各処理で短くするよう調整しました。
(テンプレートエンジンとしてvelocityを利用)
え?veloctiy?と思うかもしれませんが、2.3というバージョンが出ています。
当方は、velocity-toolは使わず、
event_handler.reference_insertion.class(旧eventhandler.referenceinsertion.class)
のプロパティを設定して、独自クラスでテンプレート関数を追加しています。
テンプレート上で、NULLと空文字の判定がデフォルトではできなかったので、
独自関数で対応しました。
という具合に、地道な苦労を重ねました。
magentadeskは主にwebサービスでの本番反映を想定して、汎用化を試みたものですが、
ニーズは少なそうだなと感じています。。
今後は、国際化対応(日本語化)を入れていきたいかなと考えていますが、
JAVAではなく、jqueryでやろうかなとか考え中です。
以上